KR20190116260A - 보류 로드 및 스토어의 별도 추적 - Google Patents

보류 로드 및 스토어의 별도 추적

Info

Publication number
KR20190116260A
KR20190116260A KR1020197020241A KR20197020241A KR20190116260A KR 20190116260 A KR20190116260 A KR 20190116260A KR 1020197020241 A KR1020197020241 A KR 1020197020241A KR 20197020241 A KR20197020241 A KR 20197020241A KR 20190116260 A KR20190116260 A KR 20190116260A
Authority
KR
South Korea
Prior art keywords
counter
execution unit
store
instruction
response
Prior art date
Application number
KR1020197020241A
Other languages
English (en)
Other versions
KR102515106B1 (ko
Inventor
마크 파울러
브라이언 디. 엠버링
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20190116260A publication Critical patent/KR20190116260A/ko
Application granted granted Critical
Publication of KR102515106B1 publication Critical patent/KR102515106B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Abstract

별도의 보류 로드 및 스토어 카운터들을 관리하기 위한 시스템들, 장치들 및 방법들이 본 명세서에 개시된다. 일 실시 예에서, 시스템은 적어도 하나의 실행 유닛, 메모리 서브 시스템 및 각 실행 스레드에 대한 카운터들의 쌍을 포함한다. 일 실시 예에서, 시스템은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현한다. 일 실시 예에서, 실행 유닛(들)은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 지원하기 위한 카운터들을 유지한다. 실행 유닛(들)은 실행 시간 동안 종속성을 관리하기 위해 사용되는 명령들을 실행하도록 구성된다. 일 실시 예에서, 실행 유닛(들)은 계속해서 명령 시퀀스를 실행하기 전에 소정의 카운터가 지정된 값과 동일할 때까지 대기하기 위한 대기 명령들을 실행한다.

Description

보류 로드 및 스토어의 별도 추적
프로세서들은 로드 메모리 연산들 및 스토어 메모리 연산들에 대한 지원을 포함하여 프로세서들과 프로세서들이 결합된 메모리 간에 데이터를 쉽게 전달할 수 있다. 일반적으로 말하면, 로드 메모리 연산은 메모리 위치로부터 프로세서로 데이터의 전달을 지정하는 연산이다. 메모리 위치는 메모리 계층 내의 위치를 지칭하며, 메모리 계층 구조는 하나 이상의 레벨의 캐시 및/또는 하나 이상의 레벨의 메모리를 포함한다. 스토어 메모리 연산은 프로세서로부터 메모리 계층 구조 내 위치로 데이터의 전달을 지정하는 연산이다.
본 명세서에서 사용될 때, "명령(instruction)"이라는 용어는 프로세서에 의해 수행될 하나 이상의 연산을 나타내는 정보를 지칭한다. "연산(operation)"은 소정의 처리 사이클 동안 아무것도 하지 않는(예를 들어, "nop"또는 "무연산(no-operation)" 명령 또는 조건이 거짓인 조건부 명령에 기초하여) 프로세싱 요소를 포함할 수 있다. 명령은 소정의 명령 세트 아키텍처(ISA)에 의해 정의될 수 있다. 또한 명령은 특정 ISA와 관련 있기 보다는 마이크로 아키텍처에 의해 정의될 수 있다. 예를 들어, ISA 명령은 하나 이상의 마이크로 연산으로 디코딩될 수 있으며, 이는 그것들이 프로세서에 의해 수행될 연산을 지정할 때 "명령들"이라고 지칭될 수도 있다. 그에 따라, "스토어 명령(store instruction)"은 ISA에 의해 정의될 수도 그렇지 않을 수도 있다. 스토어 명령은 스토어 연산이 수행되어야 함을 나타내는 정보를 포함하고 통상적으로 스토어의 타겟 메모리 위치를 나타내는 정보를 포함한다.
로드 및 스토어 메모리 연산들은 다양한 구현 예에서, 메모리 연산을 포함하는 명령의 암시적 부분일 수도, 또는 명시적 명령들일 수도 있다. "로드 메모리 연산들"은 본 명세서에서 "로드 명령들" 또는 "로드 연산들"이라고도 지칭된다. 유사하게, "스토어 메모리 연산들"은 본 명세서에서 "스토어 명령들" 또는 "스토어 연산들"이라고도 지칭된다. "로드 연산" 또는 "스토어 연산"이라는 용어는 "원자 단위 연산(atomic operation)"이라고 지칭될 수도 있음이 주의된다. 원자 단위 연산은 메모리 위치로부터의 데이터와 레지스터 위치로부터의 데이터의 산술 조합을 수행한다. 또한 "로드 연산"이라는 용어는 "샘플 연산(sample operation)"을 지칭하기 위해 사용될 수도 있음이 주의된다. 샘플 연산은 데이터 값이 메모리 위치로부터 판독된 후 샘플러 상수들을 사용하여 필터링을 데이터 값에 적용한다.
많은 로드 및 스토어 연산은 특히 다중 스레드가 데이터를 공유할 때 다중 스레드 프로그래밍 환경에서, 그 외 다른 연산들에 종속된다. 종속성이 해결된 시점을 기준으로 이러한 로드들 및 스토어들을 언제 실행할 지 결정하는 것은 어려울 수 있다.
본 명세서 설명되는 방법들 및 메커니즘들의 이점들은 첨부 도면들과 함께 이하의 구체적인 내용을 참조함으로써 더 잘 이해될 수 있으며, 첨부 도면들에서:
도 1은 컴퓨팅 시스템의 일 실시 예의 블록도이다.
도 2는 실행 유닛의 일 실시 예의 블록도이다.
도 3은 소프트웨어 환경의 일 실시 예의 블록도이다.
도 4는 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현하는 방법의 일 실시 예를 도시하는 개괄적인 흐름도이다.
도 5는 보류 로드 및 스토어 카운터들을 관리하기 위한 방법의 일 실시 예를 도시하는 개괄적인 흐름도이다.
도 6은 보류 로드 및 스토어 연산들을 별도로 추적하기 위한 방법의 일 실시 예를 도시하는 개괄적인 흐름도이다.
도 7은 대기 명령을 구현하기 위한 방법의 일 실시 예를 도시하는 개괄적인 흐름도이다.
이하의 구체적인 내용에서, 본 명세서에 제시되는 방법들 및 메커니즘들에 대한 완전한 이해를 제공하기 위해 많은 구체적인 세부 사항이 제시된다. 그러나, 해당 기술분야의 통상의 기술자는 다양한 실시 예가 이러한 구체적인 세부 사항 없이도 실시될 수 있다는 것을 인식해야 한다. 경우에 따라서는, 주지된 구조들, 구성요소들, 신호들, 컴퓨터 프로그램 명령들 및 기술들이 본 명세서에 설명되는 접근법들을 모호하게 하는 것을 방지하기 위해 구체적으로 제시되지 않았다. 도시의 단순성 및 명료성을 위해, 도면들에 도시된 요소들은 반드시 일정한 비율로 그려진 것은 아니라는 것을 이해할 것이다. 예를 들어, 요소들 중 일부의 치수들은 그 외 다른 요소들에 비해 과장될 수 있다.
별도의 보류 로드 및 스토어 카운터들을 관리하기 위한 시스템들, 장치들 및 방법들이 본 명세서에 개시된다. 일 실시 예에서, 시스템은 적어도 하나의 실행 유닛, 메모리 서브 시스템 및 각 실행 스레드에 대한 카운터들의 쌍을 포함한다. 일 실시 예에서, 시스템은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현한다. 일 실시 예에서, 시스템은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 지원하기 위한 카운터들을 유지한다. 시스템은 카운터들의 값들을 참조함으로써 실행 시간 동안 종속성을 관리하기 위해 사용되는 명령들을 실행하도록 구성된다.
일 실시 예에서, 시스템은 제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 제1 실행 유닛의 제1 카운터를 증가시키도록 구성된다. 또한 시스템은 로드 명령의 데이터가 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 제1 카운터를 감소시키도록 구성된다. 추가로, 시스템은 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 제1 실행 유닛의 제2 카운터를 증가시키도록 구성된다. 또한, 시스템은 스토어 명령이 완료되었다는 확인 응답을 메모리 서브 시스템으로부터 수신하는 것에 응답하여 제2 카운터를 감소시키도록 구성된다. 스토어 명령은 스토어 명령의 데이터가 메모리 서브 시스템에 기록될 때 그리고 데이터가 그 외 다른 스레드들에 보일 때 완료된다. 제1 실행 유닛은 소정의 카운터가 대기 명령에서 지정되는 소정의 값과 동일할 때까지 대기하기 위한 대기 명령을 실행하도록 구성된다.
이제 도 1을 참조하면, 컴퓨팅 시스템(100)의 일 실시 예의 블록도가 도시되어 있다. 일 실시 예에서, 컴퓨팅 시스템(100)은 메모리(150)에 결합되는 시스템 온 칩(SoC)(105)을 포함한다. SoC(105)는 집적 회로(IC)로 지칭될 수도 있다. 일 실시 예에서, SoC(105)는 중앙 처리 장치(CPU)(165)의 프로세싱 유닛들(175A-N), 입력/출력(I/O) 인터페이스들(155), 캐시들(160A-B), 패브릭(120, 그래픽 처리 장치(GPU)(130), 로컬 메모리(110) 및 메모리 제어기(들)(140)를 포함한다. 또한 SoC(105)는 도면을 모호하게 하는 것을 방지하기 위해 도 1에 도시되지 않은 그 외 다른 구성요소들도 포함할 수 있다. 프로세싱 유닛들(175A-N)은 임의의 수 및 유형의 프로세싱 유닛들을 나타낸다. 일 실시 예에서, 프로세싱 유닛들(175A-N)은 CPU 코어들이다. 다른 실시 예에서, 프로세싱 유닛들(175A-N)의 하나 이상은 그 외 다른 유형들의 프로세싱 유닛들(예를 들어, ASIC(application specific integrated circuit), FPGA(field programmable gate array) 및 DSP(digital signal processor))이다. CPU(165)의 프로세싱 유닛들(175A-N)은 캐시들(160A-B) 및 패브릭(120)에 결합된다.
일 실시 예에서, 프로세싱 유닛들(175A-N)은 특정 명령 세트 아키텍처(ISA)의 명령들을 실행하도록 구성된다. 각 프로세싱 유닛(175A-N)은 하나 이상의 실행 유닛, 캐시 메모리, 스케줄러, 분기 예측 회로 등을 포함한다. 일 실시 예에서, 프로세싱 유닛들(175A-N)은 시스템(100)의 메인 제어 소프트에어, 이를테면 운영 체제를 실행하도록 구성된다. 일반적으로, 사용 동안 프로세싱 유닛들(175A-N)에 의해 실행되는 소프트웨어는 시스템(100)의 목적하는 기능을 실형하도록 시스템(100)의 그 외 다른 구성요소들을 제어할 수 있다. 또한 프로세싱 유닛들(175A-N)은 그 외 다른 소프트웨어, 이를테면 응용 프로그램들을 실행할 수도 있다.
GPU(130)는 그래픽 또는 범용 프로세싱 위해 사용되는 임의의 수 및 유형의 컴퓨트 유닛들을 나타내는 적어도 카운터들(135) 및 컴퓨트 유닛들(145A-N)을 포함한다. 각 컴퓨트 유닛(145A-N)은 임의의 수의 실행 유닛을 포함하며, 컴퓨터 유닛에 대한 실행 유닛들의 수는 실시 예마다 달라진다. GPU(130)는 로컬 메모리(110) 및 패브릭(120)에 결합된다. 일 실시 예에서, 로컬 메모리(110)는 고대역폭 메모리(HBM)를 사용하여 구현된다. 일 실시 예에서, GPU(130)는 그래픽 파이프라인 연산들 이를테면 드로우 명령들, 픽셀 연산들, 기하학적 컴퓨테이션들 및 이미지를 디스플레이에 렌더링하기 위한 그 외 다른 연산들을 실행하도록 구성된다. 다른 실시 예에서, GPU(130)는 그래픽과 관련되지 않은 연산들을 실행하도록 구성된다. 추가 실시 예에서, GPU(130)는 그래픽 연산들 및 논-그래픽 연산들 양자를 실행하도록 구성된다.
일 실시 예에서, GPU(130)는 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현하기 위한 카운터들(135)을 이용한다. GPU(130)의 컴퓨트 유닛들(145)은 실행 시간 동안 종속성을 관리하기 위해 사용되는 명령들을 실행하도록 구성된다. 일 실시 예에서, GPU(130)의 컴퓨트 유닛들(145)은 계속해서 명령 시퀀스를 실행하기 전에 소정의 카운터가 지정된 값과 동일할 때까지 대기하기 위한 대기 명령들을 실행한다.
일 실시 예에서, GPU(130)는 제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 카운터들(135)의 제1 카운터를 증가시키도록 구성된다. 또한 GPU(130)는 로드 명령의 데이터가 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 제1 카운터를 감소시키도록 구성된다. 추가로, GPU(130)는 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 카운터들(135)의 제2 카운터를 증가시키도록 구성된다. 또한, GPU(130)는 스토어 명령이 완료되었다는 확인 응답을 캐시 또는 메모리로부터 수신하는 것에 응답하여 제2 카운터를 감소시키도록 구성된다. 스토어 명령은 스토어 명령의 데이터가 캐시 또는 메모리에 기록될 때 그리고 데이터가 그 외 다른 스레드들에 보일 때 완료된다. GPU(130)는 소정의 카운터가 대기 명령에서 지정되는 소정의 값과 동일할 때까지 대기하기 위한 대기 명령을 실행하도록 구성된다.
I/O 인터페이스들(155)은 패브릭(120)에 결합되고, I/O 인터페이스들(155)은 임의의 수 및 유형의 인터페이스들(예를 들어, PCI(peripheral component interconnect) 버스, PCI-X(PCI-Extended), PCIE(PCI Express) 버스, GBE(gigabit Ethernet) 버스, USB(universal serial bus) 버스)을 나타낸다. 다양한 유형의 주변 디바이스들이 I/O 인터페이스들(155)에 결합될 수 있다. 그러한 주변 디바이스들은 디스플레이들, 키보드들, 마우스들, 프린터들, 스캐너들, 조이스틱들 또는 그 외 다른 유형들의 게임 제어기들, 미디어 레코딩 디바이스들, 외부 저장 디바이스들, 네트워크 인터페이스 카드들 등을 포함한다(그러나, 이에 제한되지는 않는다).
SoC(105)는 메모리(150)에 결합되며, 이는 하나 이상의 메모리 모듈을 포함한다. 메모리 모듈들의 각각은 장착되는 하나 이상의 메모리 디바이스를 포함한다. 일부 실시 예에서, 메모리(150)는 SoC(105)가 또한 장착되는 마더보드 또는 그 외 다른 캐리어 상에 장착되는 하나 이상의 메모리 디바이스를 포함한다. 일 실시 예에서, 메모리(150)는 연산 동안 SoC(105)와 사용하기 위한 랜덤 액세스 메모리(RAM)를 구현하기 위해 사용된다. 구현되는 RAM은 정적 RAM(SRAM), 동적 RAM(DRAM), 저항성 RAM(ReRAM), 상 변화 RAM(PCRAM) 또는 임의의 그 외 다른 휘발성 또는 비휘발성 RAM일 수 있다. 메모리(150)를 구현하기 위해 사용되는 DRAM의 유형은 DDR(double data rate) DRAM, DDR2 DRAM, DDR3 DRAM 등을 포함한다. 도 1에 명시적으로 도시되지는 않았지만, SoC(105)는 또한 프로세싱 유닛들(175A-N) 및/또는 컴퓨트 유닛들(145A-N) 내부에 있는 하나 이상의 캐시 메모리를 포함할 수도 있다. 일부 실시 예에서, SoC(105)는 프로세싱 유닛들(175A-N)에 의해 이용되는 캐시들(160A-B)을 포함한다. 일 실시 예에서, 캐시들(160A-B)은 캐시 제어기를 포함하는 캐시 서브 시스템의 일부이다.
다양한 실시 예에서, 컴퓨팅 시스템(100)은 컴퓨터, 랩탑, 모바일 디바이스, 서버 또는 임의의 다양한 그 외 다른 유형의 컴퓨팅 시스템들 또는 디바이스들일 수 있다. 컴퓨팅 시스템(100) 및/또는 SoC(105)의 구성요소들의 수는 실시 예마다 달라질 수 있음이 주의된다. 각 구성요소/서브 구성요소의 수가 도 1에 도시된 수보다 더 많거나 더 적을 수 있다. 예를 들어, 다른 실시 예에서, SoC(105)는 다수의 메모리에 결합되는 다수의 메모리 제어기를 포함할 수 있다. 또한 컴퓨팅 시스템(100) 및/또는 SoC(105)는 도 1에 도시되지 않은 그 외 다른 구성요소들도 포함할 수 있음이 주의된다. 추가로, 그 외 다른 실시 예들에서, 컴퓨팅 시스템(100) 및 SoC(105)는 도 1에 도시된 방식과 다른 방식들로 구조화될 수 있다.
이제 도 2를 참조하면, 실행 유닛(205)의 일 실시 예의 블록도가 도시되어 있다. 일 실시 예에서, 실행 유닛(205)은 적어도 제어 로직(220), 로드 카운터(225) 및 스토어 카운터(230)를 포함한다. 일 실시 예에서, 다수의 실행 유닛(205)이 컴퓨트 유닛들(145A-N)(도 1의)의 각각 내에 구현될 수 있다. "로드 카운터"라는 용어는 "벡터 메모리 로드 카운터"로 지칭될 수도 있음이 주의된다. 유사하게, "스토어 카운터"라는 용어는 "벡터 메모리 스토어 카운터"로 지칭될 수도 있음이 주의된다. 또한 실행 유닛(205)은 각 실행 스레드마다 별도의 로드 및 스토어 카운터들의 쌍을 유지한다.
실행 유닛(205)은 메모리 서브 시스템(210)에 결합되며, 메모리 서브 시스템(210)은 임의의 수 및 유형의 캐시들 및/또는 메모리 디바이스들을 포함한다. 예를 들어, 일 실시 예에서, 메모리 서브 시스템(210)은 레벨 1(L1) 캐시, 레벨 2(L2) 캐시 및 시스템 메모리를 포함한다. 그 외 다른 실시 예들에서, 메모리 서브 시스템(210)은 그 외 다른 수들의 캐시 레벨들 및/또는 그 외 다른 유형들의 메모리를 포함할 수 있다.
일 실시 예에서, 실행 유닛(205)이 로드 명령을 실행할 때, 실행 유닛(205)은 로드 카운터(225)를 증가시킨다. 로드 명령의 데이터가 메모리 서브 시스템(210)에서 검색되고 실행 유닛(205) 내에서 이용 가능할 때, 실행 유닛(205)은 로드 카운터(225)를 감소시킨다. 실행 유닛(205)이 스토어 명령을 실행할 때, 실행 유닛(205)은 스토어 카운터(230)를 증가시킨다. 실행 유닛(205)이 메모리 서브 시스템(210)으로부터 스토어 명령이 완료되었다는 확인 응답을 수신할 때, 실행 유닛(205)은 스토어 카운터(230)를 감소시킨다. 실행 유닛(205)은 지정된 카운터가 소정의 값과 동일할 때까지 후속 명령들을 실행하기를 기다릴 것을 지정하는 대기 명령들을 실행하도록 구성된다. 예를 들어, 일 실시 예에서, 대기 명령은 로드 카운터(225)가 제로와 동일할 때까지 기다릴 것을 지정한다. 대기 명령들은 지정된 카운터가 비-제로 값과 동일할 때까지 실행 유닛(205)이 대기할 것을 지정할 수도 있다.
이제 도 3을 참조하면, 소프트웨어 환경(300)의 일 실시 예의 블록도가 도시되어 있다. 일 실시 예에서, 소프트웨어 환경(300)은 컴퓨팅 시스템(예를 들어, 도1의 컴퓨팅 시스템(100)) 상에서 실행할 수 있는 실행 가능한 코드(315)를 생성하기 위해 이용된다. 컴파일러(310)는 소스 코드(305)를 수신하고 실행 가능한 코드(315)로 컴파일링하도록 구성된다. 컴파일러(310)가 소스 코드(305)에 관한 최적화를 수행할 때, 컴파일러(310)는 다양한 대기 명령을 실행 가능한 코드(315)로 삽입할 수 있는 유연성을 갖는다.
일 실시 예에서, 컴파일러(310)는 다중 스레드 실행 환경에서 명령들 간 소프트웨어 종속성을 관리하기 위한 대기 명령들을 실행 가능한 코드(315)에 삽입한다. 컴파일러(310)가 소정의 대기 명령을 실행 가능한 코드(315)로 삽입할 때, 소정의 대기 명령은 소정의 스레드에 대한 대응하는 로드 또는 스토어 카운터를 식별한다. 또한 대기 명령은 실행이 계속하도록 허용되기 전에 대기할 값을 식별한다. 예를 들어, 일 실시 예에서, 대기 명령은 대기할 비-제로 카운트 값을 지정할 수 있고, 지정된 카운터가 지정된 비-제로 카운트 값에 도달할 때, 명령 시퀀스로부터의 후속 명령이 실행될 수 있다.
이제 도 4를 참조하면, 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현하기 위한 방법(400)의 일 실시 예가 도시되어 있다. 이 실시 예에서의 단계들 및 도 5 내지 도 7에서의 단계들은 논의를 위해, 순차적인 순서로 도시되어 있다. 그러나, 설명되는 방법들의 다양한 실시 예에서, 설명되는 요소들 중 하나 이상의 요소가 동시에, 도시된 것과 상이한 순서로 또는 완전히 생략됨이 주의된다. 그 외 다른 추가 요소들이 또한 목적하는 대로 수행된다. 본 명세서에 설명된 다양한 시스템 또는 장치 중 임의의 시스템 또는 장치가 방법 (400)을 구현하도록 구성된다.
시스템은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 구현한다(블록(405)). 일 실시 예에서, 시스템(예를 들어, 도 1의 시스템(100))은 적어도 하나의 실행 유닛 및 메모리 서브 시스템을 포함한다. 또한 시스템은 실시 예에 따라 임의의 수의 그 외 다른 구성요소들을 포함할 수도 있다. 시스템은 명령들 간 종속성을 관리하기 위한 소프트웨어 기반 접근법을 지원하기 위한 복수의 카운터를 유지한다(블록(410)). 일 실시 예에서, 시스템은 각 실행 스레드마다 카운터들의 쌍을 유지하며, 제1 카운터는 다수의 보류 스토어 명령을 추적하고 제2 카운터는 다수의 보류 로드 명령을 추적한다. 시스템의 실행 유닛(들)은 카운터들의 값들을 참조함으로써 실행 시간 동안 종속성을 관리하기 위한 명령들을 실행하도록 구성된다(블록(415)). 블록(415) 이후, 방법(400)이 종료된다.
이제 도 5를 참조하면, 보류 로드 및 스토어 카운터들을 관리하기 위한 방법(500)의 일 실시 예가 도시되어 있다. 시스템은 제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 제1 실행 유닛의 제1 카운터를 증가시키도록 구성된다(블록(505)). 또한, 시스템은 로드 명령의 타겟이 된 데이터가 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 제1 카운터를 감소시키도록 구성된다(블록(510)). 추가로, 시스템은 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 제1 실행 유닛의 제2 카운터를 증가시키도록 구성된다(블록(515)). 더 나아가, 시스템은 스토어 명령이 완료되었다는 확인 응답을 메모리 서브 시스템으로부터 수신하는 것에 응답하여 제2 카운터를 감소시키도록 구성된다(블록(520)). 또한, 시스템은 제1 또는 제2 카운터 중 어느 하나가 소정의 값과 동일할 때까지 제1 실행 유닛의 기능을 정지하기 위한 대기 명령을 실행하도록 구성된다(블록(525)). 블록(525) 이후, 방법(500)이 종료된다.
이제 도 6을 참조하면, 보류 로드 및 스토어 명령들을 별도로 추적하기 위한 방법(600)의 일 실시 예가 도시되어 있다. 실행 유닛은 명령 시퀀스의 실행을 개시한다(블록(605)). 일 실시 예에서, 실행 유닛은 스토어 및 로드 명령들을 교차 배치하는 다중 스레드 명령 시퀀스를 실행한다. 실행 유닛이 로드 명령이 실행됨을 검출할 경우(조건부 블록(610), "예" 분기), 실행 유닛은 보류 로드 카운터를 증가시킨다(블록(615)). 실행 유닛이 스토어 명령이 실행됨을 검출할 경우(조건부 블록(620), "예" 분기), 실행 유닛은 보류 스토어 카운터를 증가시킨다(블록(625)). 실행 유닛이 보류 로드 명령의 데이터가 메모리 서브 시스템으로부터 검색되었다는 표시를 수신할 경우(조건부 블록(630), "예" 분기), 실행 유닛은 보류 로드 카운터를 감소시킨다(블록(635)). 추가적으로, 실행 유닛이 메모리 서브 시스템으로부터 스토어 명령이 완료되었다는 확인 응답을 수신할 경우(조건부 블록(640), "예" 분기), 실행 유닛은 보류 스토어 카운터를 감소시킨다(블록(645)). 블록(645) 이후, 방법(600)은 블록(610)으로 되돌아간다.
이제 도 7을 참조하면, 대기 명령을 구현하기 위한 방법(700)의 일 실시 예가 도시되어 있다. 프로세서가 명령 시퀀스에서 대기 명령을 검출하며, 대기 명령은 소정의 카운터에 대한 소정의 값을 지정한다(예를 들어, 로드 카운터, 스토어 카운터)(블록(705)). 다음으로, 프로세서는 대기 명령(블록(710))을 실행한다. 소정의 카운터가 소정의 값에 도달했을 경우(조건부 블록(715), "예" 분기), 프로세서는 명령 시퀀스에서 후속 명령을 실행한다(블록(720)). 블록(720) 이후, 방법(700)이 종료된다. 소정의 카운터가 소정의 값에 도달하지 않았을 경우(조건부 블록(715), "아니오" 분기), 프로세서는 명령 시퀀스에서 후속 명령들을 실행하는 것이 금지된다(블록(725)). 일 실시 예에서, 프로세서는 블록(725)에서 단지 특정 유형들의 명령들(예를 들어, 로드 명령들, 스토어 명령들)을 실행하는 것이 금지된다. 블록(725) 이후, 방법(700)은 조건부 블록(715)으로 되돌아간다.
다양한 실시 예에서, 소프트웨어 어플리케이션의 프로그램 명령들은 이전에 설명된 방법들 및/또는 메커니즘들을 구현하기 위해 사용된다. 프로그램 명령들은 C와 같은 상위 레벨 프로그래밍 언어로 하드웨어의 동작을 설명한다. 대안적으로, Verilog와 같은 하드웨어 설계 언어(HDL)가 사용된다. 프로그램 명령들은 비일시적 컴퓨터 판독 가능한 저장 매체에 저장된다. 많은 유형의 저장 매체가 이용 가능하다. 저장 매체는 프로그램 실행을 위해 컴퓨팅 시스템에 프로그램 명령들 및 수반 데이터를 제공하기 위해 사용 동안 컴퓨팅 시스템에 의해 액세스 가능하다. 컴퓨팅 시스템은 적어도 하나 이상의 메모리 및 프로그램 명령들을 실행하도록 구성된 하나 이상의 프로세서를 포함한다.
전술한 실시 예들은 단지 구현의 비제한적인 예들일 뿐이라는 것이 강조되어야 한다. 상기한 개시 내용이 완전히 이해되면, 해당 기술분야의 통상의 기술자들에게는 다양한 변형 및 수정이 명백해질 것이다. 다음의 청구범위는 그러한 모든 변형 및 수정을 포함하는 것으로 해석되어야 한다.

Claims (20)

  1. 시스템으로서,
    메모리 서브 시스템;
    하나 이상의 실행 유닛으로서, 상기 하나 이상의 실행 유닛의 제1 실행 유닛은 제1 카운터 및 제2 카운터를 포함하는, 상기 하나 이상의 실행 유닛을 포함하되;
    상기 시스템은:
    제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 상기 제1 카운터를 증가시키도록;
    상기 로드 명령의 타겟이 된 데이터가 상기 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 상기 제1 카운터를 감소시키도록;
    상기 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 상기 제2 카운터를 증가시키도록; 그리고
    상기 스토어 명령이 완료되었다는 확인 응답을 상기 메모리 서브 시스템으로부터 수신하는 것에 응답하여 상기 제2 카운터를 감소시키도록 구성되는, 시스템.
  2. 청구항 1에 있어서, 상기 제1 실행 유닛은 소정의 카운터가 상기 대기 명령에서 지정되는 소정의 값과 동일할 때까지 대기하기 위한 대기 명령을 실행하도록 구성되는, 시스템.
  3. 청구항 2에 있어서, 상기 소정의 카운터는 상기 제1 카운터인, 시스템.
  4. 청구항 2에 있어서, 상기 소정의 값은 제로인, 시스템.
  5. 청구항 2에 있어서, 상기 소정의 값은 비-제로 값인, 시스템.
  6. 청구항 1에 있어서, 상기 스토어 명령은 상기 스토어 명령의 데이터가 상기 메모리 서브 시스템에 기록될 때 그리고 상기 데이터가 그 외 다른 스레드들에 보일 때 완료되는, 시스템.
  7. 청구항 1에 있을 때, 각 실행 스레드마다 카운터들의 쌍을 포함하는, 시스템.
  8. 방법으로서,
    제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 제1 실행 유닛의 제1 카운터를 증가시키는 단계;
    상기 로드 명령의 타겟이 된 데이터가 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 상기 제1 카운터를 감소시키는 단계;
    상기 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 상기 제1 실행 유닛의 제2 카운터를 증가시키는 단계; 및
    상기 스토어 명령이 완료되었다는 확인 응답을 상기 메모리 서브 시스템으로부터 수신하는 것에 응답하여 상기 제2 카운터를 감소시키는 단계를 포함하는, 방법.
  9. 청구항 8에 있어서, 소정의 카운터가 상기 대기 명령에서 지정되는 소정의 값과 동일할 때까지 대기하기 위한 대기 명령을 실행하는 단계를 더 포함하는, 방법.
  10. 청구항 9에 있어서, 상기 소정의 카운터는 상기 제1 카운터인, 방법.
  11. 청구항 9에 있어서, 상기 소정의 값은 제로인, 방법.
  12. 청구항 9에 있어서, 상기 소정의 값은 비-제로 값인, 방법.
  13. 청구항 8에 있어서, 상기 스토어 명령은 상기 스토어 명령의 데이터가 상기 메모리 서브 시스템에 기록될 때 그리고 상기 데이터가 그 외 다른 스레드들에 보일 때 완료되는, 방법.
  14. 청구항 8에 있을 때, 각 실행 스레드마다 카운터들의 쌍을 유지하는 단계를 더 포함하는, 방법.
  15. 장치로서,
    메모리 서브 시스템; 및
    제1 카운터 및 제2 카운터를 포함하는 실행 유닛을 포함하되;
    상기 실행 유닛은:
    제1 스레드의 로드 명령이 실행됨을 검출하는 것에 응답하여 상기 제1 카운터를 증가시키도록;
    상기 로드 명령의 타겟이 된 데이터가 메모리 서브 시스템으로부터 검색되었음을 결정하는 것에 응답하여 상기 제1 카운터를 감소시키도록;
    상기 제1 스레드의 스토어 명령이 실행됨을 검출하는 것에 응답하여 상기 제2 카운터를 증가시키도록; 그리고
    상기 스토어 명령이 완료되었다는 확인 응답을 상기 메모리 서브 시스템으로부터 수신하는 것에 응답하여 상기 제2 카운터를 감소시키도록 구성되는, 장치.
  16. 청구항 15에 있어서, 상기 실행 유닛은 소정의 카운터가 상기 대기 명령에서 지정되는 소정의 값과 동일할 때까지 대기하기 위한 대기 명령을 실행하도록 구성되는, 장치.
  17. 청구항 16에 있어서, 상기 소정의 카운터는 상기 제1 카운터인, 장치.
  18. 청구항 16에 있어서, 상기 소정의 값은 제로인, 장치.
  19. 청구항 16에 있어서, 상기 소정의 값은 비-제로 값인, 장치.
  20. 청구항 15에 있어서, 상기 스토어 명령은 상기 스토어 명령의 데이터가 상기 메모리 서브 시스템에 기록될 때 그리고 상기 데이터가 그 외 다른 스레드들에 보일 때 완료되는, 장치.
KR1020197020241A 2017-02-24 2018-02-23 보류 로드 및 스토어의 별도 추적 KR102515106B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/442,412 2017-02-24
US15/442,412 US11074075B2 (en) 2017-02-24 2017-02-24 Wait instruction for preventing execution of one or more instructions until a load counter or store counter reaches a specified value
EP17159096.1A EP3367235B1 (en) 2017-02-24 2017-03-03 Separate tracking of pending loads and stores
EP17159096.1 2017-03-03
PCT/US2018/019517 WO2018156951A1 (en) 2017-02-24 2018-02-23 Separate tracking of pending loads and stores

Publications (2)

Publication Number Publication Date
KR20190116260A true KR20190116260A (ko) 2019-10-14
KR102515106B1 KR102515106B1 (ko) 2023-03-28

Family

ID=58227989

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197020241A KR102515106B1 (ko) 2017-02-24 2018-02-23 보류 로드 및 스토어의 별도 추적

Country Status (6)

Country Link
US (1) US11074075B2 (ko)
EP (1) EP3367235B1 (ko)
JP (1) JP7092783B2 (ko)
KR (1) KR102515106B1 (ko)
CN (1) CN110249308A (ko)
WO (1) WO2018156951A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11327759B2 (en) * 2018-09-25 2022-05-10 Marvell Asia Pte, Ltd. Managing low-level instructions and core interactions in multi-core processors

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010522920A (ja) * 2007-03-26 2010-07-08 イマジネイション テクノロジーズ リミテッド パイプラインプロセッサにおける長い待ち時間命令の処理
US20150220341A1 (en) * 2014-02-03 2015-08-06 Nvidia Corporation System, method, and computer program product for implementing software-based scoreboarding

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6073159A (en) 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5961630A (en) * 1997-12-30 1999-10-05 Intel Corporation Method and apparatus for handling dynamic structural hazards and exceptions by using post-ready latency
US6473832B1 (en) 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Load/store unit having pre-cache and post-cache queues for low latency load memory operations
US6481251B1 (en) 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6978360B2 (en) * 2001-05-11 2005-12-20 International Business Machines Corporation Scalable processor
US7409500B2 (en) * 2004-01-13 2008-08-05 Hewlett-Packard Development Company, L.P. Systems and methods for employing speculative fills
US8291431B2 (en) 2006-08-29 2012-10-16 Qualcomm Incorporated Dependent instruction thread scheduling
US7877559B2 (en) 2007-11-26 2011-01-25 Globalfoundries Inc. Mechanism to accelerate removal of store operations from a queue
US7941584B2 (en) * 2009-03-26 2011-05-10 Arm Limited Data processing apparatus and method for performing hazard detection
US9280343B2 (en) * 2009-08-10 2016-03-08 Oracle America, Inc. Store queue with token to facilitate efficient thread synchronization
US8127057B2 (en) 2009-08-13 2012-02-28 Advanced Micro Devices, Inc. Multi-level buffering of transactional data
US8966457B2 (en) * 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
US9229896B2 (en) * 2012-12-21 2016-01-05 Apple Inc. Systems and methods for maintaining an order of read and write transactions in a computing system
US9535695B2 (en) 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US9569362B2 (en) * 2014-11-13 2017-02-14 Cavium, Inc. Programmable ordering and prefetch

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010522920A (ja) * 2007-03-26 2010-07-08 イマジネイション テクノロジーズ リミテッド パイプラインプロセッサにおける長い待ち時間命令の処理
US20150220341A1 (en) * 2014-02-03 2015-08-06 Nvidia Corporation System, method, and computer program product for implementing software-based scoreboarding

Also Published As

Publication number Publication date
JP2020523652A (ja) 2020-08-06
KR102515106B1 (ko) 2023-03-28
JP7092783B2 (ja) 2022-06-28
CN110249308A (zh) 2019-09-17
US11074075B2 (en) 2021-07-27
WO2018156951A1 (en) 2018-08-30
US20180246724A1 (en) 2018-08-30
EP3367235A1 (en) 2018-08-29
EP3367235B1 (en) 2019-06-26

Similar Documents

Publication Publication Date Title
US11544106B2 (en) Continuation analysis tasks for GPU task scheduling
US9990319B2 (en) Placement of input / output adapter cards in a server
US20130117541A1 (en) Speculative execution and rollback
KR102495792B1 (ko) 가변 파면 크기
US20140375658A1 (en) Processor Core to Graphics Processor Task Scheduling and Execution
US10067710B2 (en) Detecting buffer overflows in general-purpose GPU applications
US20120221837A1 (en) Running multiply-accumulate instructions for processing vectors
US8578387B1 (en) Dynamic load balancing of instructions for execution by heterogeneous processing engines
WO2023173642A1 (zh) 指令调度的方法、处理电路和电子设备
KR102515106B1 (ko) 보류 로드 및 스토어의 별도 추적
US20180239635A1 (en) Suspend and restore processor operations
US8683178B2 (en) Sharing a fault-status register when processing vector instructions
CN114218152B (zh) 流处理方法、处理电路和电子设备
US10180839B2 (en) Apparatus for information processing with loop cache and associated methods
KR102199342B1 (ko) 스토어 리플레이 정책
KR102644951B1 (ko) 산술 논리 장치 레지스터 시퀀싱
US10180789B2 (en) Software control of state sets

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant