KR20180107091A - 다중 스레드 액세스를 위한 소프트웨어로 한정된 fifo 버퍼 - Google Patents

다중 스레드 액세스를 위한 소프트웨어로 한정된 fifo 버퍼 Download PDF

Info

Publication number
KR20180107091A
KR20180107091A KR1020187018862A KR20187018862A KR20180107091A KR 20180107091 A KR20180107091 A KR 20180107091A KR 1020187018862 A KR1020187018862 A KR 1020187018862A KR 20187018862 A KR20187018862 A KR 20187018862A KR 20180107091 A KR20180107091 A KR 20180107091A
Authority
KR
South Korea
Prior art keywords
write
requests
request
buffer
buffer controller
Prior art date
Application number
KR1020187018862A
Other languages
English (en)
Other versions
KR102683211B1 (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 KR20180107091A publication Critical patent/KR20180107091A/ko
Application granted granted Critical
Publication of KR102683211B1 publication Critical patent/KR102683211B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Systems (AREA)
  • Memory System (AREA)

Abstract

컴퓨터 시스템은 하드웨어 버퍼 제어기를 포함한다. 버퍼에 대한 메모리 액세스 요청은 상기 버퍼 내 어드레스를 포함하지 않고, 상기 버퍼에 액세스하는 스레드는 상기 버퍼 내의 위치에 대한 임의의 포인터에 액세스하거나 임의의 포인터를 직접 업데이트하지 않는다. 상기 메모리 액세스 요청은 상기 하드웨어 버퍼 제어기로 어드레싱되고, 상기 하드웨어 버퍼 제어기는 현재 상태의 어드레스를 결정하고 상기 어드레스에 메모리 액세스 명령을 발행한다. 상기 하드웨어 버퍼 제어기는 상기 메모리 액세스 요청에 응답하여 그 상태를 업데이트한다. 상기 하드웨어 버퍼 제어기는 그 상태를 평가하고 오버플로우 또는 언더플로우 조건 또는 거의 오버플로우 또는 거의 언더플로우 조건에 응답하여 스레드 스케줄러에 이벤트를 출력한다. 상기 스레드 스케줄러는 스레드가 상기 하드웨어 버퍼 제어기에 메모리 액세스 요청을 발행하는 것을 차단할 수 있다. 구현되는 버퍼는 FIFO 또는 다른 유형의 버퍼일 수 있다.

Description

다중 스레드 액세스를 위한 소프트웨어로 한정된 FIFO 버퍼
본 발명은 FIFO 버퍼를 구현하기 위한 시스템 및 방법에 관한 것이다.
종래의 컴퓨터 시스템에서, 후입선출(FIFO: first-in-first-out) 버퍼는 다수의 스레드(thread)에 의해 액세스될 수 있다. 그러나, 종래의 시스템에서, 한번에 단 하나의 스레드만이 FIFO 버퍼에 액세스할 수 있다. 이에 의해, FIFO 버퍼의 데이터 구조가 다른 스레드에 의해 해제되기를 기다리는 동안 스레드를 차단하는 것에 의해 동시에 액세스하는 것을 방지하기 위해 지연 및 처리 오버헤드가 도입된다.
본 명세서에 개시된 시스템 및 방법은 다수의 스레드에 의해 동시에 액세스 가능한 FIFO 버퍼를 구현하는 개선된 접근법을 제공한다.
본 발명의 장점들을 보다 용이하게 이해할 수 있기 위해, 앞서 간단히 설명된 본 발명의 보다 구체적인 설명이 첨부된 도면들에 도시된 특정 실시예들을 참조하여 제공될 것이다. 이들 도면은 단지 본 발명의 예시적인 실시예만을 도시하는 것일 뿐, 본 발명의 범위를 제한하는 것으로 고려되어서는 안 되는 것으로 이해하면서, 본 발명은 첨부된 도면의 사용을 통해 보다 구체적이고 상세히 설명되고 기술될 것이다.
도 1은 본 발명의 실시예에 따른 방법을 구현하기에 적합한 컴퓨터 시스템의 개략적인 블록도이다;
도 2a 내지 도 2b는 본 발명의 일 실시예에 따른 하드웨어 FIFO 버퍼를 구현하기 위한 구성 요소들의 개략적인 블록도이다;
도 3a 및 도 3b는 본 발명의 일 실시예에 따른 하드웨어 FIFO 버퍼에 판독 및 기록을 구현하는 방법의 프로세스 흐름도이다; 및
도 4는 본 발명의 일 실시예에 따른 하드웨어 FIFO 버퍼를 사용하여 버퍼 오버플로우 및 언더플로우를 방지하는 방법의 프로세스 흐름도이다.
본 명세서에서 일반적으로 기술되고 도면에 도시된 바와 같은 본 발명의 구성 요소들은 다양한 상이한 구성으로 배열되고 설계될 수 있다는 것이 쉽게 이해될 수 있을 것이다. 따라서, 도면들에 나타난 바와 같이, 본 발명의 실시예들에 관한 이하의 보다 상세한 설명은 청구된 바와 같은 본 발명의 범위를 제한하려고 의도된 것이 아니라, 단지 본 발명에 따라 현재 고려되는 실시예의 특정 예들을 나타내는 것일 뿐이다. 현재 설명된 실시예는 도면을 참조하여 가장 잘 이해될 것이며, 도면에서 동일한 부분은 도면 전체에 걸쳐 동일한 부호로 표시된다.
본 발명에 따른 실시예는 장치, 방법 또는 컴퓨터 프로그램 제품으로서 구현될 수 있다. 따라서, 본 발명은 완전히 하드웨어적인 실시예, 완전히 소프트웨어적인 실시예(펌웨어, 상주 소프트웨어, 마이크로-코드 등을 포함함), 또는 모두 일반적으로 본 명세서에서 "모듈" 또는 "시스템"으로 지칭될 수 있는 소프트웨어 및 하드웨어 양태들을 결합한 실시예의 형태를 취할 수 있다. 나아가, 본 발명은 컴퓨터 사용 가능한 프로그램 코드를 갖는 임의의 유형적인 표현 매체에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
비-일시적인 매체를 포함하여, 하나 이상의 컴퓨터 사용 가능한 또는 컴퓨터 판독 가능한 매체의 임의의 조합이 사용될 수 있다. 예를 들어, 컴퓨터 판독 가능한 매체는 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM) 디바이스, 판독 전용 메모리(ROM) 디바이스, 소거 가능한 프로그래밍 가능한 판독 전용 메모리(EPROM 또는 플래시 메모리) 디바이스, 휴대용 콤팩트 디스크 판독 전용 메모리(CDROM), 광학 저장 디바이스, 및 자기 저장 디바이스 중 하나 이상을 포함할 수 있다. 선택된 실시예에서, 컴퓨터 판독 가능한 매체는 명령 실행 시스템, 장치 또는 디바이스에 의해 사용하기 위해 또는 이와 관련하여 사용하기 위해 프로그램을 포함하거나, 저장하거나, 통신하거나, 전파하거나 또는 전송할 수 있는 임의의 비-일시적인 매체를 포함할 수 있다.
본 발명의 동작을 수행하기 위한 컴퓨터 프로그램 코드는 자바(Java), 스몰토크(Smalltalk), C++ 등과 같은 객체-지향 프로그래밍 언어, 및 "C" 프로그래밍 언어 또는 이와 유사한 프로그래밍 언어와 같은 종래의 절차형 프로그래밍 언어를 포함하는 하나 이상의 프로그래밍 언어의 임의의 조합으로 기록될 수 있다. 프로그램 코드는 완전히 컴퓨터 시스템 상에서 독립형 소프트웨어 패키지로서 실행되거나, 독립형 하드웨어 유닛 상에서 실행되거나, 부분적으로 컴퓨터로부터 어느 정도 떨어져 있는 원격 컴퓨터 상에서 실행되거나, 또는 완전히 원격 컴퓨터 또는 서버 상에서 실행될 수 있다. 완전히 원격 컴퓨터 또는 서버 상세서 실행되는 시나리오에서, 원격 컴퓨터는 근거리 네트워크(LAN) 또는 광역 네트워크(WAN)를 포함하는 임의의 유형의 네트워크를 통해 컴퓨터에 연결될 수 있거나, 또는 (예를 들어, 인터넷 서비스 제공자를 사용하여 인터넷을 통해) 외부 컴퓨터에 연결될 수 있다.
본 발명은 본 발명의 실시예에 따른 방법, 장치(시스템) 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 아래에서 설명된다. 흐름도 및/또는 블록도의 각 블록, 및 흐름도 및/또는 블록도의 블록들의 조합은 컴퓨터 프로그램 명령 또는 코드에 의해 구현될 수 있는 것으로 이해된다. 이들 컴퓨터 프로그램 명령은 일반 목적 컴퓨터, 특수 목적 컴퓨터 또는 다른 프로그램 가능한 데이터 처리 장치의 프로세서에 제공되어, 이 명령이 컴퓨터 또는 다른 프로그램 가능한 데이터 처리 장치의 프로세서를 통해 실행될 때 흐름도 및/또는 블록도의 블록 또는 블록들에 지정된 기능들/행위들을 구현하는 수단을 생성하는 기계를 형성하게 할 수 있다.
이들 컴퓨터 프로그램 명령은 또한 컴퓨터 또는 다른 프로그램 가능한 데이터 처리 장치가 특정 방식으로 기능하도록 명령할 수 있는 것으로 비-일시적인 컴퓨터 판독 가능한 매체에 저장되어, 컴퓨터 판독 가능한 매체에 저장된 명령이 흐름도 및/또는 블록도의 블록 또는 블록들에 지정된 기능들/행위들을 구현하는 명령 수단을 포함하는 제조 물품을 형성하게 할 수 있다.
이들 컴퓨터 프로그램 명령은 또한 컴퓨터 또는 다른 프로그램 가능한 데이터 처리 장치 상에 로딩되어, 일련의 동작 단계들을 컴퓨터 또는 다른 프로그램 가능한 장치 상에서 수행하여 컴퓨터로 구현되는 프로세스를 생성함으로써, 컴퓨터 또는 다른 프로그램 가능한 장치 상에서 실행되는 명령이 흐름도 및/또는 블록도의 블록 또는 블록들에서 지정된 기능들/행위들을 구현하는 프로세스들을 제공하게 할 수 있다.
도 1은 예시적인 컴퓨팅 디바이스(100)를 나타내는 블록도이다. 컴퓨팅 디바이스(100)는 본 명세서에서 논의된 것과 같은 다양한 절차를 수행하는 데 사용될 수 있다. 컴퓨팅 디바이스(100)는 서버, 클라이언트, 또는 임의의 다른 컴퓨팅 엔티티로서 기능할 수 있다. 컴퓨팅 디바이스는 본 명세서에서 논의된 바와 같이 다양한 모니터링 기능을 수행할 수 있으며, 본 명세서에 설명된 애플리케이션 프로그램과 같은 하나 이상의 애플리케이션 프로그램을 실행할 수 있다. 컴퓨팅 디바이스(100)는 데스크탑 컴퓨터, 노트북 컴퓨터, 서버 컴퓨터, 핸드헬드 컴퓨터, 태블릿 컴퓨터 등과 같은 다양한 컴퓨팅 디바이스 중 임의의 것일 수 있다.
컴퓨팅 디바이스(100)는 하나 이상의 프로세서(들)(102), 하나 이상의 메모리 디바이스(들)(104), 하나 이상의 인터페이스(들)(106), 하나 이상의 대용량 저장 디바이스(들)(108), 하나 이상의 입력/출력(I/O) 디바이스(들)(110) 및 디스플레이 디바이스(130)를 포함하고, 이들은 모두 버스(112)에 연결된다. 프로세서(들)(102)는 메모리 디바이스(들)(104) 및/또는 대용량 저장 디바이스(들)(108)에 저장된 명령을 실행하는 하나 이상의 프로세서 또는 제어기를 포함한다. 프로세서(들)(102)는 또한 캐시 메모리와 같은 다양한 유형의 컴퓨터 판독 가능한 매체를 포함할 수 있다.
메모리 디바이스(들)(104)는 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM)(114)) 및/또는 비-휘발성 메모리(예를 들어, 판독 전용 메모리(ROM)(116))와 같은 다양한 컴퓨터 판독 가능한 매체를 포함한다. 메모리 디바이스(들)(104)는 또한 플래시 메모리와 같은 재기록 가능한 ROM을 더 포함할 수 있다.
대용량 저장 디바이스(들)(108)는 자기 테이프, 자기 디스크, 광학 디스크, 솔리드-스테이트 메모리(예를 들어, 플래시 메모리) 등과 같은 다양한 컴퓨터 판독 가능한 매체를 포함한다. 도 1에 도시된 바와 같이, 특정 대용량 저장 디바이스는 하드 디스크 드라이브(124)이다. 다양한 드라이브가 다양한 컴퓨터 판독 가능한 매체로부터 판독하거나 및/또는 이 매체에 기록할 수 있기 위해 대용량 저장 디바이스(들)(108)에 더 포함될 수 있다. 대용량 저장 디바이스(들)(108)는 이동식 매체(126) 및/또는 고정식 매체를 포함한다.
I/O 디바이스(들)(110)는 데이터 및/또는 다른 정보를 컴퓨팅 디바이스(100)에 입력하거나 이 컴퓨팅 디바이스로부터 검색할 수 있는 다양한 디바이스를 포함한다. 예시적인 I/O 디바이스(들)(110)는 커서 제어 디바이스, 키보드, 키패드, 마이크로폰, 모니터, 또는 다른 디스플레이 디바이스, 스피커, 프린터, 네트워크 인터페이스 카드, 모뎀, 렌즈, CCD 또는 다른 이미지 캡처 디바이스 등을 포함한다.
디스플레이 디바이스(130)는 컴퓨팅 디바이스(100)의 하나 이상의 사용자에게 정보를 디스플레이할 수 있는 임의의 유형의 디바이스를 포함한다. 디스플레이 디바이스(130)의 예로는 모니터, 디스플레이 단말, 비디오 프로젝션 디바이스 등을 포함한다.
그래픽 처리 유닛(GPU)(132)은 프로세서(들)(102) 및/또는 디스플레이 디바이스(130)에 연결될 수 있다. GPU는 컴퓨터로 생성된 이미지를 렌더링하고 다른 그래픽 처리를 수행하도록 동작 가능할 수 있다. GPU는 프로세서(들)(102)와 같은 일반 목적 프로세서의 기능의 일부 또는 전부를 포함할 수 있다. GPU는 또한 그래픽 처리에 특정된 추가적인 기능을 포함할 수 있다. GPU는 좌표 변환, 음영 처리, 텍스처 처리, 래스터 처리, 및 컴퓨터로 생성된 이미지를 렌더링하는데 유용한 다른 기능과 관련된 하드-코딩식 및/또는 하드-와이어식 그래픽 기능을 포함할 수 있다.
인터페이스(들)(106)는 컴퓨팅 디바이스(100)가 다른 시스템, 디바이스 또는 컴퓨팅 환경과 상호 작용할 수 있게 하는 다양한 인터페이스를 포함한다. 예시적인 인터페이스(들)(106)는 근거리 네트워크(LAN), 광역 네트워크(WAN), 무선 네트워크 및 인터넷에 대한 인터페이스와 같은 임의의 수의 상이한 네트워크 인터페이스(120)를 포함한다. 다른 인터페이스(들)는 사용자 인터페이스(118) 및 주변 디바이스 인터페이스(122)를 포함한다. 인터페이스(들)(106)는 또한 하나 이상의 사용자 인터페이스 요소(118)를 더 포함할 수 있다. 인터페이스(들)(106)는 또한 프린터, 포인팅 디바이스(마우스, 트랙 패드 등), 키보드 등을 위한 인터페이스와 같은 하나 이상의 주변 인터페이스를 더 포함할 수 있다.
버스(112)는 프로세서(들)(102), 메모리 디바이스(들)(104), 인터페이스(들)(106), 대용량 저장 디바이스(들)(108) 및 I/O 디바이스(들)(110)가 서로 통신하게 할 수 있을 뿐만 아니라 버스(112)에 연결된 다른 디바이스들 또는 구성 요소들과 통신하게 할 수 있다. 버스(112)는 시스템 버스, PCI 버스, IEEE 1394 버스, USB 버스 등과 같은 여러 유형의 버스 구조 중 하나 이상을 나타낸다.
예시를 위해, 프로그램들 및 다른 실행 가능한 프로그램 구성 요소들은 본 명세서에서 이산 블록들로서 도시되어 있으나, 이러한 프로그램 및 구성 요소는 컴퓨팅 디바이스(100)의 상이한 저장 구성 요소들에 다양한 시간에 상주할 수 있고 프로세서(들)(102)에 의해 실행되는 것으로 이해된다. 대안적으로, 본 명세서에 설명된 시스템 및 절차는 하드웨어로 구현되거나, 또는 하드웨어, 소프트웨어 및/또는 펌웨어의 조합으로 구현될 수 있다. 예를 들어, 하나 이상의 주문형 집적 회로(ASIC)가 본 명세서에 설명된 시스템들 및 절차들 중 하나 이상을 수행하도록 프로그래밍될 수 있다.
도 2a를 참조하면, 처리 디바이스(102)는 하나 이상의 스레드(200)를 실행할 수 있다. 전술된 바와 같이, 컴퓨터 시스템(100)은 복수의 처리 디바이스(102)를 포함할 수 있다. 처리 디바이스(102)들 중 임의의 하나의 처리 디바이스 또는 처리 디바이스(102)의 조합은 이하에서 "처리 디바이스"(102)에 속하는 기능을 수행할 수 있다. 스레드들은 처리 디바이스(102)에 의해 실행되는 애플리케이션에 의해 인스턴스화될 수 있다. 프로세서는 처리 자원을 분배하고 하나의 스레드(200)로부터 다른 스레드로 종래의 방식으로 실행을 스위칭할 수 있다. 스레드(200)들은, 메모리 디바이스(104)들, 및 가능하게는 메모리 디바이스(104)들과 처리 디바이스(102) 사이에 개재된 메모리 제어기를 포함하는 메모리 서브시스템(204)에 메모리 액세스 요청(202)(예를 들어, 판독 요청 및 기록 요청)들을 발행할 수 있다. 메모리 액세스 요청(202)들은 다음의 필드 <연산 코드, 소스 유형, 소스 어드레스, 목적지 유형, 목적지 어드레스>의 일부 또는 전부를 포함하는 명령과 같이 이 기술 분야에 알려진 임의의 종래의 메모리 액세스 요청일 수 있고, 여기서 연산 코드는 수행될 연산을 나타내는 코드이고, 소스 유형 및 목적지 유형은 액세스할 메모리 디바이스(104)를 나타내며, 소스 어드레스는 데이터가 검색될 메모리 디바이스(104) 내의 위치이고, 목적지 어드레스는 데이터가 기록될 메모리 디바이스(104) 내의 위치이다. 또한, 메모리 요청(202)의 처리 방식은 종래의 것일 수 있다. 연산 코드는 판독 동작을 나타낼 수 있고, 그리하여 소스 어드레스로부터 데이터를 검색하고, 요청을 발행한 프로세서 스레드(200)로 반환(return)하도록 실행될 수 있다. 또한, 연산 코드는 목적지 어드레스에 데이터를 기록하기 위해 실행되는 기록 동작을 나타낼 수 있다.
프로세서 스레드(200)는 하드웨어 버퍼 제어기(208)에 메모리 액세스 요청(206)을 발행할 수 있다. 하드웨어 버퍼 제어기(208)는 하드웨어 버퍼 제어기(208)에 속하는 기능을 수행하도록 구성된 회로를 포함하는 하드웨어 디바이스이다. 하드웨어 버퍼 제어기(208)는 처리 디바이스(102)와 동일한 다이(die) 상에 또는 상이한 다이 상에 위치되거나 또는 메모리 서브시스템(204)의 하나 이상의 구성 요소와 동일한 다이 상에 위치될 수 있다. 메모리 액세스 요청(206)은 종래의 메모리 액세스 요청(202)과 동일하거나 상이한 포맷을 가질 수 있다. 그러나, 메모리 액세스 요청(206)은 메모리 디바이스(104) 내 임의의 어드레스 또는 어드레스 범위를 직접 참조하지 않는다. 대신에, 메모리 액세스 요청(202)은 특정 하드웨어 버퍼 제어기(208)를 참조한다. 하드웨어 버퍼 제어기(208)는 하나 이상의 버퍼를 한정하도록 초기화될 수 있고, 각각의 버퍼를 한정하는 것은 버퍼에 할당된 메모리 디바이스(104)들 중 하나의 메모리 디바이스 내 어드레스를 할당하는 것을 포함한다. 이 할당은 각각의 버퍼에 대해 시작 및 종료 어드레스 또는 시작 어드레스 및 버퍼 크기의 형태로 레코딩될 수 있다. 각각의 하드웨어 버퍼 제어기(208)를 초기화하는 것은 초기 판독 위치를 가리키도록 판독 포인터(210)를 초기화하는 것, 및 초기 기록 위치를 가리키도록 기록 포인터(212)를 초기화하는 것을 포함할 수 있다. 다수의 버퍼는 하드웨어 버퍼 제어기(208) 내에서 초기화될 수 있고, 또는 다수의 하드웨어 버퍼 제어기(208)는 동일한 방식으로 초기화될 수 있다.
버퍼에 대해 하드웨어 버퍼 제어기(208)를 초기화하는 것은 처리 디바이스(102)에 의해 호출(invoked)될 수 있고, 이 처리 디바이스는 또한 이 기술 분야에 알려진 임의의 방법에 따라 메모리 디바이스(104) 내 버퍼에 대해 메모리를 할당할 수 있다. 버퍼를 초기화하는 것은 하나 이상의 처리 스레드(200)를 인스턴스화한 애플리케이션에 의해 호출될 수 있고, 초기화된 버퍼를 나타내는 참조는 버퍼를 판독하고 버퍼에 기록하기 위해 스레드들에 의해 사용하기 위해 애플리케이션으로 반환될 수 있다.
도시된 실시예에서, 하드웨어 버퍼 제어기(208)는 FIFO 버퍼를 구현한다. 그러나, 다른 유형의 버퍼(예를 들어, 후입선출(last-in-first-out))들이 또한 구현될 수 있다.
하드웨어 버퍼 제어기(208)는 합산기(214)를 포함할 수 있다. 이 합산기(214)는 메모리 액세스 요청(206)을 수신하고, 각각의 버퍼에 대한 요청(206)의 수를 결정한다. 예를 들어, 다수의 요청(206)이 프로세서(102), 버스(112) 또는 메모리 서브시스템(204)의 하나의 클록 사이클에서 수신될 수 있다. 특히, 동일한 버퍼를 참조하는 다수의 요청이 수신될 수 있다. 도시된 실시예에서, 합산기(214)는 각각의 클록 사이클에서 각각의 버퍼에 대해 수신된 판독 요청(206)의 수, 및 각각의 클록 사이클에서 각각의 버퍼에 대해 수신된 기록 요청(206)의 수를 합산한다. 각각의 요청(206)은, 합산기(214)가 동일한 버퍼 식별자를 갖는 모든 판독 요청(206)을 합산하고 동일한 버퍼 식별자를 갖는 모든 기록 요청(206)을 합산할 수 있도록 버퍼 식별자를 포함할 수 있다.
이후 각각의 버퍼에 대한 판독 포인터(210)는 각각의 버퍼를 참조하는 클록 사이클에서 수신된 판독 요청(206)의 수만큼 하드웨어 버퍼 제어기(208)에 의해 증분된다. 마찬가지로, 각각의 버퍼에 대한 기록 포인터(212)는 각각의 버퍼를 참조하는 클록 사이클에서 수신된 기록 요청(206)의 수만큼 하드웨어 버퍼 제어기(208)에 의해 증분된다.
FIFO 어드레스 생성기(216)는 합산기(214)의 출력 포인터 또는 판독 포인터(210)의 변경 중 하나 또는 둘 다를 검출하거나 또는 그렇지 않은 경우 클록 사이클 동안 각각의 버퍼에 대해 수신된 임의의 판독 요청(206) 및 기록 요청을 통지받는다. 이후 FIFO 어드레스 생성기(216)는 메모리 액세스 요청(218)을 메모리 서브시스템(204)에 출력한다. 구체적으로, 클록 사이클 동안 N개의 판독 요청이 수신된 경우, FIFO 어드레스 생성기(216)는 N개의 판독 요청(218) 또는 N개의 어드레스 범위를 포함하는 판독 요청(218)을 출력한다. 마찬가지로, 클록 사이클 동안 N개의 판독 요청이 수신된 경우, FIFO 어드레스 생성기(216)는 N개의 기록 요청(218) 또는 기록될 N개의 값 및 N개의 어드레스 범위를 포함하는 기록 요청(218)을 생성한다.
FIFO 어드레스 생성기(216)는 판독 포인터(210)의 상태에 기초하여 어드레스를 각각의 요청(218)에 포함한다. 예를 들어, 단일 판독 또는 기록 요청에 대해, FIFO 생성기(216)는, C가 버퍼 내에서 그 다음으로 이용 가능한 어드레스를 가리키는지 또는 버퍼 내 이전에 액세스된 어드레스를 가리키는지 여부에 따라 판독 포인터(210) 또는 기록 포인터(212)의 현재 값(C) 또는 값(C+1)을 포함하는 판독 요청 또는 기록 요청을 출력할 수 있다. N개의 판독 요청 또는 기록 요청에 대해, FIFO 생성기(216)는 어드레스(C, C+1, C+2, ..., C+N-1)를 포함하는 N개의 판독 요청 또는 기록 요청 또는 어드레스(C 내지 C+N-1)를 참조하는 단일 판독 요청 또는 단일 기록 요청을 출력한다. 일부 실시예에서, 포인터(210, 212)의 값은 요청(218)에 대한 어드레스를 결정하기 전에 증분된다. 따라서, 요청(218)의 어드레스는 단일 요청(218)에 대해 C+1, C+2, ..., C+N 또는 범위(C+1 내지 C+N)일 수 있다.
전술된 바와 같이, 하드웨어 버퍼 제어기(208)는 다수의 버퍼를 포함할 수 있다. 따라서, MUX(220)는 포인터(210, 212)를 FIFO 어드레스 생성기(216)에 선택적으로 연결할 수 있으며, 이 FIFO 어드레스 생성기(216)는 이전의 문단에서 설명된 방식으로 각각의 버퍼에 대한 요청(218)을 생성한다. 또한, 메모리 액세스 요청(202)이 또한 메모리 서브시스템(204)에 입력되고 있는 한, 요청(202, 218)은 MUX(222)에 입력될 수 있고, 이 MUX는 라운드 로빈(round-robin) 선택 방식 또는 다른 부하-밸런싱 방식에 따라 메모리 서브시스템(204)에 요청(202, 218)을 선택적으로 입력할 수 있다.
도 2b를 참조하면, 하드웨어 버퍼 제어기(208)는 그 상태에 기초하여 이벤트(224)를 더 생성할 수 있다. 이벤트(224)는 처리 디바이스(102)에 의해 실행되는 스레드 스케줄러(226)에 입력될 수 있다. 스레드 스케줄러(226)는 처리 디바이스(102)에서 실행될 프로세서 스레드(200)를 결정하고, 또한 스레드를 차단하고, 다른 스레드로 분기하고, 이 기술 분야에 알려진 다른 스레드 관리 기능을 수행한다. 각각의 이벤트(224)는 이벤트가 생성된 버퍼를 나타낼 수 있다.
일부 실시예에서, 스레드 스케줄러(226)는 이벤트(224)를 수신하고 이에 대한 스레드 관리 작업을 수행한다. 예를 들어, 이벤트(224)는 버퍼가 가득 차 있거나(full) 또는 거의 가득 차 있는 것을 나타낼 수 있다. 따라서, 스레드(200)는 버퍼에 기록하는 것이 차단될 수 있다. 예를 들어, 애플리케이션은 거의 가득 차 있음 이벤트에 응답하여 차단할 하나 이상의 스레드(200)를 스레드 스케줄러에 등록할 수 있다. 마찬가지로, 스케줄러(226)는 버퍼가 비어 있거나(empty) 또는 거의 비어 있는 것을 나타내는 이벤트(224)에 응답하여 특정 스레드가 버퍼로부터 판독하는 것을 차단하도록 프로그래밍될 수 있다.
도시된 실시예에서, 이벤트는 판독 카운터(226) 및 기록 카운터(228)에 기초하여 생성된다. 각각의 버퍼에 대해, 판독 카운터(226)의 값은 감산기(230)에 의해 기록 카운터의 값으로부터 감산된다. 이후 하나 이상의 임계 값(234)뿐만 아니라 카운터(226, 228)의 값들 사이의 차이가 비교기(232)에 입력된다.
제로 차이는 버퍼가 비어 있다는 것을 나타낸다 - 기록만큼 많은 판독이 있다는 것을 나타낸다. 일부 실시예에서, 차이가 0인 경우, 버퍼를 식별하는 "버퍼 비어 있음" 이벤트(224)가 생성될 수 있다. 임계값(234)은 낮은 임계값을 포함하고, 만약 참조값이 낮은 임계값보다 더 작으면, 버퍼를 참조하는 "거의 비어 있음" 이벤트(224)가 생성될 수 있게 할 수 있다.
버퍼의 크기와 동일한 차이는, 기록 동작이 버퍼 내 총 엔트리 수만큼 판독 동작보다 더 크기 때문에 버퍼가 가득 차 있는 것을 나타낸다. 일부 실시예에서, 차이가 버퍼의 크기와 동일한 경우, 버퍼를 참조하는 "버퍼 가득 차 있음" 이벤트가 생성될 수 있다. 임계값(234)은 예를 들어 버퍼 크기의 80% 내지 90%와 같은 버퍼 크기보다 더 작은 높은 임계값을 포함할 수 있다. 이 차이가 높은 임계값보다 더 크다면, 버퍼를 참조하는 "거의 가득 차 있음" 이벤트(224)가 생성될 수 있다.
일부 실시예에서, 카운터(226, 228)의 오버플로우를 피하기 위해 카운터(226, 228)들 중 더 작은 카운터의 값이, 예를 들어, 주기적으로 또는 카운터(226, 228)들 중 하나의 카운터가 카운터(226, 228)에 의해 표현 가능한 최대 값에 접근할 때, 카운터(226, 228)로부터 감산될 수 있다.
일부 실시예에서, 비교기(232)는 비어 있음, 거의 비어 있음, 가득 차 있음, 또는 거의 가득 차 있음 상태의 존재가 중지할 때 이벤트를 생성할 수 있다. 예를 들어, 버퍼가 이전에 가득 차 있거나 또는 거의 가득 차 있는 것으로 발견되었고 이후에 가득 차 있거나 거의 가득 차 있는 것이 아닌 것으로 발견되면 "버퍼 준비" 또는 "버퍼 가득 차 있음 클리어(cleared)" 이벤트가 비교기(232)에 의해 생성될 수 있다. 마찬가지로, 버퍼가 이전에 비어 있거나 거의 비어 있는 것으로 발견되었고 이후 비어 있거나 거의 비어 있는 것이 아닌 것으로 발견되면, "버퍼 준비" 또는 "버퍼 비어 있음 클리어" 이벤트가 비교기(232)에 의해 생성될 수 있다.
전술된 바와 같이, 하드웨어 버퍼 제어기(208)는 다수의 버퍼를 구현할 수 있다. 따라서, 이러한 실시예에서, 멀티플렉서(236, 238)는 카운터(226, 228)들 간의 차이를 평가하고 필요에 따라 전술된 접근법에 따라 각각의 버퍼에 대해 이벤트를 생성하기 위해 각각의 버퍼에 대해 카운터(226, 228)를 감산기(230) 및 비교기(232)에 선택적으로 연결할 수 있다.
이벤트(224)를 수신하면, 스레드 스케줄러(224)는 프로세서 스레드(200)에 대한 하나 이상의 동작을 호출할 수 있다. 예를 들어, 애플리케이션은 "버퍼 비어 있음" 또는 "거의 비어 있음" 이벤트를 수신할 때 스레드(200)를 차단하도록 스케줄러(226)에게 명령할 수 있다. 따라서, 이러한 이벤트를 수신하면, 이 스레드(200)는 실행되는 것이 차단될 것이다. 이 스레드는, 예를 들어, "버퍼 준비" 또는 "버퍼 비어 있음 클리어" 이벤트를 수신할 때 "버퍼 비어 있음" 또는 "버퍼 비어 있음" 이벤트가 클리어될 때까지 스레드 스케줄러(224)에 의해 차단될 수 있다.
유사하게, 애플리케이션은 "버퍼 가득 차 있음" 또는 "거의 가득 차 있음" 이벤트를 수신할 때 스레드(200)를 차단하도록 스케줄러(226)에 명령할 수 있다. 따라서, 이러한 이벤트를 수신할 때 이 스레드(200)는 실행되는 것이 차단될 것이다. 이 스레드는, 예를 들어, "버퍼 준비" 또는 "버퍼 비어 있음 클리어" 이벤트를 수신할 때 "버퍼 가득 차 있음" 또는 "거의 가득 차 있음" 이벤트가 클리어될 때까지 스레드 스케줄러(224)에 의해 차단될 수 있다.
그리하여 애플리케이션은 버퍼에 대한 기록 요청을 수행하도록 프로그래밍된 일부 스레드(200)를 가질 수 있고, 버퍼를 참조하는 "버퍼 가득 차 있음" 또는 "거의 가득 차 있음" 이벤트를 수신할 때 이러한 스레드(200)를 차단하도록 스레드 스케줄러(226)에 명령할 수 있다. 애플리케이션은 버퍼에 대한 판독 요청을 수행하도록 프로그래밍된 하나 이상의 다른 스레드(200)를 가질 수 있고, 이 버퍼에 대해 "버퍼 비어 있음" 또는 "거의 비어 있음" 이벤트를 수신할 때 이러한 스레드(200)를 차단하도록 스레드 스케줄러(226)에 명령할 수 있다.
스레드(200)는 둘 이상의 버퍼에 대한 요청을 발행할 수 있고, 그리하여 애플리케이션은 하드웨어 버퍼 제어기(208)에 의해 구현된 하나 이상의 버퍼를 참조하는 이벤트에 기초하여 스레드를 차단하도록 스레드 스케줄러(226)에 명령할 수 있다.
도 3a를 참조하면, 도시된 방법(300)은 버퍼를 참조하는 기록 요청을 수신한 것에 응답하여 하드웨어 버퍼 제어기(208)에 의해 실행될 수 있으며, 여기서 이 기록 요청은 버퍼의 식별자를 포함하지만 버퍼의 엔트리가 실제로 저장된 메모리 디바이스(104)의 어드레스를 포함하지는 않는다.
방법(300)은 버퍼에 대한 하나 이상의 기록 요청을 수신하는 단계(302), 및 시간 기간 동안 버퍼에 대해 수신된 기록 요청의 수를 결정하기 위해 기록 요청을 합산하는 단계(304)를 포함한다. 예를 들어, 처리 디바이스(102), 버스(112), 메모리 디바이스(104) 또는 하드웨어 버퍼(208)의 1 클록 사이클 동안 수신된 기록 요청의 수는 단계(304)에서 카운트될 수 있다. 전술된 바와 같이 다수의 버퍼는 클록 사이클 동안 기록 요청이 수신된 각각의 버퍼에 대해 방법(300)의 단계들이 수행되도록 하드웨어 버퍼 제어기(208)에 의해 구현될 수 있다. 도 3a 및 도 3b의 목적을 위해, "버퍼"는 도시된 방법이 수행되고 있는 버퍼를 나타낸다.
방법(300)은 기록 포인터(212)와 기록 카운터(228) 중 하나 또는 둘 모두를 업데이트하는 단계(306)를 포함할 수 있다. 일부 실시예에서, 이들 값 중 하나만이 버퍼의 상태를 나타내기 위해 사용된다. 예를 들어, 하드웨어 버퍼 제어기(208)는 카운터가 아니라 버퍼의 상태를 결정하기 위해 기록 포인터(212)와 판독 포인터(210)만을 저장할 수 있다. 특히 카운터(226, 228)들만이 사용되며, 이들 카운터 및 버퍼의 시작 어드레스로부터 어드레스가 결정된다. 특히, 포인터(212)와 카운터(228)를 업데이트하는 것은 클록 사이클 동안 수신된 기록 요청의 수만큼 이들 각각을 증분시키는 것을 포함할 수 있다.
방법(300)은 기록 포인터(212)의 상태 및 수신된(302) 기록 요청의 수에 기초하여 어드레스를 생성하는 단계(308)를 더 포함한다. 전술된 바와 같이, 기록 요청을 수신하는 단계(302) 및 기록 포인터(212)를 업데이트하는 단계(306) 전에 포인터의 현재 값이 C이고 N개의 기록 요청이 수신된 경우, 생성된 어드레스는 C, C+1, ..., C+N-1일 수 있고, 여기서 C는 기록할 그 다음 어드레스를 가리킨다. C가 가장 최근에 기록된 어드레스를 가리키는 경우, 생성된 어드레스는 C+1, C+2, ..., C+N이 된다. 어드레스들은 범위의 형태, 예를 들어, 데이터 쌍 <C, N-1> 또는 <C+1, N>의 형태로 생성될 수 있고, 여기서 하나의 값은 시작 어드레스이고 다른 값은 시작 어드레스로부터의 오프셋이다.
방법(300)은 단계(308)에서 생성된 어드레스를 포함하는 하나 이상의 기록 커맨드를 메모리 서브시스템(204)에 출력하는 단계(310)를 더 포함할 수 있으며, 이 기록 커맨드는 메모리 디바이스(104)들 중 하나의 메모리 디바이스에서 하나 이상의 기록 커맨드 내 어드레스에 기록 요청한 것으로부터 데이터의 기록을 호출하는데 효과적이다. 전술된 바와 같이, N개의 기록 커맨드는 수신된(302) 각각의 기록 요청에 대해 출력될 수 있고(310), 각각의 기록 커맨드는 단계(308)에서 생성된 어드레스들 중 하나의 어드레스를 포함한다. 대안적으로, 단계(308)에서 생성된 모든 N개의 어드레스 또는 모든 N개의 어드레스에 걸쳐 있는 어드레스의 범위(예를 들어, 시작 어드레스 및 오프셋)를 지정하는 단일 기록 커맨드가 출력될 수 있다(310). 이후, 기록 커맨드들은 이 기록 커맨드들이 어드레싱된 메모리 디바이스(104)에 의해 실행되고 나서 방법은 종료된다.
도 3b를 참조하면, 도시된 방법(312)은 버퍼를 참조하는 판독 요청을 수신한 것에 응답하여 하드웨어 버퍼 제어기(208)에 의해 실행될 수 있으며, 여기서 이 판독 요청은 버퍼의 식별자를 포함하지만 버퍼의 엔트리가 실제로 저장된 메모리 디바이스(104)의 어드레스를 포함하지는 않는다.
방법(312)은 버퍼에 대한 하나 이상의 판독 요청을 수신하는 단계(314), 및 시간 기간 동안 버퍼에 대해 수신된 판독 요청의 수를 결정하기 위해 판독 요청을 합산하는 단계(316)를 포함한다. 예를 들어, 처리 디바이스(102), 버스(112), 메모리 디바이스(104) 또는 하드웨어 버퍼(208)의 하나의 클록 사이클 동안 수신된 판독 요청의 수는 단계(316)에서 카운트될 수 있다. 전술된 바와 같이 다수의 버퍼는 클록 사이클 동안 기록 요청이 수신된 각각의 버퍼에 대해 방법(312)의 단계들이 수행되도록 하드웨어 버퍼 제어기(208)에 의해 구현될 수 있다.
방법(312)은 판독 포인터(210)와 판독 카운터(226) 중 하나 또는 둘 모두를 업데이트하는 단계(318)를 포함할 수 있다. 일부 실시예에서, 이들 값 중 하나만이 버퍼의 상태를 나타내기 위해 사용된다. 예를 들어, 하드웨어 버퍼 제어기(208)는 카운터가 아니라 버퍼의 상태를 결정하기 위해 기록 포인터(212)와 판독 포인터(210)만을 저장할 수 있다. 특히 카운터(226, 228)들만이 사용되며, 이들 카운터 및 버퍼의 시작 어드레스로부터 어드레스가 결정된다. 포인터(210)와 카운터(226)를 업데이트(318)하는 것은 클록 사이클 동안 수신된 기록 요청의 수만큼 이들 각각을 증분시키는 것을 포함할 수 있다.
방법(312)은 판독 포인터(210)의 상태 및 수신된 판독 요청(314)의 수에 기초하여 어드레스를 생성하는 단계(320)를 더 포함한다. 전술된 바와 같이 판독 요청을 수신하는 단계(314) 및 판독 포인터(210)를 업데이트하는 단계(318) 전에 포인터의 현재 값이 C이고 N개의 판독 요청이 수신된 경우, 생성된 어드레스는 C, C+1, ..., C+N-1일 수 있으며, 여기서 C는 기록할 그 다음 어드레스를 가리킨다. C가 가장 최근에 판독된 어드레스를 가리키는 경우, 생성된 어드레스는 C+1, C+2, ...C+N이 된다. 어드레스들은 범위의 형태, 예를 들어, 데이터 쌍 <C, N-1> 또는 <C+1, N>의 형태로 생성될 수 있고, 여기서 하나의 값은 시작 어드레스이고 다른 값은 시작 어드레스로부터의 오프셋이다.
방법(312)은 단계(308)에서 생성된 어드레스를 포함하는 하나 이상의 판독 커맨드를 메모리 서브시스템(204)에 출력하는 단계(322)를 더 포함할 수 있으며, 이 판독 커맨드들은 메모리 디바이스(104) 중 하나의 메모리 디바이스로부터 하나 이상의 기록 커맨드 내 어드레스에서의 데이터의 검색을 호출하고 이 데이터를 처리 디바이스(102)에 반환하는데 효과적이다. 전술된 바와 같이, N개의 판독 커맨드가 수신된(302) 각각의 판독 요청에 대해 출력될 수 있고(단계 322), 각각의 판독 커맨드는 단계(308)에서 생성된 어드레스들 중 하나의 어드레스를 포함한다. 대안적으로, 단계(308)에서 생성된 모든 N개의 어드레스 또는 모든 N개의 어드레스에 걸친 어드레스의 범위(예를 들어, 시작 어드레스 및 오프셋)를 지정하는 단일 판독 커맨드가 출력될 수 있다(322). 이후 판독 커맨드들은 이 판독 커맨드들이 어드레싱된 메모리 디바이스(104)에 의해 실행되고 나서 방법은 종료된다.
방법(300 및 312)은 실질적으로 동시에 실행될 수 있다. 예를 들어, 하드웨어 버퍼 제어기(208)에 의해 별도의 판독 파이프라인 및 기록 파이프라인이 구현되어서, 메모리 액세스 커맨드들이 판독 요청과 기록 요청 모두에 대해 동시에 생성될 수 있다. 단계(310 및 322)로부터 메모리 액세스 커맨드들은 이 기술 분야에 알려진 임의의 커맨드 실행 방식에 따라 메모리 서브시스템(204)에 의해 버퍼링되고 순차적으로 실행될 수 있다.
도 4를 참조하면, 도시된 방법(400)은 버퍼의 가득 차 있음, 거의 가득 차 있음, 비어 있음, 거의 비어 있음 상태를 검출하기 위해 하드웨어 버퍼 제어기(208)에 의해 실행될 수 있다. 방법(400)은 하드웨어 버퍼 제어기(208)에 의해 제어되는 각각의 버퍼, 이하 "버퍼"에 대해 실행될 수 있다.
방법(400)은 도 3a와 관련하여 전술된 바와 같이 클록 사이클 동안 기록 명령들을 수신하는 단계(302) 및 클록 사이클 동안 수신된 기록 명령들을 합산하는 단계(304)를 포함하거나 이 단계들이 선행할 수 있다. 합산 단계(304)는 방법(300)과 방법(400)에 대해 한번 실행될 수도 있고, 또는 각각의 방법에 대해 개별적으로 수행될 수 있다.
또한 방법(400)은 도 3b와 관련하여 전술된 바와 같이 클록 사이클 동안 기록 명령들을 수신하는 단계(314) 및 클록 사이클 동안 수신된 기록 명령들을 합산하는 단계(316)를 포함하거나 이 단계들이 선행할 수 있다. 합산하는 단계(316)는 방법(312) 및 방법(400)에 대해 한번 실행될 수 있고 또는 각각의 방법에 대해 개별적으로 수행될 수 있다.
방법(400)은 기록 카운터(238)를 업데이트하는 단계(402) 및 판독 카운터(236)를 업데이트하는 단계(404)를 더 포함할 수 있다. 전술된 바와 같이, 이것은 클록 사이클 동안 수신된 기록 요청의 수를 기록 카운터(238)에 추가하는 단계, 및 클록 사이클 동안 수신된 판독 요청의 수를 판독 카운터(236)에 추가하는 단계를 포함할 수 있다.
방법(400)은 기록 카운터와 판독 카운터 사이의 차이를 계산하는 단계(406)를 더 포함할 수 있다. 판독이 기록을 초과하는 언더플로우 조건이 없는 경우 기록 카운터와 판독 카운터 사이의 차이는 양이거나 또는 0이 된다. 일부 실시예에서, 단계(406)의 차이 함수를 구현하는 회로 및 카운터(236, 238)를 저장하는 레지스터에 의해 처리 가능한 최대 수를 초과하는 것을 회피하기 위해, 기록 카운터는 차이의 값과 같게 설정될 수 있고, 판독 포인터는 방법(400)의 각각의 반복에 대해 0과 같게 설정될 수 있다.
방법(400)은 단계(406)에서 계산된 차이를 하나 이상의 임계값에 대해 평가하는 단계를 포함할 수 있다. 예를 들어, 차이가 거의 가득 차 있음 임계값보다 더 큰 것으로 발견되면(408), 거의 가득 차 있음 이벤트가 생성될 수 있다(410). 만약 차이가 거의 비어 있음 임계값보다 더 작은 것으로 발견되면(412), 거의 비어 있음 이벤트가 생성될 수 있다(414). 차이가 버퍼의 크기보다 더 큰 것으로 발견되면(416), 버퍼 가득 차 있음 이벤트가 생성될 수 있다(418). 차이가 0인 것으로 발견되면(420), 버퍼 비어 있음 이벤트가 생성될 수 있다. 단계(408 내지 420)의 임계값들은 병렬 파이프라인들을 사용하여 동시에 또는 임의의 순서로 평가될 수 있다.
거의 가득 차 있음 임계값 및 거의 비어 있음 임계값은 방법(400)을 실행하기 전에 하드와이어되거나 프로그래밍된 미리 결정된 값들일 수 있다. 일부 실시예에서, 거의 가득 차 있음 임계값 및 거의 비어 있음 임계값은 실행 중인 스레드의 수와, 거의 가득 차 있음 상태 또는 거의 비어 있음 상태가 존재하는 것으로 발견된 것과 스레드들이 이벤트에 응답하여 차단될 수 있는 것 사이의 지연의 함수일 수 있다. 예를 들어, 기록 요청을 발행하도록 프로그래밍된 M개의 스레드가 실행 중이고 이벤트에 응답하여 스레드를 차단하기 위해 적어도 Q개의 클록 사이클이 소요되는 경우, 거의 가득 차 있음 임계값은 S - Q*M - R과 같게 설정될 수 있고, 여기서 S는 버퍼의 크기이고, R은 오버플로가 발생하지 않는 것을 보장하기 위해 0보다 더 큰 값이다. 이러한 방식으로, 거의 가득 차 있음 상태가 검출되면, 거의 가득 차 있음 이벤트가 기록 요청을 발행할 수 있는 M개의 스레드를 차단하기 전에 버퍼 오버플로우가 발생하지 않는다.
동일한 방식으로, 판독 요청을 발행하도록 프로그래밍된 M개의 스레드가 실행 중인 경우, 거의 비어 있음 임계값은 Q*M + R과 같게 설정될 수 있으며, 여기서 S는 버퍼의 크기이고, R은 언더플로우가 발생하지 않는 것을 보장하기 위해 0보다 더 큰 값이다. 이러한 방식으로, 거의 비어 있음 상태가 검출되면, 거의 비어 있음 이벤트가 판독 요청을 발행할 수 있는 M개의 스레드를 차단하기 전에 버퍼 언더플로우가 발생하지 않는다.
본 발명은 본 발명의 사상 또는 본질적인 특성을 벗어나지 않고 다른 특정 형태로 구현될 수 있다. 설명된 실시예들은 모든 면에서 단지 예시적인 것으로 고려되어야 하며, 본 발명을 제한하려는 것이 아니다. 그리하여, 본 발명의 범위는 전술된 설명에 의해서가 아니라 첨부된 청구범위에 의해서 한정된다. 청구범위 및 그 균등범위 내에 있는 모든 변형은 본 발명의 범위 내에 포함되어야 한다.

Claims (20)

  1. 방법으로서,
    실행 가능한 데이터를 저장하는 메모리 디바이스를 제공하는 단계;
    상기 메모리 디바이스에 연결되고 상기 실행 가능한 데이터를 검색하고 실행하도록 동작 가능한 처리 디바이스를 제공하는 단계;
    상기 처리 디바이스에 의해, 상기 메모리 디바이스의 일부를 버퍼로서 할당하는 단계;
    상기 처리 디바이스에 의해, 상기 버퍼를 참조하도록 하드웨어 버퍼 제어기의 상태를 개시하는 단계;
    상기 처리 디바이스에 의해, 애플리케이션을 실행하는 단계로서, 상기 애플리케이션을 실행하는 단계는 상기 버퍼에 액세스하는 요청을 실행하는 단계를 포함하고, 상기 요청은 상기 하드웨어 버퍼 제어기만을 참조하고 상기 버퍼 내에 임의의 어드레스를 포함하지 않는, 상기 애플리케이션을 실행하는 단계;
    상기 요청에 응답하여, 상기 처리 디바이스에 의해, 상기 하드웨어 버퍼 제어기에 상기 요청을 입력하는 단계; 및
    상기 하드웨어 버퍼 제어기에 의해, 각각의 요청에 대해,
    상기 하드웨어 버퍼 제어기의 상태에 기초하여 상기 버퍼 내 어드레스를 생성하는 동작;
    상기 어드레스를 포함하는 메모리 액세스 명령을 상기 메모리 디바이스에 출력하는 동작; 및
    상기 하드웨어 버퍼 제어기의 상태를 업데이트하는 동작
    을 수행하는 것에 의해 상기 요청을 처리하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서, 상기 하드웨어 버퍼 제어기는 선입선출(FIFO) 버퍼를 구현하는 것을 특징으로 하는 방법.
  3. 제2항에 있어서, 상기 하드웨어 버퍼 제어기의 상태는 판독 포인터 및 기록 포인터를 포함하고,
    상기 하드웨어 버퍼 제어기의 상태를 업데이트하는 단계는 상기 요청들 중 각각의 기록 요청에 대해 상기 기록 포인터를 증분시키는 단계를 포함하고;
    상기 하드웨어 버퍼 제어기의 상태를 업데이트하는 단계는 상기 요청들 중 각각의 판독 요청에 대해 상기 판독 포인터를 증분시키는 단계를 포함하는 것을 특징으로 하는 방법.
  4. 제3항에 있어서, 상기 기록 포인터를 증분시키는 단계는, 클록 사이클 동안 수신된 복수의 기록 요청의 수를 결정하고, 상기 복수의 기록 요청의 수만큼 상기 기록 포인터를 증분시키는 단계를 포함하고;
    상기 기록 포인터를 증분시키는 단계는, 상기 클록 사이클 동안 수신된 복수의 판독 요청의 수를 결정하고, 상기 복수의 판독 요청의 수만큼 상기 판독 포인터를 증분시키는 단계를 포함하는 것을 특징으로 하는 방법.
  5. 제3항에 있어서, 상기 하드웨어 버퍼 제어기의 상태에 기초하여 상기 버퍼 내 어드레스를 생성하는 단계는 상기 요청들 중 각각의 기록 요청에 대해 상기 기록 포인터의 현재 값을 출력하는 단계를 포함하고;
    상기 하드웨어 버퍼의 상태에 기초하여 상기 버퍼 내 어드레스를 생성하는 단계는 상기 요청들 중 각각의 판독 요청에 대해 상기 판독 포인터의 현재 값을 출력하는 단계를 포함하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    상기 처리 디바이스에 의해, 상기 기록 요청의 양과 상기 판독 요청의 양 사이의 차이를 계산하는 단계;
    상기 처리 디바이스에 의해, 상기 차이가 제1 임계값보다 더 작고 0이 아닌지 여부를 결정하는 단계;
    상기 차이가 제1 임계값보다 더 작고 0이 아닌 것으로 결정한 것에 응답하여, 상기 처리 디바이스에 의해, 상기 버퍼가 거의 비어 있는 것을 나타내는 이벤트를 출력하는 단계; 및
    상기 버퍼가 거의 비어 있는 것을 나타내는 이벤트에 응답하여, 상기 처리 디바이스에 의해, 상기 처리 디바이스에 의해 실행되는 하나 이상의 실행 스레드가 판독 요청을 생성하는 것을 차단하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 제5항에 있어서,
    상기 하드웨어 버퍼 제어기에 의해, 상기 기록 요청의 양과 상기 판독 요청의 양 사이의 차이를 계산하는 단계;
    상기 하드웨어 버퍼 제어기에 의해, 상기 차이가 제1 임계값보다 더 큰지 여부를 결정하는 단계;
    상기 차이가 제1 임계값보다 더 큰 것으로 결정한 것에 응답하여, 상기 하드웨어 버퍼 제어기에 의해, 상기 버퍼가 거의 가득 차 있는 것을 나타내는 이벤트를 출력하는 단계; 및
    상기 버퍼가 거의 가득 차 있는 것을 나타내는 이벤트에 응답하여, 상기 처리 디바이스에 의해, 상기 처리 디바이스에 의해 실행되는 하나 이상의 실행 스레드가 상기 기록 요청을 생성하는 것을 차단하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  8. 제1항에 있어서, 상기 하드웨어 소프트웨어 성분에 의해 상기 요청을 처리하는 단계는,
    상기 요청의 다수의 기록 요청을 집계하는 단계;
    상기 다수의 기록 요청에 대응하는 상기 버퍼 내 다수의 어드레스를 포함하는 상기 메모리 디바이스에 집계 기록 명령을 전송하는 단계;
    상기 요청의 다수의 판독 요청을 집계하는 단계; 및
    상기 다수의 판독 요청에 대응하는 상기 버퍼 내 다수의 어드레스를 포함하는 상기 메모리 디바이스에 집계 판독 명령을 전송하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  9. 제8항에 있어서, 상기 다수의 기록 요청은, 상기 기록 요청들 중 다른 요청을 상기 하드웨어 버퍼 제어기에 입력하기 전에 상기 기록 요청들 중 적어도 하나의 기록 요청이 수신되도록, 중첩하는 방식으로 복수의 실행 스레드에 의해 발행되는 것을 특징으로 하는 방법.
  10. 제9항에 있어서,
    상기 처리 디바이스에 의해, 상기 하드웨어 버퍼 제어기의 상태를 평가하는 단계;
    상기 처리 디바이스에 의해, 상기 하드웨어 버퍼 제어기의 상태가 임계값 조건을 만족하는지 여부를 결정하는 단계; 및
    상기 하드웨어 버퍼 제어기의 상태가 상기 임계값 조건을 만족시키는 것으로 결정한 것에 응답하여, 상기 처리 디바이스에 의해, 상기 복수의 실행 스레드가 상기 하드웨어 버퍼 제어기를 참조하는 추가적인 요청을 발행하는 것을 차단하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  11. 시스템으로서,
    실행 가능한 데이터를 저장하기 위한 메모리 디바이스;
    상기 메모리 디바이스에 연결되고 상기 실행 가능한 데이터를 검색하고 실행하도록 동작 가능한 처리 디바이스; 및
    상기 처리 디바이스 및 상기 메모리 디바이스에 연결된 하드웨어 버퍼 제어기를 포함하고, 상기 하드웨어 버퍼 제어기는,
    상기 메모리 디바이스 내 임의의 저장 위치에 대한 임의의 어드레스를 포함하지 않는, 상기 처리 디바이스로부터의 메모리 액세스 요청을 수신하는 동작;
    상기 하드웨어 버퍼 제어기의 상태에 기초하여 버퍼에 할당된 상기 메모리 디바이스의 영역 내 생성된 어드레스를 생성하는 동작;
    상기 생성된 어드레스를 포함하는 메모리 액세스 명령을 상기 메모리 디바이스에 출력하는 동작; 및
    상기 하드웨어 버퍼 제어기의 상태를 업데이트하는 동작
    을 수행하도록 프로그래밍된 것을 특징으로 하는 시스템.
  12. 제11항에 있어서, 상기 하드웨어 버퍼 제어기의 상태는 선입선출(FIFO) 버퍼를 구현하는 것을 특징으로 하는 시스템.
  13. 제12항에 있어서, 상기 하드웨어 버퍼 제어기는,
    상기 요청들 중 각각의 기록 요청에 대해, 기록 포인터를 증분시킴으로써 상기 하드웨어 버퍼 제어기의 상태를 업데이트하도록 더 프로그래밍되고;
    상기 하드웨어 버퍼 제어기의 상태를 업데이트하는 것은, 상기 요청들 중 각각의 판독 요청에 대해, 판독 포인터를 증분시키는 것을 포함하는 것을 특징으로 하는 시스템.
  14. 제13항에 있어서, 상기 하드웨어 버퍼 제어기는, 클록 사이클 동안 수신된 복수의 기록 요청의 수를 결정하고 상기 복수의 기록 요청의 수만큼 상기 기록 포인터를 증분시킴으로써 상기 기록 포인터를 증분시키도록 더 프로그래밍되고;
    상기 하드웨어 버퍼 제어기는, 상기 클록 사이클 동안 수신된 복수의 판독 요청의 수를 결정하고 상기 복수의 판독 요청의 수만큼 상기 판독 포인터를 증분시킴으로써 상기 판독 포인터를 증분시키도록 더 프로그래밍된 것을 특징으로 하는 시스템.
  15. 제13항에 있어서, 상기 하드웨어 버퍼 제어기는, 상기 요청들 중 각각의 기록 요청에 대해 상기 기록 포인터의 현재 값을 출력함으로써, 상기 하드웨어 버퍼 제어기의 상태에 기초하여 상기 버퍼에 할당된 상기 메모리 디바이스의 영역 내 상기 생성된 어드레스를 생성하도록 더 프로그래밍되고;
    상기 하드웨어 버퍼 제어기는, 상기 요청들 중 각각의 판독 요청에 대해 상기 판독 포인터의 현재 값을 출력함으로써, 상기 하드웨어 버퍼 제어기의 상태에 기초하여 상기 버퍼에 할당된 상기 메모리 디바이스의 영역 내 상기 생성된 어드레스를 생성하도록 더 프로그래밍된 것을 특징으로 하는 시스템.
  16. 제5항에 있어서, 상기 하드웨어 버퍼 제어기는,
    상기 기록 요청의 양과 상기 판독 요청의 양 사이의 차이를 계산하고;
    상기 차이가 제1 임계값보다 더 작고 0이 아닌 경우, 상기 버퍼가 거의 비어 있는 것을 나타내는 이벤트를 출력하도록 더 프로그래밍되고;
    상기 처리 디바이스는, 상기 버퍼가 거의 비어 있는 것을 나타내는 이벤트에 응답하여, 상기 처리 디바이스에 의해 실행되는 하나 이상의 실행 스레드가 판독 요청을 생성하는 것을 차단하도록 더 프로그래밍된 것을 특징으로 하는 시스템.
  17. 제16항에 있어서, 상기 하드웨어 버퍼 제어기는,
    상기 기록 요청의 양과 상기 판독 요청의 양 사이의 차이를 계산하고;
    상기 차이가 제2 임계값보다 더 큰 경우, 상기 처리 디바이스에 의해 상기 버퍼가 거의 가득 차 있는 것을 나타내는 이벤트를 출력하도록 더 프로그래밍되고;
    상기 처리 디바이스는, 상기 버퍼가 거의 가득 차 있는 것을 나타내는 이벤트에 응답하여, 상기 처리 디바이스에 의해 실행되는 하나 이상의 실행 스레드가 기록 요청을 생성하는 것을 차단하도록 더 프로그래밍된 것을 특징으로 하는 시스템.
  18. 제11항에 있어서, 상기 하드웨어 소프트웨어 성분은,
    상기 요청들의 다수의 기록 요청을 집계하는 동작;
    상기 다수의 기록 요청에 대응하는 상기 버퍼 내 다수의 어드레스를 포함하는 상기 메모리 디바이스에 집계 기록 명령을 전송하는 동작;
    상기 요청들의 다수의 판독 요청을 집계하는 동작; 및
    상기 다수의 판독 요청에 대응하는 상기 버퍼 내 다수의 어드레스를 포함하는 상기 메모리 디바이스에 집계 판독 명령을 전송하는 동작
    에 의해 상기 요청을 처리하도록 더 프로그래밍된 것을 특징으로 하는 시스템.
  19. 제11항에 있어서, 상기 하드웨어 소프트웨어 성분은, 상기 기록 요청들 중 다른 요청을 상기 하드웨어 버퍼 제어기에 입력하기 전에 상기 기록 요청들 중 적어도 하나의 기록 요청이 수신되도록, 중첩하는 방식으로 상기 처리 디바이스에 의해 실행되는 복수의 실행 스레드로부터 상기 다수의 기록 요청을 수신하도록 프로그래밍된 것을 특징으로 하는 시스템.
  20. 제19항에 있어서, 상기 하드웨어 버퍼 제어기는,
    상기 하드웨어 버퍼 제어기의 상태를 평가하는 동작; 및
    상기 하드웨어 버퍼 제어기의 상태가 임계값 조건을 만족하면, 상기 처리 디바이스에 의해, 상기 복수의 실행 스레드가 상기 하드웨어 버퍼 제어기를 참조하는 추가적인 요청을 발행하는 것을 차단하는 것을 호출하는 동작을 수행하도록 더 프로그래밍된 것을 특징으로 하는 시스템.
KR1020187018862A 2015-12-11 2016-12-12 다중 스레드 액세스를 위한 소프트웨어로 한정된 fifo 버퍼 KR102683211B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/966,631 2015-12-11
US14/966,631 US10585623B2 (en) 2015-12-11 2015-12-11 Software defined FIFO buffer for multithreaded access
PCT/US2016/066106 WO2017100748A1 (en) 2015-12-11 2016-12-12 Software defined fifo buffer for multithreaded access

Publications (2)

Publication Number Publication Date
KR20180107091A true KR20180107091A (ko) 2018-10-01
KR102683211B1 KR102683211B1 (ko) 2024-07-08

Family

ID=

Also Published As

Publication number Publication date
EP3387513A1 (en) 2018-10-17
CN108292162B (zh) 2021-08-31
CN108292162A (zh) 2018-07-17
EP3387513A4 (en) 2019-07-10
WO2017100748A1 (en) 2017-06-15
US20170168755A1 (en) 2017-06-15
US10585623B2 (en) 2020-03-10
JP2019502201A (ja) 2019-01-24
JP6884149B2 (ja) 2021-06-09

Similar Documents

Publication Publication Date Title
US10585623B2 (en) Software defined FIFO buffer for multithreaded access
JP6888019B2 (ja) メモリアクセスコマンドの転送記述子
US20080052716A1 (en) Method and apparatus to control priority preemption of tasks
CN110678847A (zh) 用于gpu任务调度的连续分析任务
US20200117623A1 (en) Adaptive Interrupt Coalescing
JP2019502201A5 (ko)
US8621479B2 (en) System and method for selecting task allocation method based on load balancing and core affinity metrics
US10289418B2 (en) Cooperative thread array granularity context switch during trap handling
WO2020026010A2 (zh) 任务执行的调控方法、装置、设备/终端/服务器及存储介质
US10769063B2 (en) Spin-less work-stealing for parallel copying garbage collection
KR102683211B1 (ko) 다중 스레드 액세스를 위한 소프트웨어로 한정된 fifo 버퍼
KR102651864B1 (ko) 하드웨어 액세스 카운터 및 다중 스레드 처리를 조정하기 위한 이벤트 생성
JP6627475B2 (ja) 処理リソース制御プログラム、処理リソース制御装置、および処理リソース制御方法
US11068250B2 (en) Crowdsourced API resource consumption information for integrated development environments
JP6584655B2 (ja) フリップキューの管理に基づくグラフィックスコンテキストのスケジューリング
US11132204B2 (en) Aggregated doorbells for unmapped queues in a graphics processing unit
CN113381941A (zh) 一种任务调度方法、装置、电子设备和计算机存储介质
JPWO2018158944A1 (ja) 処理分割装置、シミュレータシステム、処理分割方法及び処理分割プログラム

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