KR20210094178A - 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템 - Google Patents

직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템 Download PDF

Info

Publication number
KR20210094178A
KR20210094178A KR1020200007182A KR20200007182A KR20210094178A KR 20210094178 A KR20210094178 A KR 20210094178A KR 1020200007182 A KR1020200007182 A KR 1020200007182A KR 20200007182 A KR20200007182 A KR 20200007182A KR 20210094178 A KR20210094178 A KR 20210094178A
Authority
KR
South Korea
Prior art keywords
electronic device
data
host
accelerator
command
Prior art date
Application number
KR1020200007182A
Other languages
English (en)
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 삼성전자주식회사
Priority to KR1020200007182A priority Critical patent/KR20210094178A/ko
Priority to US17/007,553 priority patent/US11321254B2/en
Priority to DE102020129033.0A priority patent/DE102020129033A1/de
Priority to CN202011284417.7A priority patent/CN113138950A/zh
Publication of KR20210094178A publication Critical patent/KR20210094178A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0064Latency reduction in handling transfers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Abstract

본 발명의 실시 예에 따른 컴퓨팅 시스템은 호스트; 메모리 및 가속기를 포함하는 제 1 전자 장치; 및 호스트로부터 제 1 전자 장치를 통해 전송되는 명령에 기초하여 데이터 및 명령의 컴플리션 정보를 제 1 전자 장치로 전송하는 DMA(Direct Memory Access) 엔진을 포함하는 제 2 전자 장치를 포함하되, 메모리는 데이터를 저장하는 데이터 버퍼 및 컴플리션 정보를 저장하는 컴플리션 큐 버퍼를 포함하고, 가속기는 데이터에 대한 계산을 실행하고, 그리고 DMA 엔진은 데이터를 제 1 전자 장치로 전송하고 그 다음 컴플리션 정보를 제 1 전자 장치로 전송한다.

Description

직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템{COMPUTING SYSTEM FOR TRANSMITTING COMPLETION EARLY BETWEEN SERIALLY CONNECTED ELECTRONIC DEVICES}
본 발명은 컴퓨팅 시스템에 관한 것으로, 좀 더 자세하게는, 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템에 관한 것이다.
컴퓨팅 시스템에서 다수의 전자 장치들이 서로 상호 연결되어 통신할 수 있다. 컴퓨팅 시스템의 버스는 컴퓨팅 시스템의 다수의 전자 장치들을 상호 연결할 수 있다. 다수의 전자 장치들은 직렬로(serially) 또는 연속적으로(sequentially) 연결될 수 있다. 직렬로 연결된 전자 장치들은 컴퓨팅 시스템의 호스트와 통신할 수 있다.
다수의 전자 장치들 중 종단 장치에 해당하는 전자 장치는 적어도 하나 이상의 전자 장치들을 통해 호스트와 통신할 수 있다. 종단 장치와 호스트 사이에 위치하는 적어도 하나 이상의 전자 장치들의 레이턴시로 인하여 종단 장치와 호스트 사이의 통신 속도가 느려질 수 있다. 특히, 종단 장치가 고속의 전자 장치인 경우, 상술한 레이턴시가 더욱 문제가 될 수 있다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템을 제공할 수 있다.
본 발명의 실시 예에 따른 컴퓨팅 시스템은 호스트; 메모리 및 가속기를 포함하는 제 1 전자 장치; 및 호스트로부터 제 1 전자 장치를 통해 전송되는 명령에 기초하여 데이터 및 명령의 컴플리션 정보를 제 1 전자 장치로 전송하는 DMA(Direct Memory Access) 엔진을 포함하는 제 2 전자 장치를 포함하되, 메모리는 데이터를 저장하는 데이터 버퍼 및 컴플리션 정보를 저장하는 컴플리션 큐 버퍼를 포함하고, 가속기는 데이터에 대한 계산을 실행하고, 그리고 DMA 엔진은 데이터를 제 1 전자 장치로 전송하고 그 다음 컴플리션 정보를 제 1 전자 장치로 전송한다.
본 발명의 다른 실시 예에 따른 컴퓨팅 시스템은 호스트; 호스트와 통신하는 제 1 전자 장치; 및 제 1 전자 장치를 통해 호스트와 통신하는 제 2 전자 장치를 포함하되, 제 1 전자 장치는: 호스트로부터 제 1 전자 장치를 통해 명령을 수신하는 제 2 전자 장치로부터 데이터를 수신하는 데이터 버퍼 및 제 2 전자 장치로부터 명령에 대한 컴플리션 정보를 수신하는 컴플리션 큐 버퍼를 포함하는 메모리; 메모리에 저장된 데이터에 대한 계산을 실행하는 가속기; 및 가속기에 의해 실행되는 계산이 완료되면 컴플리션 큐 버퍼에 저장된 컴플리션 정보를 호스트로 전송하는 인터페이스 회로를 포함한다.
본 발명의 또 다른 실시 예에 따른 컴퓨팅 시스템은 명령이 기입되는 호스트 메모리 버퍼의 서브미션 큐 및 명령에 대한 컴플리션 정보가 기입되는 호스트 메모리 버퍼의 컴플리션 큐를 관리하는 호스트; 명령에 의해 요청된 데이터를 저장하는 데이터 버퍼와 컴플리션 정보를 저장하는 컴플리션 큐 버퍼를 포함하는 메모리 그리고 데이터에 대한 계산을 실행하는 가속기를 포함하는 제 1 전자 장치; 및 제 1 전자 장치를 통해 명령을 페치하고 그리고 명령에 기초하여 데이터 및 컴플리션 정보를 제 1 전자 장치로 전송하는 제 2 전자 장치를 포함한다.
본 발명의 실시 예에 따르면, FPGA는 호스트의 컴플리션 큐를 복제한 컴플리션 큐 버퍼를 포함하므로, 저장 장치는 FPGA가 컴플리션 큐 버퍼를 포함하지 않는 경우에 비해 컴플리션 정보를 조기에 전송할 수 있다. 따라서, 호스트가 발행한 명령이 완료되는데 필요한 레이턴시가 개선될 수 있다.
도 1은 본 발명의 실시 예에 따른 컴퓨팅 시스템의 블록도를 예시적으로 도시한다.
도 2는 도 1의 컴퓨팅 시스템의 블록도를 좀 더 구체적으로 도시한다.
도 3은 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다.
도 4는 도 3의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다.
도 5는 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다.
도 6은 도 5의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다.
도 7은 도 5의 컴퓨팅 시스템의 동작 방법을 예시적으로 도시한다.
도 8은 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다.
도 9는 도 8의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다.
도 10은 도 8의 컴퓨팅 시스템의 동작 방법을 예시적으로 도시한다.
도 11은 도 3 내지 도 10에서 전술한 FPGA들 중 어느 하나의 블록도를 예시적으로 도시한다.
도 12는 도 3 내지 도 10에서 전술한 저장 장치들 중 어느 하나의 블록도를 예시적으로 도시한다.
도 13은 본 발명의 적용 예에 따른 컴퓨팅 장치의 블록도를 예시적으로 도시한다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 쉽게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 컴퓨팅 시스템의 블록도를 예시적으로 도시한다. 컴퓨팅 시스템(10)은 호스트(11), 제 1 전자 장치(12), 및 제 2 전자 장치(13)를 포함할 수 있다. 예를 들어, 컴퓨팅 시스템(10)은 데스크톱(Desktop) 컴퓨터, 랩톱(Laptop) 컴퓨터, 태블릿(Tablet) 컴퓨터, 비디오 게임기(Video Game Console), 워크스테이션(Workstation), 서버(Server), 컴퓨팅 장치, 모바일 장치 등과 같은 다양한 전자 기기 또는 전자 기기의 메인보드 상에서 구현될 수 있다.
호스트(11)는 컴퓨팅 시스템(10)의 전반적인 동작들을 관리하고 처리할 수 있다. 예를 들어, 호스트(11)는 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서를 포함할 수 있다. 호스트(11)는 프로세서 그 자체이거나 프로세서를 포함하는 전자 장치 또는 시스템일 수 있다.
제 1 전자 장치(12)는 호스트(11)와 직접적으로 또는 직렬로(또는 연속적으로) 연결될 수 있다. 제 2 전자 장치(13)는 제 1 전자 장치(12)와 직접적으로 또는 직렬로 연결될 수 있다. 예를 들어, 호스트(11), 제 1 전자 장치(12), 및 제 2 전자 장치(13)는 체인(chain) 방식으로 연결될 수 있다. 제 2 전자 장치(13)는 제 1 전자 장치(12)를 통해 호스트(11)와 연결될 수 있다. 예를 들어, 호스트(11)는 제 1 전자 장치(12)와 직접적으로 통신할 수 있고 그리고 제 1 전자 장치(12)를 통해 제 2 전자 장치(13)와 통신할 수 있다. 예를 들어, 제 2 전자 장치(13)는 종단 장치에 해당할 수 있고 그리고 제 1 전자 장치(12)는 호스트(11)와 종단 장치를 상호 연결하는 중간(intermediate) 장치에 해당할 수 있다.
도 1의 도시와 달리, 호스트(11)와 제 1 전자 장치(12) 사이에 하나 이상의 전자 장치들이 더 연결될 수 있고 그리고 제 1 전자 장치(12)와 제 2 전자 장치(13) 사이에 하나 이상의 전자 장치들이 더 연결될 수 있다. 예를 들어, 제 1 전자 장치(12)와 제 2 전자 장치(13)는 서로 동일하게 또는 상이하게 구현될 수 있다. 다른 예를 들어, 제 1 전자 장치(12)는 호스트(11)와 제 2 전자 장치(13)를 연결하는 스위치 또는 스위치 장치에 해당할 수 있고 그리고 제 2 전자 장치(13)는 스위치가 아닌 종단 장치에 해당할 수 있다. 또 다른 예를 들어, 도 1에서 도시되진 않았으나, 컴퓨팅 시스템(10)은 제 1 및 제 2 전자 장치들(12, 13)을 통해 호스트(11)와 통신할 수 있는 제 3 전자 장치를 더 포함할 수도 있다.
예를 들어, 호스트(11), 제 1 전자 장치(12), 및 제 2 전자 장치(13) 각각은 SoC(System on Chip), ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array), 저장 장치, SSD(Solid State Drive), PCIe(Peripheral Component Interconnect Express) 장치, NVMe(Nonvolatile Memory Express) 장치, UFS(Universal Flash Storage) 장치, USB(Universal Serial Bus) 등으로 구현될 수 있으나, 상술한 예시들로 본 발명의 범위가 한정되지 않는다.
도 2는 도 1의 컴퓨팅 시스템의 블록도를 좀 더 구체적으로 도시한다. 컴퓨팅 시스템(100)은 도 1의 컴퓨팅 시스템(10)의 일 예시에 해당할 수 있다. 컴퓨팅 시스템(100)은 프로세서(110), 루트 컴플렉스(Root Complex; 120), 메모리(130), 및 전자 장치들(141, 142, 151~154, 161~163)을 포함할 수 있다. 여기서, 전자 장치는 I/O(input/output; 입출력) 장치로도 지칭될 수 있다.
프로세서(110)는 다양한 종류의 산술 연산들 또는 논리 연산들을 수행할 수 있다. 예를 들어, 프로세서(110)는 상술한 연산들을 수행하는 적어도 하나 이상의 코어들(예를 들어, 동종 멀티-코어 또는 이종 멀티-코어)과 내부 캐시 메모리를 포함할 수 있다. 프로세서(110)는 메모리(130)에 로드(load)되는 프로그램 코드, 소프트웨어, 어플리케이션 프로그램, 펌웨어 등을 실행할 수 있다.
루트 컴플렉스(120)는 프로세서(110), 메모리(130), 및 전자 장치들(141, 142, 151~154, 161~163) 간의 통신을 중재할 수 있다. 예를 들어, 루트 컴플렉스(120)는 프로세서(110), 메모리(130), 및 전자 장치들(141, 142, 151~154, 161~163) 사이에서 통신 타이밍, 통신 시퀀스, 통신 환경 등을 관리할 수 있다. 루트 컴플렉스(120)는 하드웨어 방식, 소프트웨어 방식, 또는 상술한 것들의 조합으로 구현될 수 있고 컴퓨팅 시스템(100)의 메인보드 상에 실장될 수 있다. 루트 컴플렉스(120)는 프로세서(110) 및 메모리(130)를 전자 장치들(141, 142, 151~154, 161~163)을 포함하는 I/O 계층(hierarchy)에 연결시키는 루트일 수 있다. 루트 컴플렉스(120)는 하나 이상의 다운스트림 포트들(DP)을 포함할 수 있고, 루트 컴플렉스(120)의 다운스트림 포트(DP)에 전자 장치들(141, 142)이 연결될 수 있고, 루트 컴플렉스(120)의 다운스트림 포트(DP)에 전자 장치들(151~154)이 연결될 수 있고, 그리고 루트 컴플렉스(120)의 다운스트림 포트(DP)에 전자 장치들(161~163)이 연결될 수 있다. 다운스트림 포트들(DP)의 개수는 도 2에서 도시된 것으로 한정되지 않는다. 다운스트림 포트들(DP) 각각에 연결된 전자 장치의 개수는 하나이거나 복수일 수 있다.
실시 예에 있어서, 루트 컴플렉스(120)와 전자 장치들(141, 142, 151~154, 161~163) 간의 통신은 PCIe(Peripheral Component Interconnect Express), M-PCIe(Mobile PCIe), NVMe(Nonvolatile Memory Express), USB(Universal Serial Bus), SCSI(Small Computer System Interface), ATA(Advanced Technology Attachment), PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), IDE(Integrated Drive Electronics), UFS(Universal Flash Storage), Firewire 등의 다양한 인터페이스 규약에 따라 수행될 수 있다.
메모리(130)는 컴퓨팅 시스템(100)의 동작에 이용되는 데이터를 일시적으로 또는 임시로 저장할 수 있다. 메모리(130)는 프로세서(110)에 의해 처리된 또는 처리될 데이터를 저장할 수 있다. 예를 들어, 메모리(130)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), TRAM(Thyristor RAM) 등과 같은 휘발성 메모리 또는 불휘발성 메모리를 포함할 수 있다. 메모리(130) 상에 프로세서(110)에 의해 실행될 수 있는 어플리케이션 프로그램, 파일 시스템, 또는 장치 드라이버가 로드될 수 있다. 메모리(130) 상에 로드되는 프로그램, 소프트웨어 계층은 도 2에서 도시된 것으로 한정되지 않는다. 메모리(130)는 호스트 메모리 버퍼(HMB)를 포함할 수 있다. 메모리(130)의 전제 저장 영역 중 일부 영역이 호스트 메모리 버퍼(HMB)로 할당될 수 있다.
예를 들어, 프로세서(110)는 도 1의 호스트(11)에 해당할 수 있다. 다른 예를 들어, 프로세서(110) 및 루트 컴플렉스(120)는 도 1의 호스트(11)에 해당할 수 있다. 또 다른 예를 들어, 프로세서(110), 루트 컴플렉스(120), 및 메모리(130) 모두가 도 1의 호스트(11)에 해당할 수 있다. 프로세서(110), 루트 컴플렉스(120), 및 메모리(130)는 하나의 칩으로 구현되어 호스트(11)를 구성할 수 있다. 또는, 프로세서(110), 루트 컴플렉스(120), 및 메모리(130)는 하나 이상의 칩들로 구현되어 호스트(11)를 구성할 수도 있다.
전자 장치들(141, 142, 151~154, 161~163) 중 전자 장치들(142, 152, 154, 163) 각각은 종단 장치에 해당할 수 있다. 전자 장치들(142, 152, 154, 163) 각각은 엔드 포인트 포트(EP)를 포함할 수 있다. 나머지 전자 장치들(141, 151~153, 161, 162) 각각은 루트 컴플렉스(120)와 종단 장치를 상호 연결하는 중간 장치에 해당할 수 있다. 전자 장치들(141, 151~153, 161, 162) 각각은 업스트림 포트(UP) 및 다운스트림 포트(DP)를 포함할 수 있다. 예를 들어, 업스트림 포트(UP)는 다운스트림 포트(DP)보다 상대적으로 루트 컴플렉스(120)에 더 가까울 수 있다. 종단 장치의 엔드 포인트 포트(EP)는 중간 장치 또는 루트 컴플렉스(120)의 다운스트림 포트(DP)에 연결될 수 있다. 엔드 포인트 포트(EP)는 업스트림 포트(UP)로도 지칭될 수도 있다. 예를 들어, 전자 장치들(141, 151~153, 161, 162) 중 하나는 도 1의 제 1 전자 장치(12)에 해당할 수 있고 전자 장치들(142, 152, 154, 163) 중 하나는 도 1의 제 2 전자 장치(13)에 해당할 수 있다.
실시 예에 있어서, 도 1의 제 1 전자 장치(12)에 해당하는 전자 장치들(141, 151~153, 161, 162)은 FPGA, PCIe 스위치, PCIe 장치, NVMe 장치, 저장 장치, SSD(Solid State Drive) 등일 수 있다. 도 1의 제 2 전자 장치(13)에 해당하는 전자 장치들(142, 152, 154, 163)도 FPGA, PCIe 스위치, PCIe 장치, NVMe 스위치, NVMe 장치, 저장 장치, SSD 등일 수 있다. 전술한대로, 전자 장치들(142, 152, 154, 163)과 연결된 다른 종단 장치들(미도시)이 컴퓨팅 시스템(100)에 더 포함될 수 있다.
예를 들어, 전자 장치들(141, 151~153, 161, 162) 중 FPGA인 전자 장치는 프로세서(110)의 연산 또는 계산을 보조할 수 있다. FPGA인 전자 장치는 전자 장치들(142, 152, 154, 163) 중 임의의 전자 장치로부터 전송되는 읽기 데이터에 대한 연산을 실행할 수 있고, 연산 결과를 루트 컴플렉스(120)로 전송할 수 있고, 그리고 프로세서(110)의 계산을 보조할 수 있다. FPGA인 전자 장치는 루트 컴플렉스(120)로부터 전송되는 쓰기 데이터에 대한 연산을 실행할 수 있고, 연산 결과를 다른 전자 장치로 전송할 수 있고, 그리고 프로세서(110)의 계산을 보조할 수 있다.
도 3은 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다. 도 4는 도 3의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다. 컴퓨팅 시스템(200)은 호스트(210), FPGA(220), 및 저장 장치(230)를 포함할 수 있다. 예를 들어, 컴퓨팅 시스템(200), 호스트(210), FPGA(220), 및 저장 장치(230)는 도 1의 컴퓨팅 시스템(10), 호스트(11), 제 1 전자 장치(12), 및 제 2 전자 장치(13)에 각각 해당할 수 있다.
호스트(210)는 서브미션 큐(Submission Queue; SQ, 211), 컴플리션 큐(Completion Queue; CQ, 212), 및 데이터 버퍼(213)를 포함할 수 있다. 서브미션 큐(211), 컴플리션 큐(212), 및 데이터 버퍼(213)는 도 2의 호스트 메모리 버퍼(HMB) 상에 위치하거나 구현될 수 있고 호스트 메모리 버퍼(HMB)의 일부 영역들을 차지할 수 있다. 호스트(210)는 서브미션 큐(211)와 컴플리션 큐(212)의 쌍에 기초하여 FPGA(220)를 통해 저장 장치(230)에 대한 입출력 동작들을 수행할 수 있다.
FPGA(220)는 호스트(210)와 저장 장치(230) 사이에 위치할 수 있고 그리고 전기적인 신호들을 호스트(210)(또는 저장 장치(230))로부터 저장 장치(230)(또는 호스트(210))로 전송할 수 있다. FPGA(220)는 데이터 버퍼(221) 및 가속기(222)를 포함할 수 있다. 데이터 버퍼(221)는 호스트(210)와 저장 장치(230) 사이에서 전송되는 데이터를 저장할 수 있다. 가속기(222)는 데이터 버퍼(221)에 저장된 데이터에 대해 다양한 종류의 산술 연산, 계산 등을 실행할 수 있다.
저장 장치(230)는 호스트(210)의 명령(또는 요청)들을 수신할 수 있고, 수신된 명령들을 처리할 수 있고, 처리 결과를 호스트(210)로 전송할 수 있고, 그리고 불휘발성 메모리(239)를 제어하는 컨트롤러(231) 및 불휘발성 메모리(239)를 포함할 수 있다. 예를 들어, 불휘발성 메모리(239)는 NAND 플래시 메모리, NOR 플래시 메모리, PRAM(Phase Change RAM), MRAM(Magnetic RAM), ReRAM(Resistive RAM), FRAM(Ferroelectric RAM) 등을 포함할 수 있다. 컨트롤러(231)는 FPGA(220) 또는 호스트(210)로 요청, 데이터 등을 직접적으로 전송하도록 구성되는 DMA(Direct Memory Access) 엔진(232)을 포함할 수 있다
호스트(210)는 저장 장치(230)에 대한 명령을 서브미션 큐(211)의 엔트리(혹은 슬롯)에 입력하거나 기입할 수 있고 그리고 서브미션 큐(211)에 대한 테일 포인터, 즉 서브미션 큐(211)에 대한 도어벨을 업데이트할 수 있다. 예를 들어, 도어벨은 서브미션 큐(211)를 나타내는 어드레스를 포함할 수 있다. 예를 들어, 서브미션 큐(211)와 컴플리션 큐(212)의 쌍은 프로세서(110)의 코어마다 제공될 수 있고 쌍의 개수는 하나 이상일 수 있다. 호스트(210)는 서브미션 큐(211)에 대한 도어벨을 FPGA(220)를 통해 저장 장치(230)로 제출(submit)하거나 전송(transmit)할 수 있다. 호스트(210)는 도어벨을 전송함으로써 저장 장치(230)의 컨트롤러(231)의 도어벨 레지스터(SQTDBL)를 업데이트할 수 있다. 저장 장치(230)는 도어벨 레지스터(SQTDBL)에 저장된 도어벨을 읽고 호스트(210)에 의해 명령이 서브미션 큐(211)에 입력 또는 기입되었음을 확인할 수 있다. 저장 장치(230)는 도어벨에 기초하여 호스트(210)의 서브미션 큐(211)의 명령을 페치(fetch)하거나 읽을 수 있다. 저장 장치(230)는 호스트(210)의 서브미션 큐(211)의 명령을 요청할 수 있고 요청을 FPGA(220)를 통해 호스트(210)로 전송할 수 있다. 그 다음, 저장 장치(230)는 호스트(210)로부터 FPGA(220)를 통해 서브미션 큐(211)의 명령을 읽거나 수신할 수 있다(①).
저장 장치(230)의 DMA 엔진(232)은 FPGA(220)로 인한 스위치 레이턴시들이 경과하면 FPGA(220)로부터 명령을 수신하고 수신된 명령을 컨트롤러(231)에 관한 메모리(도 12의 631_2 또는 638 참조)에 저장할 수 있다. 레이턴시는 시간으로도 지칭될 수 있다. 예를 들어, FPGA(220)의 전체 레이턴시는 호스트 측(host-side) 스위치 레이턴시와 장치 측(storage device-side) 스위치 레이턴시로 나뉠 수 있다. 좀 더 구체적으로, FPGA(220)는 명령을 전송하기 위한 하나 이상의 전송 회로들과 FPGA(220) 내부의 물리적인 경로들을 포함하는 전송 경로를 포함할 수 있다. 예를 들어, 명령이 FPGA(220)의 전송 경로 중 일부를 통과하는데 소요되는 시간은 호스트 측 레이턴시에 해당할 수 있고 명령이 FPGA(220)의 전송 경로 중 나머지를 통과하는데 소요되는 시간은 장치 측 레이턴시에 해당할 수 있다. 상술한 명령의 전송(①)과 유사하게, 명령에 관한 요청을 전송하거나 명령이 서브미션 큐(211)에 기입되었음을 나타내는 도어벨을 전송하는 경우들에서도 스위치 레이턴시들이 각각 발생할 수 있다.
저장 장치(230)의 컨트롤러(231)는 호스트(210)로부터 FPGA(220)를 통해 전송되는 명령을 수신하고(①) 수신된 명령을 처리할 수 있다. 예를 들어, 명령은 읽기 명령일 수 있다. 컨트롤러(231)는 명령을 디코딩(decoding)할 수 있고 DMA 엔진(232)은 명령에 의해 요청된 데이터를 FPGA(220)로 전송할 수 있다(②). 명령에 의해 요청된 데이터는 불휘발성 메모리(239)에 저장된 데이터 혹은 다른 메모리(도 12의 631_2 또는 638 참조)에 저장된 데이터에 해당할 수 있다.
저장 장치(230)로부터 FPGA(220)로 읽기 데이터가 전송된(②) 이후에 스위치 레이턴시가 경과하면, 읽기 데이터가 데이터 버퍼(221)에 도달 및 저장될 수 있다. 가속기(222)는 데이터 버퍼(221)에 저장된 읽기 데이터에 대한 계산을 실행할 수 있다. 가속기(222)에 의해 실행된 계산이 완료되면, 가속기(222)는 가속기(222)에 의해 생성되는 계산된 데이터와 읽기 데이터 중 하나를 호스트(210)로 전송할 수 있다(③). 계산된 데이터와 읽기 데이터 중 하나가 호스트(210)로 전송된 이후에 스위치 레이턴시가 경과하면 계산된 데이터와 읽기 데이터 중 하나가 호스트(210)에 도달할 수 있다(③). 또한, 가속기(222)는 가속기(222)에 의해 실행된 계산이 완료되었음을 나타내는 신호(혹은 알림 신호)를 저장 장치(230)로 전송할 수 있다(④). 가속기(222)에 의해 실행된 계산이 완료되었음을 나타내는 신호가 전송된 이후에 스위치 레이턴시가 경과하면 신호가 저장 장치(230)의 DMA 엔진(232)에 도달할 수 있다(④). 예를 들어, 도 4의 도시와 같이, 가속기(222)는 계산된 데이터와 읽기 데이터 중 하나를 호스트(210)로 전송하고(③) 그 다음 가속기(222)에 의해 실행된 계산이 완료되었음을 나타내는 신호를 저장 장치(230)로 전송할 수 있다(④). 다른 예를 들어, 도 4의 도시와 달리, 가속기(222)는 계산된 데이터와 읽기 데이터 중 하나를 호스트(210)로 전송하고 동시에 가속기(222)에 의해 실행된 계산이 완료되었음을 나타내는 신호를 저장 장치(230)로 전송할 수도 있다. 어느 경우든, FPGA(220)는 가속기(222)의 계산이 완료된 이후에 가속기(222)에 의해 실행된 계산이 완료되었음을 나타내는 신호를 저장 장치(230)로 전송할 수 있다.
컨트롤러(231)는 신호를 수신할 수 있고(④) 그리고 신호를 통해 가속기(222)에 의해 실행되는 읽기 데이터에 대한 연산이 완료되고 호스트(210)의 명령이 처리되었음을 확인할 수 있다. DMA 엔진(232)은 명령에 관한 컴플리션 정보(혹은 컴플리션)를 FPGA(220)를 통해 호스트(210)로 전송할 수 있다(⑤). 예를 들어, 컴플리션 정보는 명령이 완료되었는지 여부, 명령의 처리 결과 등을 포함할 수 있다. 저장 장치(230)로부터 FPGA(220)로 컴플리션 정보가 전송된(⑤) 이후에 스위치 레이턴시들이 경과하면 컴플리션 정보가 호스트(210)의 컴플리션 큐(212)에 도달할 수 있다(⑤). 명령의 전송과 유사하게, 컴플리션 정보를 전송하는(⑤) 경우에도 스위치 레이턴시들이 발생하게 된다. 본 발명의 실시 예들은 호스트(210)와 저장 장치(230) 사이에 위치하는 FPGA(220)로 인하여 발생하는 스위치 레이턴시들로 인하여, 명령의 처리가 완료되는데 필요한 시간 혹은 레이턴시(또는, 명령의 컴플리션 정보를 수신하는데 필요한 시간 혹은 레이턴시)를 개선하기 위한 여러 컴퓨팅 시스템들(300, 400, 1000)을 제공할 수 있다.
도 5는 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다. 도 6은 도 5의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다. 도 7은 도 5의 컴퓨팅 시스템의 동작 방법을 예시적으로 도시한다.
컴퓨팅 시스템(300)은 호스트(310), FPGA(320), 및 저장 장치(330)를 포함할 수 있다. 호스트(310)는 서브미션 큐(311), 컴플리션 큐(312), 및 데이터 버퍼(313)를 포함할 수 있다. 호스트(310)의 구성 요소들(311~313)은 호스트(210)의 구성 요소들(211~213)과 각각 유사할 수 있다. FPGA(320)는 데이터 버퍼(321) 및 가속기(322)를 포함할 수 있다. FPGA(320)의 구성 요소들(321, 322)은 FPGA(220)의 구성 요소들(211, 212)과 각각 유사할 수 있다. FPGA(220)에 비해, FPGA(320)는 컴플리션 큐 버퍼(323)를 더 포함할 수 있다. 예를 들어, FPGA(320)의 컴플리션 큐 버퍼(323)는 호스트(310)이 컴플리션 큐(312)를 복사(copy) 혹은 미러링(mirroring)한 것에 해당할 수 있다. 컴플리션 큐 버퍼(323)는 컴플리션 큐(312)와 유사할 수 있다. 저장 장치(330)는 컨트롤러(331) 및 불휘발성 메모리(339)를 포함할 수 있다. 컨트롤러(331)는 DMA 엔진(332)을 포함할 수 있다. 저장 장치(330)의 구성 요소들(331, 332, 339)은 저장 장치(230)의 구성 요소들(231, 232, 239)과 각각 유사할 수 있다. 컴퓨팅 시스템(300)과 컴퓨팅 시스템(200) 간의 차이점이 주로 설명될 것이다.
호스트(310)는 저장 장치(330)에 대한 명령을 서브미션 큐(311)에 기입하거나 저장할 수 있다. 호스트(310)는 서브미션 큐(311)에 대한 도어벨을 FPGA(320)로 전송할 수 있고 FPGA(320)는 도어벨을 수신할 수 있다. FPGA(320)는 도어벨을 저장 장치(330)로 전송할 수 있다. 저장 장치(330)는 도어벨에 기초하여 호스트(310)의 서브미션 큐(311)의 명령을 요청할 수 있고 요청을 FPGA(320)로 전송할 수 있다. FPGA(320)는 요청을 호스트(310)로 전송할 수 있다. 예를 들어, 저장 장치(330)는 호스트(310)의 하나 이상의 서브미션 큐들 중에서 도어벨의 어드레스가 나타내는 서브미션 큐(311)를 접근할 수 있다.
S305 단계에서, 호스트(310)는 요청을 수신하고 서브미션 큐(311)의 명령을 FPGA(320)로 전송할 수 있다(①). FPGA(320)는 호스트(310)로부터 FPGA(320)로 서브미션 큐(311)의 명령이 전송된 이후에 스위치 레이턴시가 경과하면 호스트(310)로부터 서브미션 큐(311)의 명령을 수신할 수 있다(①). S310 단계에서, FPGA(320)는 서브미션 큐(311)의 명령을 저장 장치(330)로 전송할 수 있다. 저장 장치(330)의 DMA 엔진(332)은 FPGA(320)로부터 저장 장치(330)로 서브미션 큐(311)의 명령이 전송된 이후에 스위치 레이턴시가 경과하면 서브미션 큐(311)의 명령을 수신할 수 있다(①). 즉, 저장 장치(330)는 서브미션 큐(311)의 명령을 페치(fetch)할 수 있다. S315 단계에서, 컨트롤러(331)는 서브미션 큐(311)의 명령이 읽기 명령인지 여부를 확인할 수 있다.
서브미션 큐(311)의 명령이 읽기 명령이면(Y), S320 단계에서, DMA 엔진(332)은 S310 단계의 명령에 기초하여 읽기 명령에 의해 요청된 데이터를 FPGA(320)로 전송할 수 있다(②). FPGA(320)는 저장 장치(330)로부터 FPGA(320)로 데이터가 전송된 이후에 스위치 레이턴시가 경과하면 데이터를 데이터 버퍼(321)에 저장할 수 있다. S325 단계에서, 가속기(322)는 데이터 버퍼(321)에 저장된 데이터에 대한 계산을 실행할 수 있다. 예를 들어, 호스트(310)는 가속기(322)에 의해 실행될 계산의 종류를 사전에 FPGA(320)로 요청할 수 있다. 다른 예를 들어, 가속기(322)에 의해 실행될 계산의 종류는 사전에 결정 및 고정될 수 있다.
서브미션 큐(311)의 명령이 읽기 명령이 아니면(N), S330 단계에서, 컨트롤러(331)는 명령을 처리할 수 있다. 예를 들어, 서브미션 큐(311)의 명령이 쓰기 명령이면, DMA 엔진(332)은 호스트(310)의 데이터 버퍼(313)에 저장된 데이터를 FPGA(320)를 통해 수신할 수 있고 그리고 컨트롤러(331)는 데이터를 불휘발성 메모리(339)에 저장할 수 있다. 유사하게, 컨트롤러(331)는 S310 단계의 명령에 상응하는 동작들을 수행할 수 있다.
컨트롤러(331)는 S320 단계 또는 S330 단계에서 S310 단계의 명령을 처리할 수 있다. S330 단계에서 DMA 엔진(332)은 S310 단계의 명령에 기초하여 명령에 관한 컴플리션 정보를 FPGA(320)로 전송할 수 있다(②). FPGA(320)는 저장 장치(330)로부터 FPGA(320)로 컴플리션 정보가 전송된 이후에 스위치 레이턴시가 경과하면 컴플리션 정보를 컴플리션 큐 버퍼(323)에 저장할 수 있다(②). 전술한 컴퓨팅 시스템(200)과 달리, 컴퓨팅 시스템(300)의 FPGA(320)는 컴플리션 큐 버퍼(323)를 포함하거나 지원할 수 있다. 따라서, 저장 장치(330)는 S320 단계 또는 S330 단계에서 S310 단계의 명령에 대한 처리를 완료한 이후에 가속기(322)의 데이터에 대한 계산이 완료되기 전에 컴플리션 정보를 FPGA(320)로 전송할 수 있다(②). 예를 들어, S310 단계의 명령이 읽기 명령이면, DMA 엔진(332)은 S320 단계에서 데이터를 FPGA(320)로 전송하고(②) 그 다음 컴플리션 정보를 FPGA(320)로 전송할 수 있다(②). DMA 엔진(332)은 FPGA(320)의 동작(예를 들어, 가속기(322)에 의해 실행되는 계산)과 관계없이 S310 단계의 명령을 처리하였는지 여부에만 따라 컴플리션 정보를 FPGA(320)로 전송할 수 있다. 따라서, 저장 장치(230)에 비해, 저장 장치(330)는 컴플리션 정보를 조기에(early) 전송할 수 있다(②). 저장 장치(330)는 저장 장치(230)와 달리 가속기(322)에 의해 실행된 계산이 완료되었음을 나타내는 신호를 수신하지 않고도 컴플리션 정보를 FPGA(320)로 전송할 수 있다(②).
S345 단계에서 가속기(322)에 의해 실행되는 계산이 완료되지 않으면(N), FPGA(320)는 가속기(322)에 의해 실행되는 계산이 완료될 때까지 대기할 수 있다. S345 단계에서 가속기(322)에 의해 실행되는 계산이 완료되면(Y), S350 단계에서, FPGA(320)는 데이터를 호스트(310)로 전송할 수 있다(③). 호스트(310)는 FPGA(320)로부터 호스트(310)로 데이터가 전송된 이후에 스위치 레이턴시가 경과하면 데이터를 수신하고 데이터를 데이터 버퍼(313)에 저장할 수 있다(③). 여기서, 데이터는 가속기(322)에 의해 생성된 계산된 데이터이거나 저장 장치(330)로부터 독출된 읽기 데이터 중 어느 하나일 수 있다. 다른 예를 들어, FPGA(320)는 가속기(322)에 의해 생성된 계산된 데이터와 저장 장치(330)로부터 독출된 읽기 데이터를 모두 호스트(310)로 전송할 수도 있다.
가속기(322)는 계산을 완료하고 컴플리션 큐 버퍼(323)를 제어할 수 있다(④). 가속기(322)는 FPGA(320)의 온-칩 메모리 상에 위치하는 컴플리션 큐 버퍼(323)의 주소 및 명령의 식별자(ID)를 참조하여 컴플리션 큐 버퍼(323)를 접근할 수 있다. 저장 장치(330)로부터 전송되는 컴플리션 정보는 명령의 식별자를 포함할 수 있다. 예를 들어, 명령의 식별자는 명령이 서브미션 큐(311)로 제출될 때 호스트(310)에 의해 할당될 수 있다. FPGA(320)는 가속기(322)의 계산이 완료되었음을 나타내는 신호를 저장 장치(330)로 전송하지 않을 수 있다. S355 단계에서, FPGA(320)는 컴플리션 큐 버퍼(323)에 저장된 컴플리션 정보를 호스트(310)로 전송할 수 있다(⑤). 예를 들어, FPGA(320)는 가속기(322)에 의해 실행되는 계산이 완료되면 컴플리션 큐 버퍼(323)에 저장된 컴플리션 정보를 호스트(310)로 전송할 수 있다. 호스트(310)는 FPGA(320)로부터 호스트(310)로 컴플리션 정보가 전송된 이후에 스위치 레이턴시가 경과하면 컴플리션 정보를 수신하고 컴플리션 정보를 컴플리션 큐(312)에 저장할 수 있다(⑤).
실시 예에 있어서, DMA 엔진(332)은 S320 단계 또는 S330 단계를 수행하고 그 다음 S335 단계를 수행할 수 있다. 유사하게, FPGA(320)는 S350 단계를 수행하고 그 다음 S355 단계를 수행할 수 있다. S325 단계, S335 단계, 및 S340 단계들의 순서는 도 7에서 도시된 것으로 한정되지 않는다. 예를 들어, 가속기(322)가 데이터에 대한 계산을 실행하는 동안 DMA 엔진(332)은 명령에 대한 컴플리션 정보를 FPGA(320)로 전송할 수 있다. 컴플리션 큐 버퍼(323)는 가속기(322)가 데이터에 대한 계산을 실행하는 동안 명령에 대한 컴플리션 정보를 저장할 수 있다.
실시 예에 있어서, FPGA(320)의 구성 요소들(321~323)은 하드웨어 방식, 소프트웨어 방식, 또는 그것들의 조합으로 구현될 수 있다. 하드웨어 방식을 이용하는 경우, 구성 요소들(321~323)은 레지스터, 래치(latch), 플립-플롭, 로직 회로, 로직 게이트 등을 이용하여 다양한 방식으로 구현될 수 있다. 데이터 버퍼(321) 및 컴플리션 큐 버퍼(323)는 FPGA(320)에 포함된 온-칩 메모리 상에서 할당된 영역들에 대응할 수 있다. 실시 예에 있어서, 컨트롤러(331)도 하드웨어 방식, 소프트웨어 방식, 또는 그것들의 조합으로 구현될 수 있다.
도 8은 도 1의 컴퓨팅 시스템의 블록도를 예시적으로 도시한다. 도 9는 도 8의 컴퓨팅 시스템의 동작 타이밍을 예시적으로 도시한다. 도 10은 도 8의 컴퓨팅 시스템의 동작 방법을 예시적으로 도시한다.
컴퓨팅 시스템(400)은 호스트(410), FPGA(420), 및 저장 장치(430)를 포함할 수 있다. 호스트(410)는 서브미션 큐(411), 컴플리션 큐(412), 및 데이터 버퍼(413)를 포함할 수 있다. 호스트(410)의 구성 요소들(411~313)은 호스트(310)의 구성 요소들(311~313)과 각각 유사할 수 있다. FPGA(320)는 데이터 버퍼(421), 가속기(422), 및 컴플리션 큐 버퍼(423)를 포함할 수 있다. FPGA(420)의 구성 요소들(421~423)은 FPGA(320)의 구성 요소들(321~323)과 각각 유사할 수 있다. 저장 장치(430)는 컨트롤러(431) 및 불휘발성 메모리(439)를 포함할 수 있다. 컨트롤러(431)는 DMA 엔진(432)을 포함할 수 있다. 저장 장치(430)의 구성 요소들(431, 432, 439)은 저장 장치(330)의 구성 요소들(331, 332, 339)과 각각 유사할 수 있다. 컴퓨팅 시스템(400)과 컴퓨팅 시스템(300) 간의 차이점이 주로 설명될 것이다.
호스트(410)는 저장 장치(430)에 대한 명령을 서브미션 큐(411)에 기입하거나 저장할 수 있다. 호스트(410)는 서브미션 큐(411)에 대한 도어벨을 FPGA(420)로 전송할 수 있고 FPGA(420)는 도어벨을 수신할 수 있다. FPGA(420)는 도어벨을 저장 장치(430)로 전송할 수 있다. 저장 장치(430)는 도어벨에 기초하여 호스트(410)의 서브미션 큐(411)의 명령을 요청할 수 있고 요청을 FPGA(420)로 전송할 수 있다. FPGA(420)는 요청을 호스트(410)로 전송할 수 있다. 예를 들어, 저장 장치(430)는 호스트(410)의 하나 이상의 서브미션 큐들 중에서 도어벨의 어드레스가 나타내는 서브미션 큐(411)를 접근할 수 있다.
S405 단계에서, 호스트(410)는 요청을 수신하고 서브미션 큐(411)의 명령을 FPGA(420)로 전송할 수 있다(①). FPGA(420)는 호스트(410)로부터 FPGA(420)로 서브미션 큐(411)의 명령이 전송된 이후에 스위치 레이턴시가 경과하면 호스트(410)로부터 서브미션 큐(411)의 명령을 수신할 수 있다(①). S410 단계에서, FPGA(420)는 서브미션 큐(411)의 명령을 저장 장치(430)로 전송할 수 있다. 저장 장치(430)의 DMA 엔진(432)은 FPGA(420)로부터 저장 장치(430)로 서브미션 큐(411)의 명령이 전송된 이후에 스위치 레이턴시가 경과하면 서브미션 큐(411)의 명령을 수신할 수 있다(①). S415 단계에서, 컨트롤러(431)는 서브미션 큐(411)의 명령이 쓰기 명령인지 여부를 확인할 수 있다.
서브미션 큐(411)의 명령이 쓰기 명령이면(Y), S420 단계에서, DMA 엔진(432)은 쓰기 명령에 기초하여 데이터 요청을 FPGA(420)로 전송할 수 있다(②). FPGA(420)는 저장 장치(430)로부터 FPGA(420)로 데이터 요청이 전송된 이후에 스위치 레이턴시가 경과하면 데이터 요청을 수신할 수 있다(②). S425 단계에서, FPGA(420)는 데이터 요청을 호스트(410)로 전송할 수 있다(②). 호스트(410)는 FPGA(420)로부터 호스트(410)로 데이터 요청이 전송된 이후에 스위치 레이턴시가 경과하면 데이터 요청을 수신할 수 있다(②). S430 단계에서, 호스트(410)는 데이터 요청에 기초하여 데이터 버퍼(413)의 쓰기 데이터를 FPGA(420)로 전송할 수 있다(③). FPGA(420)는 호스트(410)로부터 FPGA(420)로 쓰기 데이터가 전송된 이후에 스위치 레이턴시가 경과하면 쓰기 데이터를 수신하고 쓰기 데이터를 데이터 버퍼(421)에 저장할 수 있다.
S435 단계에서, 가속기(422)는 데이터 버퍼(421)에 저장된 데이터에 대한 계산을 실행할 수 있다. 예를 들어, 호스트(410)는 가속기(422)에 의해 실행될 계산의 종류를 사전에 FPGA(420)로 요청할 수 있다. 다른 예를 들어, 가속기(422)에 의해 실행될 계산의 종류는 사전에 결정 및 고정될 수 있다. 가속기(422)는 계산을 완료하고 컴플리션 큐 버퍼(423)를 제어할 수 있다. 가속기(422)는 FPGA(420)의 온-칩 메모리 상에 위치하는 컴플리션 큐 버퍼(423)의 주소 및 명령의 식별자(ID)를 참조하여 컴플리션 큐 버퍼(423)를 접근할 수 있다. 저장 장치(430)로부터 전송되는 컴플리션 정보는 명령의 식별자를 포함할 수 있다. 명령의 식별자는 명령이 서브미션 큐(411)로 제출될 때 호스트(410)에 의해 할당될 수 있다. S440 단계에서 가속기(422)에 의해 실행되는 계산이 완료되지 않으면(N), FPGA(420)는 가속기(422)에 의해 실행되는 계산이 완료될 때까지 대기할 수 있다. S440 단계에서 가속기(422)에 의해 실행되는 계산이 완료되면(Y), S445 단계에서 FPGA(420)는 가속기(422)에 의해 생성된 계산된 데이터 및 쓰기 데이터 중 하나를 저장 장치(430)로 전송할 수 있다(④). DMA 엔진(432)은 FPGA(420)로부터 저장 장치(430)로 계산된 데이터 및 쓰기 데이터 중 하나가 전송된 이후에 스위치 레이턴시가 경과하면 계산된 데이터 및 쓰기 데이터 중 하나를 수신할 수 있다(④).
서브미션 큐(411)의 명령이 쓰기 명령이 아니면(N), 쓰기 명령에 관한 S420 내지 S445 단계들 없이, S450 단계에서, 컨트롤러(431)는 명령을 처리할 수 있다. 컨트롤러(431)는 S310 단계의 명령에 상응하는 동작들을 수행할 수 있다. 전술한 바와 같이 서브미션 큐(411)의 명령이 쓰기 명령이면, DMA 엔진(432)은 호스트(410)의 데이터 버퍼(413)에 저장된 데이터를 FPGA(420)를 통해 수신할 수 있고 그리고 컨트롤러(431)는 데이터를 저장 장치(430) 내부(예를 들어, 온-칩 메모리(631_2 참조), 메모리 버퍼(638 참조), 불휘발성 메모리(439) 등)에 저장할 수 있다.
컨트롤러(431)는 S450 단계에서 S410 단계의 명령을 처리할 수 있다. S455 단계에서 DMA 엔진(432)은 명령에 관한 컴플리션 정보를 FPGA(420)로 전송할 수 있다(⑤). FPGA(420)는 저장 장치(430)로부터 FPGA(420)로 컴플리션 정보가 전송된 이후에 스위치 레이턴시가 경과하면 컴플리션 정보를 수신할 수 있고 컴플리션 정보를 컴플리션 큐 버퍼(423)에 저장할 수 있다(⑤). S460 단계에서, FPGA(420)는 컴플리션 큐 버퍼(423)에 저장된 컴플리션 정보를 호스트(410)로 전송할 수 있다. 호스트(410)는 FPGA(420)로부터 호스트(410)로 컴플리션 정보가 전송된 이후에 스위치 레이턴시가 경과하면 컴플리션 정보를 수신하고 컴플리션 정보를 컴플리션 큐(412)에 저장할 수 있다(⑤).
실시 예에 있어서, FPGA(420)의 구성 요소들(421~423)은 하드웨어 방식, 소프트웨어 방식, 또는 그것들의 조합으로 구현될 수 있다. 하드웨어 방식을 이용하는 경우, 구성 요소들(421~423)은 레지스터, 래치(latch), 플립-플롭, 로직 회로, 로직 게이트 등을 이용하여 다양한 방식으로 구현될 수 있다. 데이터 버퍼(421) 및 컴플리션 큐 버퍼(423)는 FPGA(420)에 포함된 온-칩 메모리 상에서 할당된 영역들에 대응할 수 있다. 실시 예에 있어서, 컨트롤러(431)도 하드웨어 방식, 소프트웨어 방식, 또는 그것들의 조합으로 구현될 수 있다.
도 11은 도 3 내지 도 10에서 전술한 FPGA들 중 어느 하나의 블록도를 예시적으로 도시한다. FPGA(520)는 FPGA들(220~420) 중 어느 하나일 수 있다. FPGA(520)는 온-칩 메모리(521), 가속기(522), 및 인터페이스 회로(524)를 포함할 수 있다.
온-칩 메모리(521)는 래치, 레지스터, SRAM, DRAM, TRAM, TCM(Tightly Coupled Memory) 등을 포함할 수 있다. 온-칩 메모리(521)는 도 3 내지 도 10에서 전술한 데이터 버퍼(221/321/421) 및 컴플리션 큐 버퍼(323/423)를 포함할 수 있다. 데이터 버퍼(221/321/421) 및 컴플리션 큐 버퍼(323/423)의 영역들이 온-칩 메모리(521)에 할당될 수 있다.
가속기(522)는 온-칩 메모리(521)의 데이터 버퍼에 저장된 데이터에 대한 계산을 실행할 수 있다. 가속기(522)는 전술한 가속기(222/322/422)에 해당할 수 있다. 가속기(522)는 ALU(Arithmetic Logic Unit), FPU(Floating Point Unit), 레지스터, 래치(latch), 플립-플롭, 로직 회로, 로직 게이트 등을 포함할 수 있고 다양한 계산 동작을 실행할 수 있다.
인터페이스 회로(524)는 인터페이스 규약에 따라 외부(예를 들어, 호스트(11/210/310/410), 루트 컴플렉스(120), 전자 장치들(141, 151, 153, 161, 162), 저장 장치들(230~430) 등; 도 2 내지 도 10 참조)와 통신을 수행할 수 있다. 예를 들어, 인터페이스 회로(524)는 도 2에서 전술한 다운스트림 포트(DP)와 업스트림 포트(UP)에 각각 연결될 수 있다. 예를 들어, 인터페이스 규약은 USB, SCSI, PCIe, M-PCIe, NVMe, ATA, PATA, SATA, SAS, IDE, UFS, Firewire 등일 수 있다. 인터페이스 회로(524)는 호스트(210/310/410)로부터 데이터를 수신하고 수신된 데이터 또는 가속기(522)에 의해 생성된 계산된 데이터를 저장 장치(230/330/430)로 전송할 수 있다. 인터페이스 회로(524)는 저장 장치(230/330/430)로부터 데이터를 수신하고 수신된 데이터와 가속기(522)에 의해 생성된 계산된 데이터 중 하나를 호스트(210/310/410)로 전송할 수 있다. 좀 더 구체적으로, 인터페이스 회로(524)는 DMA 엔진(332)으로부터 데이터를 수신하고 그 다음 DMA 엔진(332)으로부터 컴플리션 정보를 수신할 수 있고, 데이터와 컴플리션 정보를 온-칩 메모리(521)의 데이터 버퍼와 컴플리션 큐 버퍼로 각각 제공할 수 있다. 예를 들어, 인터페이스 회로(524)는 가속기(522)에 의해 생성된 데이터와 DMA 엔진(332)으로부터 수신한 데이터 중 하나를 호스트(310)로 전송할 수 있고 그 다음 온-칩 메모리(521)의 컴플리션 큐 버퍼에 저장된 컴플리션 정보를 호스트(310)로 전송할 수 있다(도 7의 S350 단계 및 S355 단계 참조). 좀 더 구체적으로, 인터페이스 회로(524)는 가속기(522)에 의해 실행되는 계산이 완료되면, 온-칩 메모리(521)의 컴플리션 큐 버퍼에 저장된 컴플리션 정보를 호스트(310)로 전송할 수 있다.
도 12는 도 3 내지 도 10에서 전술한 저장 장치들 중 어느 하나의 블록도를 예시적으로 도시한다. 저장 장치(630)는 저장 장치들(230~430) 중 어느 하나일 수 있다. 저장 장치(630)는 컨트롤러(631), 메모리 버퍼(638), 및 불휘발성 메모리들(639)을 포함할 수 있다.
컨트롤러(631)는 SoC, ASIC, FPGA 등으로 구현될 수 있다. 컨트롤러(631)는 프로세서(631_1), 온-칩 메모리(631_2), 불휘발성 메모리 인터페이스 회로(631_3), 외부 인터페이스 회로(631_4), DMA 엔진(631_5), 및 버퍼 인터페이스 회로(631_6)를 포함할 수 있다. 프로세서(631_1)는 컨트롤러(631)의 구성 요소들(631_2~831_6)을 제어할 수 있다. 프로세서(631_1)는 적어도 하나 이상의 코어들(예를 들어, 동종 멀티-코어 또는 이종 멀티-코어)과 내부 캐시 메모리를 포함할 수 있다. 프로세서(631_1)는 온-칩 메모리(631_2) 또는 메모리 버퍼(638)에 로드된 프로그램 코드, 소프트웨어, 어플리케이션 프로그램 등을 실행할 수 있다.
온-칩 메모리(631_2)는 래치, 레지스터, SRAM, DRAM, TRAM, TCM 등을 포함할 수 있다. 온-칩 메모리(631_2)에는 HIL(Host Interface Layer), FTL(Flash Translation layer), FIL(Flash Interface Layer) 등의 펌웨어 혹은 소프트웨어가 로드될 수 있다. HIL은 외부로부터의 입출력(I/O) 명령을 관리할 수 있다. FTL은 외부로부터 제공되는 논리 어드레스와 불휘발성 메모리들(639)의 물리 어드레스 간의 맵핑을 관리할 수 있다. FTL은 상술한 어드레스 맵핑 이외에도 가비지 컬렉션(Garbage Collection), 웨어 레벨링(Wear Leveling) 등을 더 수행할 수 있다. FIL은 불휘발성 메모리(639)에 대한 쓰기 동작 및 읽기 동작을 관리할 수 있다.
불휘발성 메모리 인터페이스 회로(631_3)는 Toggle DDR(Double Data Rate) 등과 같은 인터페이스 규약에 따라 불휘발성 메모리들(639)과 통신할 수 있다. 불휘발성 메모리 인터페이스 회로(631_3)는 채널(CH1)을 통해 하나 이상의 불휘발성 메모리들(639)과 통신할 수 있고 채널(CHn; n은 2 이상의 정수)을 통해 하나 이상의 불휘발성 메모리들(639)과 통신할 수 있다. 컨트롤러(631)와 불휘발성 메모리들(639) 간의 채널들(CH1~CHn)의 개수는 하나 이상일 수 있고, 하나의 채널에 할당된 불휘발성 메모리들(639)의 개수는 하나 이상일 수 있고, 그리고 불휘발성 메모리들(639) 각각은 도 3 내지 도 10에서 전술한 불휘발성 메모리들(239~439) 중 어느 하나일 수 있다. 불휘발성 메모리 인터페이스 회로(631_3)는 프로세서(631_1)의 제어에 기초하여 외부(예를 들어, 호스트(11), 루트 컴플렉스(120), 전자 장치들(141, 151, 153, 161, 162), FPGA들(220~420) 등; 도 2 내지 도 10 참조)로부터 전송되는 쓰기 데이터를 불휘발성 메모리들(639)로 전송할 수 있고, 쓰기 데이터는 불휘발성 메모리들(639)에 저장될 수 있다. 불휘발성 메모리 인터페이스 회로(631_3)는 프로세서(631_1)의 제어에 기초하여 불휘발성 메모리들(639)로부터 전송되는 읽기 데이터를 수신할 수 있다.
외부 인터페이스 회로(631_4)는 인터페이스 규약에 따라 외부(예를 들어, 호스트(11), 루트 컴플렉스(120), 전자 장치들(141, 151, 153, 161, 162), FPGA들(220~420) 등; 도 2 내지 도 10 참조)와 통신을 수행할 수 있다. 예를 들어, 인터페이스 규약은 USB, SCSI, PCIe, M-PCIe, NVMe, ATA, PATA, SATA, SAS, IDE, UFS, Firewire 등일 수 있다. 예를 들어, 외부 인터페이스 회로(631_4)는 도 2에서 전술한 엔드 포인트 포트(EP)에 연결될 수 있다.
DMA 엔진(631_5)은 프로세서(631_1)의 제어에 기초하여 외부(예를 들어, 호스트(11), 루트 컴플렉스(120), 전자 장치들(141, 151, 153, 161, 162), FPGA들(220~420) 등; 도 2 내지 도 10 참조)의 다양한 메모리 버퍼들(130, HMB, 211~213, 311~313, 321, 323, 411~413, 421, 423)을 직접적으로 접근할 수 있다. 예를 들어, DMA 엔진(631_5)은 상술한 메모리 버퍼들 중 어느 하나를 접근하고, 명령을 수신할 수 있고, 쓰기 데이터를 수신할 수 있고, 그리고 저장 장치(630)의 읽기 데이터를 전송할 수 있다. DMA 엔진(631_5)은 저장 장치(630)의 온-칩 메모리(631_2) 및 메모리 버퍼(638)를 접근할 수 있고 이들과 데이터를 교환할 수 있다.
버퍼 인터페이스 회로(631_6)는 DDR 표준과 같은 인터페이스 규약에 따라 메모리 버퍼(638)와 통신할 수 있다. 버퍼 인터페이스 회로(631_6)는 프로세서(631_1)의 제어에 기초하여 메모리 버퍼(638)와 데이터를 교환할 수 있다. 메모리 버퍼(638)는 래치, 레지스터, SRAM, DRAM, TRAM, TCM 등을 포함할 수 있다. 예를 들어, 메모리 버퍼(638)는 컨트롤러(631)의 외부에 그리고 저장 장치(630)의 내부에 위치할 수 있다. 다른 예를 들어, 메모리 버퍼(638)는 저장 장치(630)에 포함되지 않을 수도 있다. 프로세서(631_1)는 메모리 버퍼(638)가 저장 장치(630)에 포함되면, 온-칩 메모리(631_2)뿐만 아니라 메모리 버퍼(638)도 캐시 메모리로서 이용할 수 있다. 실시 예에 있어서, 컨트롤러(631)는 도 7 및 도 10에서 전술한 저장 장치들(330, 430)에 관한 S315, S320, S330, S335, S415, S420, S450, S455 단계들을 수행할 수 있다.
도 13은 본 발명의 적용 예에 따른 컴퓨팅 장치의 블록도를 예시적으로 도시한다. 도 1 내지 도 10에서 전술한 컴퓨팅 시스템들(10, 100~400)에서 설명된 본 발명의 다양한 실시 예들은 컴퓨팅 장치(1000)로 적용될 수 있다. 컴퓨팅 장치(1000)는 메인 프로세서(1100), 메모리(1200), 유저 인터페이스(1300), 저장 장치(1400), 통신 블록(1500), 및 그래픽 프로세서(1600)를 포함할 수 있다. 예를 들어, 컴퓨팅 장치(1000)는 모바일 장치로도 지칭될 수 있다.
메인 프로세서(1100)는 컴퓨팅 장치(1000)의 전반적인 동작들을 제어할 수 있다. 메인 프로세서(1100)는 다양한 종류의 산술 연산들 또는 논리 연산들을 처리하도록 구성될 수 있다. 메인 프로세서(1100)는 하나 이상의 프로세서 코어들을 포함하는 전용 논리 회로, FPGA, ASIC, SoC 등으로 구현될 수 있다. 메인 프로세서(1100)는 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서를 포함할 수 있다. 예를 들어, 전술한 호스트들(11, 210~410)과 프로세서(110) 각각은 메인 프로세서(1100)에 해당할 수 있다.
메모리(1200)는 컴퓨팅 장치(1000)의 동작에 이용되는 데이터를 일시적으로 저장할 수 있다. 메모리(1200)는 메인 프로세서(1100)에 의해 처리된 또는 처리될 데이터를 저장할 수 있다. 예를 들어, 전술한 메모리(130)는 메모리(1200)에 해당할 수 있다.
유저 인터페이스(1300)는 메인 프로세서(1100)의 제어에 따라, 사용자와 컴퓨팅 장치(1000) 사이의 통신을 중재할 수 있다. 예를 들어, 유저 인터페이스(1300)는 키보드, 마우스, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서 등으로부터의 입력을 처리할 수 있다. 나아가, 유저 인터페이스(1300)는 디스플레이 장치, 스피커, 모터 등으로의 출력을 처리할 수 있다.
저장 장치(1400)는 전력 공급에 관계없이 데이터를 저장할 수 있는 저장 매체를 포함할 수 있다. 예를 들어, 저장 장치(1400)는 도 1 내지 도 10에서 전술한 전자 장치들(12, 13, 141, 142, 151~154, 161~163), FPGA들(220~420), 또는 저장 장치들(230~430) 중 어느 하나일 수 있다. 저장 장치(1400)는 중간 장치로서 저장 장치(1400)에 연결된 다른 중간 장치 또는 다른 종단 장치가 컴퓨팅 장치(1000)에 더 포함될 수도 있다.
통신 블록(1500)은 메인 프로세서(1100)의 제어에 따라, 컴퓨팅 장치(1000)의 외부 장치/시스템과 통신할 수 있다. 예를 들어, 통신 블록(1500)은 이더넷(Ethernet), TCP/IP(Transfer Control Protocol/Internet Protocol), USB(Universal Serial Bus), Firewire 등과 같은 다양한 유선 통신 규약 중 적어도 하나, 또는 LTE(Long Term Evolution), WiMax(Worldwide Interoperability for Microwave Access), GSM(Global System for Mobile communications), CDMA(Code Division Multiple Access), Bluetooth, NFC(Near Field Communication), WiFi(Wireless Fidelity), RFID(Radio Frequency Identification) 등의 다양한 무선 통신 규약 중 적어도 하나에 따라 컴퓨팅 장치(1000)의 외부 장치/시스템과 통신할 수 있다.
그래픽 프로세서(1600)는 복수의 프로세서 코어(예컨대, GPU(Graphic Processing Unit)들)을 포함할 수 있다. 그래픽 프로세서(1600)에 포함되는 프로세서 코어들은 그래픽 데이터를 병렬로 빠르게 처리할 수 있다. 예를 들어, 그래픽 프로세서(1600)는 프로세서 코어들을 이용하여, 픽셀 셰이더(Pixel Shader), 슈퍼 샘플링(Super-sampling), 색 공간 변환(Color Space Transform) 등과 같은 다양한 그래픽 연산을 처리할 수 있다.
메인 프로세서(1100), 메모리(1200), 유저 인터페이스(1300), 저장 장치(1400), 통신 블록(1500), 및 그래픽 프로세서(1600) 각각은 회로 레벨, 칩 레벨, 또는 패키지 레벨의 장치로 구현될 수 있고, 컴퓨팅 장치(1000)에 장착될 수 있다. 또는, 메인 프로세서(1100), 메모리(1200), 유저 인터페이스(1300), 저장 장치(1400), 통신 블록(1500), 및 그래픽 프로세서(1600) 각각은 독립적인 전자 장치로 구현될 수 있고, 컴퓨팅 장치(1000) 내에 조립될 수 있다. 장착된 또는 조립된 구성 요소들은 버스(1700)를 통해 서로 연결될 수 있다.
버스(1700)는 컴퓨팅 장치(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 컴퓨팅 장치(1000)의 구성 요소들은 버스(1700)의 버스 포맷에 기초하여 서로 데이터를 교환할 수 있다. 예를 들어, 버스 포맷은 PCIe, NVMe, SCSI, ATA, SATA, PATA, SAS, UFS 등과 같은 다양한 통신 규약 중 하나 이상을 포함할 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 쉽게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 상술한 실시 예들을 이용하여 앞으로 쉽게 변형하여 실시할 수 있는 기술들도 포함될 것이다.

Claims (20)

  1. 호스트;
    메모리 및 가속기를 포함하는 제 1 전자 장치; 및
    상기 호스트로부터 상기 제 1 전자 장치를 통해 전송되는 명령에 기초하여 데이터 및 상기 명령의 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 DMA(Direct Memory Access) 엔진을 포함하는 제 2 전자 장치를 포함하되,
    상기 메모리는 상기 데이터를 저장하는 데이터 버퍼 및 상기 컴플리션 정보를 저장하는 컴플리션 큐 버퍼를 포함하고,
    상기 가속기는 상기 데이터에 대한 계산을 실행하고, 그리고
    상기 DMA 엔진은 상기 데이터를 상기 제 1 전자 장치로 전송하고 그 다음 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
  2. 제 1 항에 있어서,
    상기 제 1 전자 장치는 FPGA(Field Programmable Gate Array)이고; 그리고
    상기 제 2 전자 장치는 NVMe(Non Volatile Memory Express) 장치인 컴퓨팅 시스템.
  3. 제 1 항에 있어서,
    상기 DMA 엔진은 상기 가속기에 의해 실행되는 상기 계산이 완료되기 전에 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
  4. 제 1 항에 있어서,
    상기 제 1 전자 장치는 상기 가속기에 의해 생성되는 계산된 데이터와 상기 데이터 중 하나를 상기 호스트로 전송하고 그 다음 상기 컴플리션 큐 버퍼에 저장된 상기 컴플리션 정보를 상기 호스트로 전송하는 인터페이스 회로를 더 포함하는 컴퓨팅 시스템.
  5. 제 4 항에 있어서,
    상기 인터페이스 회로는 상기 제 2 전자 장치로부터 상기 데이터를 수신하고 그 다음 상기 제 2 전자 장치로부터 상기 컴플리션 정보를 수신하고 그리고 상기 데이터와 상기 컴플리션 정보를 상기 데이터 버퍼와 상기 컴플리션 큐 버퍼로 각각 제공하는 컴퓨팅 시스템.
  6. 제 1 항에 있어서,
    상기 가속기는 상기 메모리 상에 위치하는 상기 컴플리션 큐 버퍼의 주소 및 상기 명령의 식별자를 참조하여 상기 컴플리션 큐 버퍼를 접근하는 컴퓨팅 시스템.
  7. 제 6 항에 있어서,
    상기 컴플리션 정보는 상기 명령의 상기 식별자를 포함하는 컴퓨팅 시스템.
  8. 제 1 항에 있어서,
    상기 컴플리션 큐 버퍼는 상기 가속기가 상기 데이터에 대한 상기 계산을 실행하는 동안 상기 명령에 대한 상기 컴플리션 정보를 저장하는 컴퓨팅 시스템.
  9. 호스트;
    상기 호스트와 통신하는 제 1 전자 장치; 및
    상기 제 1 전자 장치를 통해 상기 호스트와 통신하는 제 2 전자 장치를 포함하되,
    상기 제 1 전자 장치는:
    상기 호스트로부터 상기 제 1 전자 장치를 통해 명령을 수신하는 상기 제 2 전자 장치로부터 데이터를 수신하는 데이터 버퍼 및 상기 제 2 전자 장치로부터 상기 명령에 대한 컴플리션 정보를 수신하는 컴플리션 큐 버퍼를 포함하는 메모리;
    상기 메모리에 저장된 상기 데이터에 대한 계산을 실행하는 가속기; 및
    상기 가속기에 의해 실행되는 상기 계산이 완료되면 상기 컴플리션 큐 버퍼에 저장된 상기 컴플리션 정보를 상기 호스트로 전송하는 인터페이스 회로를 포함하는 컴퓨팅 시스템.
  10. 제 9 항에 있어서,
    상기 제 2 전자 장치는 상기 명령을 페치하고 그리고 상기 명령에 기초하여 상기 데이터 및 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 DMA 엔진을 포함하는 컴퓨팅 시스템.
  11. 제 10 항에 있어서,
    상기 가속기는 상기 메모리 상에 위치하는 상기 컴플리션 큐 버퍼의 주소 및 상기 명령의 식별자를 참조하여 상기 컴플리션 큐 버퍼를 접근하는 컴퓨팅 시스템.
  12. 제 11 항에 있어서,
    상기 컴플리션 정보는 상기 명령의 상기 식별자를 포함하는 컴퓨팅 시스템.
  13. 제 10 항에 있어서,
    상기 DMA 엔진은 상기 데이터를 상기 제 1 전자 장치로 전송하고 그 다음 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
  14. 제 10 항에 있어서,
    상기 DMA 엔진은 상기 가속기에 의해 실행되는 상기 계산이 완료되기 전에 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
  15. 제 9 항에 있어서,
    상기 인터페이스 회로는 상기 가속기에 의해 생성되는 계산된 데이터 및 상기 데이터 중 하나를 상기 호스트로 전송하고 그 다음 상기 컴플리션 큐 버퍼에 저장된 상기 컴플리션 정보를 상기 호스트로 전송하는 컴퓨팅 시스템.
  16. 명령이 기입되는 호스트 메모리 버퍼의 서브미션 큐 및 상기 명령에 대한 컴플리션 정보가 기입되는 상기 호스트 메모리 버퍼의 컴플리션 큐를 관리하는 호스트;
    상기 명령에 의해 요청된 데이터를 저장하는 데이터 버퍼와 상기 컴플리션 정보를 저장하는 컴플리션 큐 버퍼를 포함하는 메모리 그리고 상기 데이터에 대한 계산을 실행하는 가속기를 포함하는 제 1 전자 장치; 및
    상기 제 1 전자 장치를 통해 상기 명령을 페치하고 그리고 상기 명령에 기초하여 상기 데이터 및 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 제 2 전자 장치를 포함하는 컴퓨팅 시스템.
  17. 제 16 항에 있어서,
    상기 제 1 전자 장치는 상기 가속기에 의해 실행되는 상기 계산이 완료되면 상기 컴플리션 큐 버퍼에 저장된 상기 컴플리션 정보를 상기 호스트로 전송하는 컴퓨팅 시스템.
  18. 제 17 항에 있어서,
    상기 제 1 전자 장치는 상기 가속기에 의해 생성되는 계산된 데이터 및 상기 데이터 중 하나를 상기 호스트로 전송하고 그 다음 상기 컴플리션 큐 버퍼에 저장된 상기 컴플리션 정보를 상기 호스트로 전송하는 컴퓨팅 시스템.
  19. 제 16 항에 있어서,
    상기 제 2 전자 장치는 상기 데이터를 상기 제 1 전자 장치로 전송하고 그 다음 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
  20. 제 19 항에 있어서,
    상기 제 2 전자 장치는 상기 가속기에 의해 실행되는 상기 계산이 완료되기 전에 상기 컴플리션 정보를 상기 제 1 전자 장치로 전송하는 컴퓨팅 시스템.
KR1020200007182A 2020-01-20 2020-01-20 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템 KR20210094178A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020200007182A KR20210094178A (ko) 2020-01-20 2020-01-20 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템
US17/007,553 US11321254B2 (en) 2020-01-20 2020-08-31 Computing system for transmitting completion early between serially connected electronic devices
DE102020129033.0A DE102020129033A1 (de) 2020-01-20 2020-11-04 Rechensystem zur frühzeitigen übertragung der fertigstellung zwischen seriell verbundenen elektronischen vorrichtungen
CN202011284417.7A CN113138950A (zh) 2020-01-20 2020-11-17 在串联连接的电子装置之间提前发送完成的计算系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200007182A KR20210094178A (ko) 2020-01-20 2020-01-20 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템

Publications (1)

Publication Number Publication Date
KR20210094178A true KR20210094178A (ko) 2021-07-29

Family

ID=76809371

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200007182A KR20210094178A (ko) 2020-01-20 2020-01-20 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템

Country Status (3)

Country Link
US (1) US11321254B2 (ko)
KR (1) KR20210094178A (ko)
CN (1) CN113138950A (ko)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2511787B1 (en) * 2003-05-23 2017-09-20 IP Reservoir, LLC Data decompression and search using FPGA devices
US9264384B1 (en) * 2004-07-22 2016-02-16 Oracle International Corporation Resource virtualization mechanism including virtual host bus adapters
US8296337B2 (en) * 2006-12-06 2012-10-23 Fusion-Io, Inc. Apparatus, system, and method for managing data from a requesting device with an empty data token directive
US8677028B2 (en) 2010-08-23 2014-03-18 Qualcomm Incorporated Interrupt-based command processing
CN104025045B (zh) * 2011-11-04 2017-07-04 学校法人早稻田大学 处理器系统及加速器
US9304690B2 (en) 2014-05-07 2016-04-05 HGST Netherlands B.V. System and method for peer-to-peer PCIe storage transfers
US10817446B1 (en) * 2015-04-30 2020-10-27 Mobiveil, Inc. Optimized multiport NVMe controller for multipath input/output applications
US10223314B2 (en) 2015-08-17 2019-03-05 Avago Technologies International Sales Pte. Limited PCI express connected network switch
US10275385B2 (en) * 2016-02-25 2019-04-30 SK Hynix Inc. Integrated circuit system
KR20180043451A (ko) 2016-10-19 2018-04-30 삼성전자주식회사 컴퓨팅 시스템 및 그것의 동작 방법
KR20180045103A (ko) 2016-10-24 2018-05-04 삼성전자주식회사 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법
KR102493964B1 (ko) 2017-12-18 2023-02-01 삼성전자주식회사 스토리지 컨트롤러, 그것을 포함하는 스토리지 장치, 및 스토리지 컨트롤러의 동작 방법

Also Published As

Publication number Publication date
US20210224209A1 (en) 2021-07-22
US11321254B2 (en) 2022-05-03
CN113138950A (zh) 2021-07-20

Similar Documents

Publication Publication Date Title
CN110647480B (zh) 数据处理方法、远程直接访存网卡和设备
US10742737B2 (en) Storage device and electronic device including the same
EP2546757B1 (en) Flexible flash commands
US20210049114A1 (en) Computing system for reducing latency between serially connected electronic devices
US10572402B2 (en) Storage device communicating with host according to multicast communication protocol and communication method of host
US20210303189A1 (en) Storage device processing stream data, system including the same, and operation method
CN115495389B (zh) 存储控制器、计算存储装置以及计算存储装置的操作方法
WO2017173618A1 (zh) 压缩数据的方法、装置和设备
US11907718B2 (en) Loop execution in a reconfigurable compute fabric using flow controllers for respective synchronous flows
US11055220B2 (en) Hybrid memory systems with cache management
JP2009527815A5 (ko)
US10705993B2 (en) Programming and controlling compute units in an integrated circuit
US11775451B2 (en) Computing system for reducing latency between serially connected electronic devices
US10802828B1 (en) Instruction memory
US11698791B2 (en) On-demand programmable atomic kernel loading
US11853216B2 (en) High bandwidth gather cache
KR20210094178A (ko) 직렬로 연결된 전자 장치들 사이에서 컴플리션을 조기에 전송하기 위한 컴퓨팅 시스템
US20220121443A1 (en) Thread-based processor halting
CN107807888B (zh) 一种用于soc架构的数据预取系统及其方法
US11914516B1 (en) Memory side cache request handling
US20240028390A1 (en) Methods and systems for communications between hardware components
US20240028526A1 (en) Methods and systems for requesting atomic operations in a computing system
US20230055320A1 (en) Loop execution in a reconfigurable compute fabric.
CN106775663B (zh) 一种sys/bios系统下基于sil3132控制器的sata硬盘驱动方法
CN116501456A (zh) 用于利用一致性接口的队列管理的系统、方法和设备