KR20210052188A - 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법 - Google Patents

스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20210052188A
KR20210052188A KR1020200094791A KR20200094791A KR20210052188A KR 20210052188 A KR20210052188 A KR 20210052188A KR 1020200094791 A KR1020200094791 A KR 1020200094791A KR 20200094791 A KR20200094791 A KR 20200094791A KR 20210052188 A KR20210052188 A KR 20210052188A
Authority
KR
South Korea
Prior art keywords
array
elements
processing
processing device
memory
Prior art date
Application number
KR1020200094791A
Other languages
English (en)
Other versions
KR102663759B1 (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 KR20210052188A publication Critical patent/KR20210052188A/ko
Application granted granted Critical
Publication of KR102663759B1 publication Critical patent/KR102663759B1/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/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/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • 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
    • 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/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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/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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4265Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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/0625Power saving in storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • 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/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

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)
  • Advance Control (AREA)
  • Logic Circuits (AREA)

Abstract

본 발명은 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법에 관한 것으로, 본 발명의 실시 예에 따른 스토리지 시스템은 정렬 연산과 관련된 데이터 요소들의 배열을 저장하는 스토리지 장치, 상기 스토리지 장치 및 호스트 컴퓨터 간의 통신을 가능하게 하는 스토리지 인터페이스 및 상기 스토리지 장치에 통신 가능하게 연결된 재설정 처리 장치(reconfigurable processing device)를 포함하되, 상기 재설정 처리 장치는 상기 스토리지 장치로부터 리드(read)된, 상기 스토리지 장치에 저장된 상기 데이터 요소들의 배열과 대응하는 입력 데이터를 저장하는 메모리 및 상기 호스트 컴퓨터로부터 수신된 정렬 명령(SORT command)에 따라, 상기 메모리에 저장된 상기 입력 데이터에 대한 상기 정렬 연산을 실행하는 적어도 하나의 연산 구성요소(compute component)를 포함하는 커널을 포함하고, 상기 정렬 연산을 가속화하는 상기 적어도 하나의 연산 구성요소를 동적으로 인스턴스화(instantiate) 한다.

Description

스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법{SYSTEM AND METHOD FOR HIERARCHICAL SORT ACCELERATION NEAR STORAGE}
본 발명은 스토리지 시스템에 관한 것으로, 좀 더 상세하게는 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법에 관한 것이다.
일반적으로, 정렬 연산(동작)(sort operation)들은 요소들의 비교에 따라 배열(array) 또는 목록(list)에서 요소들을 재배열하기 위하여 사용되고, 비선형 타이밍 복잡성(nonlinear timing complexity)으로 인해 계산적으로 복잡하다. 정렬 연산들은 데이터베이스 응용 프로그램(application)들부터 그래핑 알고리즘(graphing algorithm)들까지 다양한 응용 프로그램들에서 널리 사용된다. 예를 들어, GROUP BY, JOIN 등과 같은 데이터베이스 응용 프로그램들은 그 자체의 구축 연산(또는 기본 연산)으로써 일반적으로 정렬 연산을 사용하므로, 데이터베이스 응용 프로그램들의 성능에 있어서 정렬 연산은 대체로 핵심 요소이다.
그러나, 상이한 데이터베이스 응용 프로그램들은 다양한 상이한 연산들 및 사양들을 가질 수 있으므로, 상이한 데이터베이스 응용 프로그램들에 대한 정렬 연산을 구현할 때 상이한 연산들 및 요구 사항들이 지원되는 것을 필요로 할 수 있다. 예를 들어, 다양한 상이한 데이터베이스 응용 프로그램들에 대하여 정렬 연산을 구현하기 위하여, 고정 정렬 엔진(fixed sorting engine)은 상이한 데이터베이스 응용 프로그램들에 고정 정렬 엔진을 적용하기 위한 사용자 요구 사항들 및 자원 요구 사항들에 따라 설계될 수 있다. 그러나, 이 경우에 다양한 상이한 요구 사항들에 따라 고정 정렬 엔진을 설계(또는 적용)하기 위하여 상당한 설계-시간 오버헤드(overhead)가 소비될 수 있다.
본 배경 기술에 상술한 내용은 본 발명의 배경에 대한 이해를 증진시키기 위한 것이며, 종래 기술을 구성하지 않는 정보를 포함할 수 있다.
본 발명의 목적은 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법을 제공하는데 있다.
본 발명에 따른 실시 예들은 스토리지 주변의 계층적 정렬 가속화를 위한 스토리지 시스템 및 방법에 관한 것이다.
본 발명의 실시 예에 따른 스토리지 시스템은 정렬 연산과 관련된 데이터 요소들의 배열을 저장하는 스토리지 장치, 상기 스토리지 장치 및 호스트 컴퓨터 간의 통신을 가능하게 하는 스토리지 인터페이스 및 상기 스토리지 장치에 통신 가능하게 연결된 재설정 처리 장치(reconfigurable processing device)를 포함하되, 상기 재설정 처리 장치는 상기 스토리지 장치로부터 리드(read)된, 상기 스토리지 장치에 저장된 상기 데이터 요소들의 배열과 대응하는 입력 데이터를 저장하는 메모리 및 상기 호스트 컴퓨터로부터 수신된 정렬 명령(SORT command)에 따라, 상기 메모리에 저장된 상기 입력 데이터에 대한 상기 정렬 연산을 실행하는 적어도 하나의 연산 구성요소(compute component)를 포함하는 커널을 포함한다. 상기 재설정 처리 장치는 상기 정렬 연산을 가속화하는 상기 적어도 하나의 연산 구성요소를 동적으로 인스턴스화(instantiate)한다.
예로서, 상기 스토리지 장치는 SSD(Solid State Drive)를 포함할 수 있고, 상기 재설정 처리 장치는 FPGA(Field Programmable Gate Array)를 포함할 수 있다.
예로서, 상기 입력 데이터는 상기 호스트 컴퓨터에 의하여 상기 SSD로부터 리드될 수 있고, 상기 호스트 컴퓨터의 프라이머리 메모리에 로드될 수 있고, 상기 FPGA의 상기 메모리는 상기 호스트 컴퓨터의 상기 프라이머리 메모리로부터 상기 입력 데이터를 수신할 수 있다.
예로서, 상기 스토리지 시스템은 상기 메모리 및 상기 SSD 간의 직접 상호 연결(direct interconnect)을 더 포함할 수 있고, 상기 FPGA는 상기 직접 상호 연결을 통하여 상기 SSD로부터 상기 메모리로 상기 입력 데이터를 리드하는 상기 SSD에 직접적으로 엑세스할 수 있다.
예로서, 상기 FPGA 및 상기 SSD는 동일한 회로 보드 상에 구현될 수 있다.
예로서, 상기 FPGA는 상기 SSD로부터 데이터를 리드하는 경우, 상기 호스트 컴퓨터를 우회하기 위하여 P2P(Point-to-Point) 통신을 사용하는 상기 직접 상호 연결을 통하여 상기 SSD로 액세스 할 수 있다.
예로서, 상기 메모리는 DRAM(Dynamic Random-Access Memory)을 포함할 수 있다.
예로서, 상기 적어도 하나의 연산 구성요소는 복수의 처리 요소(processing element)들을 포함할 수 있고, 상기 복수의 처리 요소들 각각은 정렬 알고리즘에 따라 상기 입력 데이터에 대응하는 상기 데이터 요소들의 배열의 세그먼트를 정렬할 수 있다.
예로서, 상기 복수의 처리 요소들 각각은 로컬 비교기 및 로컬 병합기를 포함할 수 있고, 상기 로컬 비교기 및 상기 로컬 병합기는 상기 정렬 알고리즘을 사용하여 상기 세그먼트로부터 부분적으로 정렬된 배열을 생성할 수 있다.
예로서, 상기 적어도 하나의 연산 구성요소는 상기 복수의 처리 요소들 각각의 출력에 연결된 처리 유닛(processing unit)을 더 포함할 수 있고, 상기 처리 유닛은 기 정렬 알고리즘에 따라 상기 복수의 처리 요소들의 상기 출력들을 정렬할 수 있다.
예로서, 상기 처리 유닛은 범용 비교기 및 범용 병합기를 포함할 수 있고, 상기 범용 비교기 및 상기 범용 병합기는 상기 정렬 알고리즘을 사용하여 상기 복수의 처리 요소들에 의하여 상기 부분적으로 정렬된 배열들로부터 상기 입력 데이터의 완전히 정렬된 배열을 생성할 수 있다.
예로서, 상기 정렬 알고리즘은 바이토닉 정렬 알고리즘(Bitonic sorting algorithm)일 수 있다.
예로서, 상기 재설정 처리 장치는 상기 데이터 요소들의 배열의 크기에 따라 런-타임(run-time)에 다수의 상기 복수의 처리 요소들 및 상기 처리 유닛을 동적으로 인스턴스화 할 수 있다.
예로서, 상기 재설정 처리 장치는 상기 데이터 요소들의 배열의 상기 크기를 식별하고, 적어도 하나의 임계 크기와 상기 데이터 요소들의 배열의 상기 크기를 비교하고, 상기 비교에 따라 다수의 상기 복수의 처리 요소들 및 상기 처리 유닛을 인스턴스화 할 수 있다.
본 발명의 실시 예에 따르면, 정렬 연산과 관련된 데이터 요소들의 배열을 저장하는 스토리지 장치, 상기 스토리지 장치 및 호스트 컴퓨터 간의 통신을 가능하게 하는 스토리지 인터페이스 및 상기 스토리지 장치에 통신 가능하게 연결된 재설정 처리 장치를 포함하는 스토리지 시스템의 상기 정렬 연산을 동적으로 스케일링(조정)(scaling)하는 방법이 제공된다. 본 발명의 실시 예에 따른 방법은 상기 재설정 처리 장치에 의하여, 상기 호스트 컴퓨터로부터 정렬 명령과 관련된 상기 데이터 요소들의 배열의 크기를 식별하는 단계, 상기 재설정 처리 장치에 의하여, 상기 크기와 적어도 하나의 임계 크기를 비교하는 단계 및 상기 재설정 처리 장치에 의하여, 상기 정렬 연산을 가속화하기 위한 상기 비교에 따라 적어도 하나의 연산 구성요소를 인스턴스화(instantiate)하는 단계를 포함한다.
예로서, 상기 스토리지 장치는 SSD(Solid State Drive)를 포함할 수 있고, 상기 재설정 처리 장치는 FPGA(Field Programmable Gate Array)를 포함할 수 있다.
예로서, 상기 적어도 하나의 연산 구성요소를 인스턴스화 하는 단계는, 적어도 하나의 로직 블록 및 상기 FPGA의 커널의 적어도 하나의 상호 연결을 재구성할 수 있다.
예로서, 상기 방법은 적어도 하나의 로컬 정렬 연산 구성요소에 의하여, 상기 데이터 요소들의 배열의 적어도 하나의 세그먼트를 정렬하는 단계 및 상기 적어도 하나의 로컬 정렬 연산 구성요소에 의하여, 상기 적어도 하나의 세그먼트의 정렬된 배열을 생성하는 단계를 더 포함할 수 있고, 상기 적어도 하나의 연산 구성요소를 인스턴스화 하는 단계는 상기 재설정 처리 장치에 의하여, 상기 적어도 하나의 로컬 정렬 연산 구성요소를 인스턴스화 하는 단계를 포함할 수 있다.
예로서, 상기 방법은 복수의 로컬 정렬 연산 구성요소들 각각에 의하여, 상기 데이터 요소들의 배열의 상이한 세그먼트를 정렬하는 단계 및 상기 복수의 로컬 정렬 연산 구성요소들 각각에 의하여, 대응하는 세그먼트의 부분적으로 정렬된 배열을 생성하는 단계를 더 포함할 수 있고, 상기 적어도 하나의 연산 구성요소를 인스턴스화 하는 단계는 상기 재설정 처리 장치에 의하여, 상기 복수의 로컬 정렬 연산 구성요소들을 인스턴스화 하는 단계를 포함할 수 있다.
예로서, 상기 방법은 범용 정렬 연산 구성요소에 의하여, 상기 복수의 로컬 정렬연산 구성요소들 각각에 의하여 생성된 상기 부분적으로 정렬된 배열을 정렬하는 단계 및 상기 범용 정렬 연산 구성요소에 의하여, 상기 부분적으로 정렬된 배열의 정렬으로부터 상기 데이터 요소들의 배열에 대응하는 완전히 정렬된 배열을 생성하는 단계를 더 포함할 수 있고, 상기 적어도 하나의 연산 구성요소를 인스턴스화 하는 단계는 상기 재설정 처리 장치에 의하여, 상기 복수의 로컬 정렬 연산 구성요소들 각각의 출력들에 연결된 상기 범용 정렬 연산 구성요소를 인스턴스화 하는 단계를 더 포함할 수 있다.
본 발명에 따르면, 다양한 요구 사항들, 자원 가용성, 및/또는 기타 요소들에 따라 재구성 가능한 디자인으로 광범위한 성능 및 영역 트레이드 오프(trade-off)들을 제공한다는 측면에서 스토리지 시스템의 설계 적응성 및 확장성이 향상될 수 있다.
본 발명에 따르면, 정렬 연산의 실행 시간이 단축될 수 있고, 정렬 연산에 의한 에너지 소비를 감소시킬 수 있다.
본 발명에 따르면, 호스트 컴퓨터에 의하여 부과된 병목 현상들(예를 들어, CPU 이용률, PCI 대역폭 등)을 감소시키거나 제거함으로써, 정렬 연산의 확장성을 향상시킬 수 있다.
이하 도면들을 참조하여, 본 명세서에 개시된 양상들 및 특징들은 본 발명의 실시 예들의 상세한 설명으로부터 통상의 기술자에게 보다 명백해질 것이다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템의 시스템 도이다.
도 2는 본 발명의 실시 예에 따른 스토리지 시스템의 블록도이다.
도 3은 본 발명의 실시 예에 따른 정렬 연산의 예시이다.
도 4는 본 발명의 실시 예에 따른 스토리지 시스템의 처리 요소의 블록도이다.
도 5는 본 발명의 실시 예에 따른 스토리지 시스템의 처리 유닛의 블록도이다.
도 6은 본 발명의 실시 예에 따른 정렬 연산을 동적으로 스케일링 하는 방법을 도시한 순서도이다.
도 7은 본 발명의 실시 예에 따른 스토리지 시스템의 시스템도이다.
이하에서는, 첨부된 도면을 참조하여 본 발명에 따른 실시 예들을 상세히 설명할 것이며, 도면 전체에 걸쳐 동일한 참조 번호들은 동일한 구성 요소들을 지칭한다. 다만, 본 발명은 다양한 다른 형태들로 실시될 수 있으며, 여기에 설명된 내용들에 국한되어서 해석되어서는 안된다. 오히려, 본 명세서의 실시 예들은 본 발명이 철저하고 완전하게 되기 위한 예로서 제공되며, 통상의 기술자에게 본 발명의 양상들 및 특징들을 완전하게 전달할 것이다. 따라서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명의 특징 및 기능을 완벽하게 이해하기 위하여 필요하지 않은 프로세스들, 요소들, 및 기술들은 설명되지 않을 수 있다. 특별히 언급하지 않는 한, 동일한 참조 번호들은 첨부된 도면들 및 쓰여진 설명에서 동일한 구성요소들을 지칭하고, 그것에 대한 설명은 반복되지 않을 것이다. 또한, 도면들에서, 구성요소, 레이어(layer)들 및 영역들의 상대적인 크기는 명확성을 위하여 과장 및/또는 간소화될 수 있다.
본 발명의 실시 예에 따르면, 정렬 가속화를 위한 계층 구조가 제공될 수 있으며, 다양한 요구 사항들, 자원 가용성, 및/또는 기타 요소들에 따라 재구성 가능한 디자인으로 광범위한 성능 및 영역 트레이드 오프(trade-off)들을 제공한다는 측면에서 설계 적응성(유연성) 및 확장성이 향상될 수 있다. 예를 들어, 개괄하면, 템플릿 기반(template-based)의 계층 구조가 제공될 수 있으며, 하나 이상의 템플릿 기반의 연산 구성요소(compute component)는 고도로 최적화될 수 있다. 일부 실시 예들에서, 연산 구성요소들은 정렬 연산들의 효율을 증가시키기 위하여, 다양한 정적 및/또는 동적 요구 사항들(예를 들어, 사용자의 요구 사항들, 자원 요구사항들, 데이터 크기 등)에 따라 동적으로 인스턴스화(instantiate) 될 수 있다. 예를 들어, 일부 실시 예들에서, 연산 구성요소들은 입력 데이터 배열(array)의 크기에 따라 증가 및/또는 감소될 수 있다(예를 들어, 실시간 또는 거의 실시간으로). 이 경우, 예를 들어, 고정된 정렬 엔진들에 의하여 부과되는 입력 데이터 배열에 대한 고정된 크기 제한들이 줄어들거나 제거될 수 있다.
일부 실시 예들에서, 정렬 연산들의 성능은 호스트 컴퓨터가 아닌 재설정 (가능한) 처리 장치에서 정렬 단계들을 실행함으로써 향상되거나 최적화될 수 있다. 예를 들어, 정렬 연산을 수행하기 위하여 호스트 컴퓨터의 자원들(예를 들어, CPU 이용)을 이용하지 않고, 재설정 처리 장치에 의하여 정렬 연산이 실행될 수 있으므로, 호스트 컴퓨터의 자원들은 다른 연산들 및 기능들을 위하여 이용될 수 있다. 따라서, 호스트 컴퓨터의 자원 이용률(예를 들어, CPU 이용률)을 감소시킴으로써, 에너지 소비를 감소시킬 수 있다. 또한, 일부 실시 예들에서, 재설정 처리 장치는 데이터 레벨 병렬화(data-level parallelism)를 위하여 구성될 수 있고, 재설정 처리 장치에 의하여 복수의 정렬 단계를 병렬로(예를 들어, 동시에) 수행하기 위하여 적절한 병렬 정렬 알고리즘(예를 들어, 바이토닉 정렬(Bitonic Sort))이 사용될 수 있다. 따라서, 정렬 연산의 실행 시간은 단축될 수 있고, 정렬 연산에 의한 에너지 소비는 감소될 수 있다.
일부 실시 예들에서, 호스트 컴퓨터에 의하여 부과된 병목 현상들(예를 들어, CPU 이용률, PCI 대역폭 등)을 감소시키거나 제거함으로써, 정렬 연산의 확장성은 향상될 수 있다. 예를 들어, 일부 실시 예들에서, 재설정 처리 장치 및 스토리지 장치 간의 직접 상호 연결(direct interconnect)이 제공될 수 있으므로, 데이터 전송들에 있어서 호스트 컴퓨터를 관련시키지 않고 재설정 처리 장치 및 스토리지 장치 간의 직접적인 데이터 전송들을 가능하게 할 수 있다. 이러한 경우, 예를 들어, 호스트 컴퓨터가 정렬을 위하여 스토리지 장치로부터 재설정 처리 장치로 입력 데이터 배열을 전송하는 대신, 재설정 처리 장치는 스토리지 장치로부터 직접 상호 연결을 통하여 입력 데이터 배열을 직접 액세스할 수 있다. 따라서, 호스트 컴퓨터에 의하여 부과된 병목 현상들(예를 들어, CPU 이용률, PCI 대역폭 등)은 감소되거나 제거될 수 있고, 예를 들어, CPU 이용률, 실행 시간들을 감소시킴으로써 호스트 컴퓨터에 의한 에너지 소비가 감소될 수 있다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템의 시스템 도이다.
도 1을 참조하면, 스토리지 시스템(100)은 호스트 컴퓨터(102), 스토리지 장치(104), 및 재설정 처리 장치(reconfigurable processing device, RP)(106)(예를 들어, 재설정 처리 회로 또는 내장된 처리 장치)를 포함할 수 있다. 호스트 컴퓨터(102)는 스토리지 장치(104) 및 재설정 처리 장치(106)에 통신 가능하게 연결되고, 명령들에 따라 스토리지 장치(104)에 저장된 데이터 요소들을 처리하기 위한 명령들을 스토리지 장치(104) 및 재설정 처리 장치(106)에 제공한다. 예를 들어, 호스트 컴퓨터(102)는 재설정 처리 장치(106)가 스토리지 장치(104)에 저장된 데이터 요소들의 배열을 정렬하도록 정렬 명령(SORT command)을 제공할 수 있다.
호스트 컴퓨터(102)는 호스트 프로세서(108) 및 호스트 메모리(110)를 포함할 수 있다. 호스트 프로세서(108)는 호스트 컴퓨터(102)의 예로서 CPU(Central Processing Unit)와 같은 범용 프로세서일 수 있다. 호스트 메모리(110)는 호스트 컴퓨터(102)의 고성능 메인 메모리(예를 들어, 1차 메모리)로서 간주될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트 메모리(110)는 예를 들어, 동적 랜덤 액세스 메모리(Dynamic Random Access Memory, DRAM)와 같은 휘발성 메모리를 포함할 수 있다(또는 휘발성 메모리일 수 있다). 그러나, 본 발명은 이에 한정되지 않으며, 호스트 메모리(110)는 통상의 기술자에게 알려진 바와 같이, 호스트 컴퓨터(102)에 대한 임의의 적합한 고성능 메인 메모리(예를 들어, 1차 메모리) 대체물을 포함할 수 있다(또는 호스트 컴퓨터(102)에 대한 임의의 적합한 고성능 메인 메모리 대체물일 수 있다). 예를 들어, 다른 실시 예들에서, 호스트 메모리(110)는 Z-NANDTM(삼성(samsung)에서 제공하는), 3D X-POINTTM(Intel 및 Micron Technology에서 제공하는), 상변화 메모리(Phase Change Memory), 저항 메모리(Resistive RAM, RRAM), STTRAM 등과 같이, 빠른 액세스 및 낮은 입/출력(Input/Output, I/O) 레이턴시(latency)를 제공할 수 있는 비교적 고성능의 비휘발성 메모리일 수 있다.
스토리지 장치(104)는 호스트 컴퓨터(102)에 의하여 액세스 되고/되거나 명령(command)(예를 들어, 정렬(SORT))들에 따라 재설정 처리 장치(106)에 의하여 처리되는 데이터 요소들을 영구적으로 저장할 수 있는 2차 메모리로 간주될 수 있다. 이런 맥락에서, 스토리지 장치(104)는 호스트 메모리(110)의 고성능 메모리와 비교하여, 상대적으로 더 느린 메모리를 포함할 수 있거나, 상대적으로 더 느린 메모리일 수 있다. 예를 들어, 일부 실시 예들에서, 스토리지 장치(104)는 데이터 요소들을 영구적으로 저장하는 비휘발성 메모리(예를 들어, NAND 플래시 메모리(NAND flash memory))를 포함할 수 있고, 솔리드 스테이트 드라이브(Solid-State Drive, SSD)를 포함하거나, 솔리드 스테이트 드라이브일 수 있다. 그러나, 본 발명은 이에 한정되지 않으며 또 다른 실시 예에서, 스토리지 장치(104)는 호스트 컴퓨터(102)의 명령(예를 들어, 정렬 명령)에 따라 재설정 처리 장치(106)에 의하여 처리될(예를 들어, 정렬될) 데이터 요소들의 배열(array)을 영구적으로 저장하기 위한, 통상의 기술자에게 알려진 임의의 적절한 메모리를 포함하는 임의의 적절한 스토리지 장치를 포함하거나, 임의의 적절한 스토리지 장치일 수 있다. 또 다른 실시 예에서, 스토리지 장치(104)는 정렬을 위하여 재설정 처리 장치(106)에 데이터를 전송할 수 있는 임의의 적절한 장치를 포함할 수 있다. 예를 들어, 일부 실시 예들에서, 스토리지 장치(104)는 네트워크 카드(network card), 이더넷 SSD(Ethernet SSD), 웨이브 카드(wave card) 등을 포함할 수 있다. 다양한 실시 예들에서, 스토리지 장치(104)는 대형 폼 팩터 표준(large form factor standard)(예를 들어, 3.5인치 하드 드라이브 폼 팩터), 소형 폼 팩터 표준(small form factor standard)(예를 들어, 2.5인치 하드 드라이브 폼 팩터), M.2 폼 팩터 등과 부합할 수 있다. 다른 실시 예들에서, 스토리지 장치(104)는 이러한 폼 팩터들에 적합한 또는 요구되는 임의의 파생물과 부합할 수 있다.
일부 실시 예들에서, 스토리지 장치(104)는 호스트 컴퓨터(102)와 스토리지 장치(104) 간의 통신(예를 들어, 커넥터 및 프로토콜을 사용하여)을 용이하게 하기 위한 스토리지 인터페이스(112)를 포함할 수 있다. 일부 실시 예들에서, 스토리지 인터페이스(112)는 호스트 컴퓨터(102)와 스토리지 장치(104) 간의 스토리지 요청들 및 응답들의 교환을 용이하게 할 수 있다. 일부 실시 예들에서, 스토리지 인터페이스(112)는 스토리지 장치(104)에 의한 호스트 컴퓨터(102)의 호스트 메모리(110)로 및 로부터의 데이터 전송을 용이하게 할 수 있다. 예를 들어, 일부 실시 예들에서, 스토리지 인터페이스(112)(예를 들어 커넥터 및 그것의 프로토콜)는 PCIe(Peripheral Component Interconnect Express), 이더넷을 통한 RDMA(Remote Direct Memory Access), SATA(Serial Advanced Technology Attachment), 파이버 채널(Fibre Channel), SAS(Serial Attached SCSI), 비휘발성 메모리 익스프레스(Non-Volatile Memory Express, NVM Express) 등을 포함(또는 등에 부합)할 수 있다. 다른 실시 예들에서, 스토리지 인터페이스(112)(예를 들어, 커넥터 및 그것의 프로토콜)는 예로서, 이더넷, USB(Universal Serial Bus) 등과 같은 다양한 범용 인터페이스들을 포함할 수 있거나 다양한 범용 인터페이스들에 부합할 수 있다.
재설정 처리 장치(106)는 호스트 컴퓨터(102)의 명령들에 따라 스토리지 장치(104)에 저장된 데이터 요소들을 처리할 수 있다. 예를 들어, 일부 실시 예들에서, 재설정 처리 장치(106)는 호스트 컴퓨터(102)의 정렬 명령에 따라 스토리지 장치(104)에 저장된 데이터 요소들의 배열을 정렬할 수 있다. 재설정 처리 장치(106)는 호스트 컴퓨터(102)를 대신하여 정렬 명령을 실행하기 때문에, 호스트 컴퓨터(102)의 자원 사용량(예를 들어, CPU 사용량 등)이 감소될 수 있다. 따라서, 재설정 처리 장치(106)는 스토리지 장치(104)에 저장된 데이터 요소들에 액세스 하기 위하여 스토리지 장치(104)와 통신 가능하게 연결될 수 있다. 예를 들어, 다양한 실시 예들에서, 재설정 처리 장치(106)는 호스트 컴퓨터(102) 및/또는 직접(또는 전용) 상호 연결을 통하여 스토리지 장치(104)에 통신 가능하게 연결될 수 있으며, 이는 도 6을 참조하여 보다 상세히 설명될 것이다. 이런 맥락에서, 재설정 처리 장치(106)는 호스트 프로세서(108)로부터 분리되고 구별되는, 스토리지 장치(104)를 위한 스토리지 프로세서(또는 보충 프로세서)로 간주될 수 있다. 다양한 실시 예들에서, 재설정 처리 장치(106)는 집적 회로(Integrated Circuit, IC)로 구현될 수 있고, 스토리지 장치(104)와 동일한 보드(예를 들어, 동일한 회로 보드)상에 내장될 수 있거나, 스토리지 장치(104)와 분리된 보드(예를 들어, 분리된 회로 보드)상에 구현될 수 있다.
일부 실시 예들에서, 재설정 처리 장치(106)는 다양한 처리 단계들이 병렬로(얘를 들어, 동시에) 실행되도록, 데이터 요소들의 병렬적 처리를 위하여 구성될 수 있다. 예를 들어, 일부 실시 예들에서, 재설정 처리 장치(106)는 데이터 요소들의 배열의 행(row)들 및/또는 열(column)들을 병렬로(또는 동시에) 정렬하기에 적합한 알고리즘으로 구성된 FPGA(Field Programmable Gate Array)를 포함하거나, 그러한 FPGA일 수 있으나, 이에 한정되는 것은 아니다. 예를 들어, 다른 실시 예들에서, 재설정 처리 장치(106)는 데이터 요소들을 병렬로(또는 동시에) 정렬하기에 적합한 알고리즘 또는 데이터 요소들을 순차적 프로세스로 정렬하기에 적합한 알고리즘으로 구성된 재설정 가능한(reconfigurable) 주문형 집적 회로(Application Specific Integrated Circuit, ASIC)(예를 들어, 동적 프로그래머블(dynamically programmable) ASIC)를 포함할 수 있거나, 그러한 AISC일 수 있다.
보다 상세하게, 일부 실시 예들에서, 재설정 처리 장치(106)는 재설정 처리 메모리(Reconfigurable Processing Memory, 114) 및 재설정 처리 가속기(Reconfigurable Processing Accelerator, 116)를 포함할 수 있다. 일부 실시 예들에서, 재설정 처리 메모리(114)는 호스트 메모리(110) 및 스토리지 장치(104)의 메모리와는 다른(예를 들어, 구별되는) 재설정 처리 장치(106)의 내부 메모리로 간주될 수 있다. 일부 실시 예들에서, 재설정 처리 메모리(114)는 재설정 처리 장치(106)에 의하여, 스토리지 장치(104)로부터 검색(회수)된 데이터 요소들(예를 들어, 호스트 컴퓨터(102)를 통하여 또는 직접 상호 연결을 통하여 검색된 데이터 요소들)을 캐싱(caching)(예를 들어, 저장 또는 임시 저장)하고, 호스트 컴퓨터(102)의 정렬 명령에 따라 재설정 처리 메모리(114)에서 캐싱된(cached) 데이터 요소들을 정렬하기 위하여 이용될 수 있다. 이런 맥락에서, 재설정 처리 메모리(114)는 호스트 메모리(110)의 용량 및 스토리지 장치(104)의 메모리의 용량과 비교할 때, 저용량 메모리로 간주될 수 있다. 다양한 실시 예들에서 재설정 처리 메모리(114)는 DRAM과 같은 휘발성 메모리를 포함하거나 휘발성 메모리일 수 있으나, 이에 한정되지 않으며, 또 다른 실시 예들에서, 재설정 처리 메모리(114)는 통상의 기술자에게 알려진 임의의 적합한 휘발성 메모리 또는 비휘발성 메모리를 포함하거나, 임의의 적합한 휘발성 메모리 또는 비휘발성 메모리일 수 있다. 예를 들어, 다양한 실시 예들에서, 재설정 처리 메모리(114)는 Z-NANDTM, 3D X-POINTTM, TCM(Tightly-Coupled Memory), 상변화 메모리(Phase Change Memory), 저항 메모리(Resistive RAM, RRAM), STTRAM 등을 포함하거나 그것들일 수 있다.
일부 실시 예들에서, 재설정 처리 가속기(116)는 명령(예를 들어, 정렬 명령)과 관련된 동작들을 용이하게(예를 들어, 가속) 하도록 구성될 수 있다. 예를 들어, 재설정 처리 가속기(116)는 데이터 요소들(예를 들어, 데이터 요소들의 배열)을 정렬하기 위한 임의의 적합한 정렬 알고리즘을 구현하도록 구성된 복수의 연산 구성요소들을 포함할 수 있다. 예를 들어, 연산 구성요소들은 하나 이상의 처리 요소(Processing Element) 및/또는 하나 이상의 처리 유닛(Processing Unit)을 포함할 수 있으며, 이하 더 상세히 논의될 것이다. 일부 실시 예들에서, 연산 구성요소들(예를 들어, 처리 유닛 및 처리 요소)은 합성(구성) 가능할 수 있고(composable), 사용자 요구 사항들, 응용 프로그램의 종류(예를 들어, 데이터베이스 응용 프로그램, 그래픽 응용 프로그램 등), 데이터 요소들의 배열 크기, 재설정 처리 장치(106)의 자원 제약(예를 들어, 메모리, 채널의 수 등), 재설정 처리 장치(106)에 의하여 연산되거나 연산되기를 기다리는(예를 들어, 동시에 처리되거나 순차적으로 처리되는) 다른 동작들의 수 등에 따라 동적으로 구성 가능할 수 있으며, 이하 더 상세히 논의될 것이다.
도 2는 본 발명의 실시 예에 따른 스토리지 시스템의 블록도이다. 도 2에 도시된 스토리지 시스템(200)은 도 1에 도시된 스토리지 시스템(100, 도 1 참조)과 동일하거나 실질적으로 동일할 수 있고(또는 유사할 수 있고), 그에 따라 중복되는 설명은 간략화 되거나 반복되지 않을 수 있다. 이하, 편의상, SSD(104a)는 스토리지 장치(104, 도 1 참조)의 대표적인 예로서 설명될 수 있고, DRAM(114a)은 재설정 처리 메모리(114, 도 1 참조)의 대표적인 예로서 설명될 수 있으며, FPGA(106a)는 재설정 처리 장치(106, 도 1 참조)의 대표적인 예로서 설명될 수 있다. 그러나, 상술한 바와 같이, 본 발명은 이러한 대표적인 예들에 한정되지 않으며, 스토리지 장치(104), 재설정 처리 메모리(114) 및 재설정 처리 장치(106) 각각은 이와 관련하여 상술된 예들 중 임의의 적절한 것들을 포함할 수 있고 (또는 일 수 있고), 및/또는 통상의 기술자에게 알려진 다른 적합한 예들을 포함할 수 있다.
도 2를 참조하면, 일부 실시 예들에서, 스토리지 시스템(200)은 호스트 컴퓨터(102), SSD(104a) 및 FPGA(106a)를 포함할 수 있다. 호스트 컴퓨터(102)는 SSD(104a) 및 FPGA(106a)에 통신 가능하게 연결되고, SSD(104a)에 저장된 데이터 요소들을 처리하기 위한 명령들을 제공한다. 예를 들어, 호스트 컴퓨터(102)는 정렬 명령을 제공할 수 있으므로, FPGA(106a)는 적절한 정렬 알고리즘에 따라 SSD(104a)에 저장된 데이터 요소들의 배열을 정렬한다. 일부 실시 예들에서, FPGA(106a)는 DRAM(114a), FPGA 가속기(116a) 및 DRAM(114a)과 FPGA 가속기(116a)간의 통신을 용이하게 하기 위한 인터페이스(204)를 포함하는 FPGA 보드(202)(예를 들어, FPGA 회로 보드)를 포함할 수 있다. 예를 들어, 일부 실시 예들에서, DRAM(114a)은 FPGA 보드(202) 상에 복수의 메모리 셀들로 구현될 수 있고, FPGA 가속기(116a)는 FPGA 보드(202)의 커널(예를 들어, 정렬 커널) 상에 구현될 수 있다.
본 명세서에서, “메모리 셀”은 데이터를 저장할 수 있는 메모리에서 가장 작은 단위를 의미한다. 예를 들어, DRAM 메모리 셀은 1비트의 데이터를 저장할 수 있고, 전하를 저장하기 위한 커패시터(capacitor) 및 1비트의 데이터로 커패시터를 선택적으로 충전하기 위한 트랜지스터(transistor)를 포함할 수 있다.
일부 실시 예들에서, DRAM(114a)은 입력 데이터(예를 들어, SSD(104a)의 정렬될 데이터 요소들)를 캐싱할 수 있고, 인터페이스(204)는 DRAM(114a)으로부터 FPGA 가속기(116a)의 BRAM(Block Random Access Memory, 206)으로 입력 데이터를 리드(read)하는데 사용될 수 있다. 예를 들어, 인터페이스(204)는 512-비트 AXI(Advanced Extensible Interface)를 포함하거나 512-비트 AXI 일 수 있으나, 본 발명은 이에 제한되는 것은 아니며, 인터페이스(204)는 통상의 기술자에게 알려진 바와 같이, DRAM(114a)으로부터 BRAM(206)으로 입력 데이터를 리드하기 위한 임의의 적절한 프로토콜을 사용하는 임의의 적절한 인터페이스를 포함할 수 있거나 임의의 적절한 인터페이스일 수 있다.
FPGA 가속기(116a)는 BRAM(206), BRAM 버퍼(208), 복수의 연산 구성요소들(210) 및 데이터 리오더(reorderer, 재정렬기)(212)를 포함할 수 있다. FPGA 가속기(116a)는 임의의 적절한 정렬 알고리즘을 이용하여 BRAM(206)의 입력 데이터를 정렬할 수 있고, 정렬된 입력 데이터를 BRAM 버퍼(208)에 저장할 수 있다. 일부 실시 예들에서, FPGA 가속기(116a)에 의하여 이용되는 정렬 알고리즘은 재설정 처리 장치(106)의 장치 유형 및/또는 재설정 처리 장치(106)의 처리 능력 및 기능에 따라 결정될 수 있으며(예를 들어, 미리 결정될 수 있으며), 그 결과로 정렬 연산(동작)은 향상될 수 있다(예를 들어, 가속되고, 개선되고, 및/또는 최적화됨).
예를 들어, 일부 실시 예들에서, 재설정 처리 장치(106)가 FPGA(106a)인 경우, 사용된 정렬 알고리즘은 예를 들어, 바이토닉 정렬과 같이, FPGA(106a)의 병렬 처리 기능을 활용하는 병렬 정렬 알고리즘일 수 있다. 예시적인 실시 예에 따르면, 다른 정렬 알고리즘들과 비교하였을 때, 바이토닉 정렬은 병렬 처리 구현에 있어서 성능을 개선 또는 최적화할 수 있다. 바이토닉 정렬의 각 단계(예를 들어, 모든 단계)에서, 동작들의 수는 동일하게 유지될 수 있으며, 바이토닉 정렬의 주요 동작은 비교 및 스왑(swap)이다. 예를 들어, 두 개의 숫자들이 비교되고, 정렬 방향에 기반하여 두 개의 숫자들은 스왑될 수 있다. 또한, 바이토닉 정렬에서, 모든 정렬 단계들은 서로 병렬로(예를 들어, 동시에) 실행될 수 있다. 따라서, 바이토닉 정렬의 모든 단계들에서, 할당된 모든 자원들이 사용될 수 있다. 그러므로, 바이토닉 정렬은 다른 정렬 알고리즘들(예를 들어, 퀵 정렬(Quick Sort), 합병 정렬(Merge Sort) 등)과 비교할 때, 타이밍 복잡성이 보다 높은 수 있으나, 바이토닉 정렬은 예를 들어, FPGA, GPUs(Graphical Processing Units) 등과 같이 병렬 연산 기능을 가지는 프로세서에 바람직할 수 있다. 마찬가지로, FPGA(106a)는 데이터 레벨 병렬화를 위하여 구성될 수 있기 때문에, FPGA(106a)는 다른 정렬 알고리즘들과 비교할 때 바이토닉 정렬의 가속을 더욱 향상시키거나 최적화할 수 있다. 그러나, 본 발명은 이에 한정되는 것은 아니며, 예를 들어, 퀵 정렬, 합병 정렬, 삽입 정렬(Insertion Sort), 선택 정렬 등 또는 이들의 조합과 같이 입력 데이터를 정렬하기 위하여 임의의 적절한 병렬 또는 순차 정렬 알고리즘이 사용될 수 있다.
도 3을 간략히 참조하면, 도 3은 본 발명의 실시 예에 따른 정렬 연산의 예시이다. 예시적인 예로써, 도 3은 8개의 랜덤한 입력들에 대한 바이토닉 정렬의 예시를 도시한다. 바이토닉 정렬은 정렬된 배열을 생성하기 위하여 바이토닉 시퀀스들을 사용하는 병렬 정렬 알고리즘이다. 예를 들어, 바이토닉 정렬은 바이토닉 시퀀스를 단조롭게(monotonically) 정렬된 시퀀스로 변환한다. 바이토닉 시퀀스는 하나는 오름차순 및 다른 하나는 내림차순으로 정렬된 두 개의 정렬된 세그먼트들을 포함하는, 부분적으로 정렬된 배열로 간주될 수 있다. 예를 들어, 크기가 N인 두 개의 정렬된 배열들은 크기가 2N인 정렬된 배열을 생성하기 위하여 결합되고 병합될 수 있다(여기서, N은 정수). 두번째 배열은 바이토닉 시퀀스를 생성하기 위하여 거꾸로 뒤집히고, 첫번째 배열로 연결된다. 예를 들어, 바이토닉 시퀀스 (1, 2, 2, 4, 5, 6, 8, 5, 4, 3, 2, 1)은 오름차순과 내림차순의 두 개의 정렬된 단조 서브 시퀀스들을 포함하는 부분적으로 정렬된 리스트로 간주될 수 있다. 바이토닉 시퀀스는 바이토닉 시퀀스를 정렬 배열로 변환하기 위하여 (예를 들어, 바이토닉 병합을 사용하여) 병합될 수 있다.
도 3에 도시된 바와 같이, 8개의 랜덤 입력들에 대하여, 바이토닉 정렬은 3개의 단계들(302, 304, 306)을 포함할 수 있고, 각 단계는 화살표들로 표시된 4개의 비교들을 포함할 수 있다. 실선 화살표들은 오름차순 비교를 보여주고, 점선 화살표들은 내림차순 비교를 보여준다. 각 비교마다, 두 개의 숫자들이 비교되고, 정렬 방향에 따라 스왑될 수 있다. 바이토닉 정렬에서, 요소들은 사전 정의된 순서로 비교될 수 있고, 비교의 순서는 입력 데이터에 의존하지 않는다. 따라서, 바이토닉 정렬의 각 단계들(예를 들어, 모든 단계들)(302, 304, 306)에서, 할당된 모든 자원들이 사용될 수 있고, 각 단계는 병렬로(예를 들어, 동시에) 실행될 수 있다. 이하에서는, 편의상 바이토닉 정렬은 정렬 연산을 가속화하기 위한 FPGA 가속기(116a)에 의하여 이용되는 정렬 알고리즘의 대표적인 예로서 기술될 것이다. 그러나, 상술한 바와 같이 본 발명은 정렬 알고리즘으로써 바이토닉 정렬을 사용하는 대표적인 예시에 한정되지 않으며, FPGA 가속기(116a)에 의하여 사용되는 정렬 알고리즘은 상술한 다른 예시적인 분류 알고리즘 중 적합한 어느 하나를 포함하거나 적합한 어느 하나일 수 있고, 통상의 기술자에게 알려진 정렬 알고리즘들 중 다른 적합한 예시들을 포함할 수 있다.
상술한 도 2를 다시 참조하면, 복수의 연산 구성요소들(210, 도 2 참조)은 바이토닉 정렬 알고리즘(또는 임의의 다른 적절한 정렬 알고리즘)을 이용하여 BRAM(206, 도 2 참조)에 저장된 입력 데이터(예를 들어, 데이터 요소들)를 정렬하도록 구성될 수 있다. 일부 실시 예들에서, 복수의 연산 구성요소들(210)은 하나 이상의 처리 요소(PE, 도 2 참조) 및/또는 하나 이상의 처리 유닛(PU, 도 2 참조)을 포함할 수 있다. 예를 들어, 일부 실시 예들에서, 복수의 연산 구성요소들(210)은 하나 이상의 처리 유닛(PU)을 포함할 수 있고, 각 처리 유닛(PU)은 요구 사항들(예를 들어, 사용자 요구 사항들, 응용프로그램 요구 사항들, 데이터 크기 요구 사항들 등)에 의존하는 복수의 처리 요소(PE)들을 포함할 수 있다. 또 다른 예시에서, 연산 구성요소들(210)은 하나의 처리 유닛(PU)을 포함할 수 있고, 하나의 처리 유닛(PU)은 요구 사항들에 의존하는 임의의 적절한 또는 원하는 개수의 처리 요소(PE)를 포함할 수 있다. 또 다른 예시에서, 연산 구성요소들(210)은 요구 사항들에 의존하는 단일의 처리 요소(PE)를 포함할 수 있고, 이 경우 어떠한 처리 유닛(PU)도 포함하지 않을 수 있다.
다시 말해서, 처리 요소(PE)는 BRAM(206)으로부터 리드된 데이터 요소들(예를 들어, 정수 요소들)을 정렬할 수 있는 하위(저차) 정렬 연산 구성요소들(예를 들어, 로컬(국부) 정렬 연산 구성요소들)로 간주될 수 있고, 처리 유닛(PU)은 처리 요소(PE)의 출력들을 정렬할 수 있는 고차(상위) 정렬 연산 구성요소들(예를 들어, 글로벌(전역, 범용) 정렬 연산 구성요소들)로 간주될 수 있다. 예를 들어, 처리 유닛(PU)은 복수의 처리 요소(PE)들을 포함할 수 있고, 처리 유닛(PU)은 복수의 처리 요소(PE)들의 출력들을 정렬할 수 있다. 또한, 복수의 처리 유닛(PU)들이 있는 경우, 데이터 리오더(212)는 복수의 처리 유닛(PU)들의 출력들을 정리(예를 들어, 정렬 및/또는 병합)할 수 있다. 그러나, 본 발명은 이에 한정되지 않으며, 데이터 리오더(212)는 생략될 수 있다. 예를 들어, FPGA(106a, 도 2 참조)가 단 하나의 처리 요소(PE)만을 포함하거나, 복수의 처리 요소(PE)들을 포함하는 단 하나의 처리 유닛(PU)만을 포함하는 경우, 데이터 리오더(212)는 생략될 수 있다.
일부 실시 예들에서, 각각의 처리 유닛(PU) 및 처리 요소(PE)는 동적으로 합성 가능할 수 있고 및/또는 구성 가능할 수 있다. 예를 들어, 일부 실시 예들에서, FPGA(106a)는 예를 들어, 정렬 연산들의 효율성을 높이거나 향상시키기 위하여, 필요 또는 원하는 바에 따라 임의의 원하는 또는 적절한 개수의 처리 요소(PE) 및/또는 처리 유닛(PU)을 동적으로 인스턴스화할 수 있다. 예를 들어, 상이한 데이터베이스 응용프로그램들은 다양한 연산들 및 사양들을 가질 수 있고, 따라서, FPGA(106a) 상에서 상이한 데이터베이스 응용프로그램들을 가속화하기 위하여, 상이한 연산들 및 커널들이 FPGA(106a) 상에서 구현될 수 있다. 이 경우, FPGA(106a)의 가용 자원들은 커널들(예를 들어, 정렬 커널(116a, 도 2 참조)) 중에서 분배될 수 있고, 따라서, 각 커널의 가용 자원들의 양은 상이한 응용 프로그램마다 다를 수 있다.
따라서, 일부 실시 예들에서, FPGA(106a)는 다양한 사용자 요구 사항들, 응용 프로그램 요구 사항들, 다른 동작들(예를 들어, 리드 동작, 라이트(write) 동작 등)을 지원하기 위한 요구 사항들, 데이터 크기 요구 사항들, 자원 요구 사항들 등에 따라 처리 유닛(PU)들 및/또는 처리 요소(PE)들의 개수를 증가 또는 감소시킬 수 있다. 예를 들어, FPGA(106a)는 프로그램 가능한(programmable) 로직 블록(logic block), 및 다양한 상이한 구성들에서 로직 블록들을 연결하는 복수의 재설정 가능한 상호 연결(reconfigurable interconnect)들을 포함할 수 있다. 로직 블록들 및 상호 연결들은 적절한 하드웨어 기술 언어(Hardware Description Language, HDL)을 이용하여 프로그램(예를 들어, 재프로그래밍 또는 재구성)될 수 있다. 이 경우에, FPGA(106a)는 다양한 정적인 및/또는 변경되는 요구 사항들에 따라, 런 타임(예를 들어, 실시간 또는 거의 실시간) 및/또는 설정시에 로직 블록들 및/또는 상호 연결들을 동적으로 재프로그래밍 하거나 재구성함으로써, 임의의 적절한 또는 원하는 개수의 처리 유닛(PU)들 및/또는 처리 요소(PE)들을 인스턴스화 할 수 있다. 일부 실시 예들에서, 병렬 처리 정렬 알고리즘이 사용되는 경우, FPGA(106a)는 병렬로 분류 단계들을 수행하는 처리 요소(PE)들 및/또는 처리 유닛(PU)들의 개수를 증가 또는 감소시킴으로써, 정렬 연산의 병렬화를 증가 또는 감소시킬 수 있다. 처리 유닛(PU)들 및 처리 요소(PE)의 예시적인 구조 및/또는 구성 구현은 후술할 도 4 및 도 5를 참조하여 보다 상세하게 논의될 것이다.
도 4는 본 발명의 실시 예에 따른 스토리지 시스템의 처리 요소(예를 들어, 로컬 정렬 연산 구성요소(local sort compute component))의 블록도이다. 도 4에 개시된 처리 요소(Processing Element, PE)(400)는 상술한 도 3을 참조하여 설명된 처리 요소(PE, 도 3 참조)와 동일하거나 실질적으로 동일(또는 유사)할 수 있고, 따라서 중복되는 설명은 간략화되거나 반복되지 않을 수 있다.
도 4를 참조하면, 처리 요소(400)는 컨트롤러(402), 로컬 비교기(404)(예를 들어, 배열 비교기), 및 로컬 병합기(406)(예를 들어, 바이토닉 병합기)를 포함할 수 있다. 컨트롤러(402)는 BRAM 버퍼(208)로부터 도 4에 개시된 바이토닉 정렬(450)과 같은 적절한 정렬 알고리즘을 사용하여 처리 요소(400)에 의하여 정렬될 입력 데이터를 리드할 수 있다. 예를 들어, 로컬 비교기(404)는 BRAM 버퍼(208)로부터 리드된 입력 데이터를 비교할 수 있고, 로컬 병합기(406)는 입력 데이터의 정렬된 배열을 생성하기 위한 정렬 알고리즘에 따라 입력 데이터를 병합할 수 있다. 정렬된 배열은 BRAM 버퍼(208)에 저장될 수 있다.
대표적인 예로서, 처리 요소(400)는 (예를 들어, 로컬 비교기(404) 및 로컬 병합기(406)를 이용하여) 도 4의 참조 번호 450으로 개시된 바와 같이 각 행이 64개의 요소들을 가지는 1024개의 행을 정렬하는 로컬 정렬 동작을 수행함으로써, 64K 정수 요소들을 로컬로 정렬할 수 있다. 예를 들어, 1024개의 개별적으로 정렬된 행은 로컬 병합기(406)를 이용하여 병합(예를 들어, 바이토닉 병합)을 수행한 후, 64K 요소(K=1024)로 정렬된 배열이 될 수 있다. 그러나, 본 발명은 도 4에 개시된 대표적인 예에 한정되지 않으며, 처리 요소(400)는 처리 요소(400)를 위하여 할당된 FPGA(106a, 도 2 참조)의 자원들(예를 들어, DRAM(114a, 도 2 참조) 및/또는 BRAM(206, 도 2 참조)의 크기 및/또는 용량)에 따라, 임의의 적절한 또는 원하는 수의 정수 요소들을 정렬할 수 있다.
일부 실시 예들에서, 처리 요소(400)들에 의하여 정렬된 입력 데이터는 호스트 컴퓨터(102, 도 1 참조)의 정렬 명령과 연관된 데이터 요소들의 세그먼트(예를 들어, 부분 또는 서브-세트)일 수 있다. 예를 들어, 일부 실시 예들에서, 정렬 요청과 연관된 데이터 요소들의 배열의 크기는 단일의 처리 요소(400)를 이용하여 효율적으로 정렬할 수 있는 데이터의 양을 초과할 수 있다. 이 경우, FPGA(106a)는 하나 이상의 추가적인 처리 요소(400)를 인스턴스화할 수 있고, 각 처리 요소(400)는 데이터 요소들의 부분적인 정렬 배열을 생성하기 위해 정렬 명령과 연관된 데이터 요소들의 상이한 세그먼트(예를 들어, 상이한 부분 또는 상이한 서브-세트)를 정렬할 수 있다. 일부 실시 예들에서, 처리 요소(400)들은 그들의 대응하는 부분적으로 정렬된 배열을 서로 병렬로(예를 들어, 동시에) 생성할 수 있다. 예를 들어, 처리 요소(400)들에 의하여 사용되는 정렬 알고리즘이 바이토닉 정렬인 경우에, 처리 요소(400)들 각각은 입력 데이터에 대한 비교들을 서로 병렬로(예를 들어, 동시에) 수행할 수 있다. 일부 실시 예들에서, 복수의 처리 요소(400)들은 데이터 요소들의 일부 세그먼트들을 서로 병렬로 정렬할 수 있고, 그 후 데이터 요소들의 다른 부분의 추가적인 세그먼트들을 서로 병렬로 정렬할 수 있다(예를 들어, 입력 데이터가 너무 커서, 한 번에 모두 정렬될 수 없는 경우). 일부 실시 예들에서, 후술할 도 5를 참조하여 더 상세히 논의될 바와 같이, FPGA(106a)는 데이터 요소들의 완전히 정렬된 배열을 생성하기 위하여, 복수의 처리 요소(400)들의 출력들을 정렬하는 하나 이상의 처리 유닛(PU, 도 2 참조)을 더 인스턴스화할 수 있다.
도 5는 본 발명의 실시 예에 따른 스토리지 시스템의 처리 유닛(예를 들어, 범용(글로벌, 전역) 정렬 연산 구성요소(global sort compute component))의 블록도이다. 도 5에 개시된 처리 유닛(500)은 상술한 도 3을 참조하여 설명된 처리 유닛(PU, 도 3 참조)와 동일하거나 실질적으로 동일(또는 유사)할 수 있고, 따라서 중복되는 설명은 간략화되거나 반복되지 않을 수 있다.
도 5를 참조하면, 처리 유닛(500)은 복수의 처리 요소들(PE0 내지 PE7), 중재자(중재기, arbiter)(502), 컨트롤러(504), 어드레스 변환기(506), 범용(글로벌, 전역) 비교기(508), 및 범용(글로벌, 전역) 병합기(510)를 포함할 수 있다. 각 처리 요소들(PE0 내지 PE7)은 상술한 도 4를 참조하여 설명된 처리 요소(400, 도 4 참조)와 동일하거나 실질적으로 동일(또는 유사)할 수 있고, 따라서 중복되는 설명은 간략화되거나 반복되지 않을 수 있다
상술한 바와 같이, 일부 실시 예들에서, 복수의 처리 요소들(PE0 내지 PE7)은 각각은 정렬 명령과 관련된 데이터 요소들의 세그먼트(예를 들어, 부분 또는 서브-세트)의 부분적으로 정렬된 배열을 생성할 수 있고, 처리 유닛(500)은 데이터 요소들의 완전히 정렬된 배열을 생성하기 위하여 복수의 처리 요소들(PE0 내지 PE7)의 출력들을 정렬(예를 들어, 범용으로(전역적으로) 정렬)할 수 있다. 도 5에서는 8개의 처리 요소들(PE0 내지 PE7)을 개시하지만, 본 발명은 이에 한정되지 않으며, 처리 유닛(500)은 요구 사항들(예를 들어, 사용자 요구 사항들, 응용 프로그램 요구 사항들, 데이터 크기 요구 사항들, 자원 요구 사항들 등)에 따라 임의의 적절한 개수의 처리 요소(PE)들을 포함할 수 있다.
더 상세하게, 컨트롤러(504)는 정렬(예를 들어, 바이토닉 정렬)을 연산하기 위한 제어 신호들을 제공할 수 있다. 중재자(502)는 부분 정렬(예를 들어, 각 처리 요소들(PE0 내지 PE7)에 의한 부분 정렬 출력)의 다중 반복들을 처리할 수 있다. 예를 들어, 중재자(502)는 어드레스 변환기(506)에 BRAM 버퍼(208, 도 4 참조)에 저장된 각 처리 요소들(PE0 내지 PE7)의 출력들에 대한 액세스를 제공할 수 있어서, 처리 요소들(PE0 내지 PE7)의 출력들은 처리 유닛(500)에 의하여 추가로 정렬될 수 있다. 예를 들어, 어드레스 변환기(506)는 처리 유닛(500)에 의하여(예를 들어, 범용 비교기(508) 및 범용 병합기(510)에 의하여) 추가로 정렬되도록 하기 위하여, 처리 요소들(PE0 내지 PE7)의 출력들을 처리 유닛(500)의 버퍼에 매핑할 수 있다. 예를 들어, 처리 유닛(500)은 처리 유닛(500)에 의한 정렬을 위하여 처리 요소들(PE0 내지 PE7)의 출력들을 저장하고, 그리고 범용 비교기(508)와 범용 병합기(510)로부터 출력된 정렬 결과들을 저장하는 URAM(Unified Random Access Memory) 버퍼를 포함할 수 있다. (예를 들어, 처리 요소들(PE0 내지 PE7) 각각에 의하여) 모든 세그먼트들이 정렬된 후, 부분 배열들의 결과는 범용 비교기(508)에 의하여 전체(전역)적으로 (예를 들어, 바이토닉 정렬 알고리즘에 따라) 정렬되고, 전체적으로 배열을 정렬하기 위하여 정렬된 세그먼트들은 범용 병합기(510)를 이용하여 (예를 들어, 바이토닉 병합 알고리즘에 따라) 병합된다. 만약 입력 데이터 배열이 정렬될 추가적인 세그먼트들을 포함하는 경우, 추가적인 세그먼트들은 처리 요소(PE)들에 의하여 부분적으로 정렬될 수 있고, 처리 요소들에 의하여 부분적으로 정렬된 배열들은 처리 유닛(500)들에 의하여 추가적으로 정렬될 수 있다. 따라서, 정렬 연산을 수행하기 위하여 처리 요소(PE)들 및 처리 유닛(500)들의 임의의 적합한 조합들을 동적으로 인스턴스화 함으로써, 정렬 연산들을 가속화(예를 들어, 향상 및/또는 최적화)하기 위한 동적으로 확장 가능한 계층 구조가 제공될 수 있다.
도 6은 본 발명의 실시 예에 따른 정렬 연산을 동적으로 스케일링 하는 방법을 도시한 순서도이다. 그러나, 본 발명은 도 6에 개시된 방법(600)의 동작의 순서 또는 수에 한정되지 않으며, 통상의 기술자에 의하여 인식되는 동작들의 임의의 원하는 순서 또는 수로 변경될 수 있다. 예를 들어, 일부 실시 예들에서, 순서가 변할 수 있거나, 방법은 더 적거나 추가적인 동작들을 포함할 수 있다.
도 6을 참조하면, 방법(600)은 시작할 수 있고, 605 단계에서, 호스트 컴퓨터(102, 도 1 참조)로부터 정렬 명령이 수신될 수 있다. 예를 들어, 정렬 명령은 SSD(104a, 도 2 참조)에 저장된 입력 데이터 배열을 정렬하기 위하여 호스트 컴퓨터(102)에 의한 명령을 지칭할 수 있다. 610 단계에서, 입력 데이터 배열의 크기가 식별될 수 있다. 예를 들어, 일부 실시 예들에서, FPGA(106a, 도 2 참조)는 입력 데이터 배열의 크기를 식별하기 위하여 정렬 명령을 분석할 수 있다. 615 단계에서, 일부 실시 예들에서, 입력 데이터 배열의 크기는 임계 크기(예를 들어, 기준 크기)와 비교될 수 있다. 예를 들어, 일부 실시 예들에서, 입력 데이터 배열의 크기에 따라 인스턴스화될 연산 구성요소들(210, 도 2, 도4 및 도 5 참조)의 적절한 구성을 결정하기 위하여, FPGA(106a)는 입력 데이터 배열의 크기를 하나 이상의 임계 크기(예를 들어, 하나 이상의 기준 크기)와 비교할 수 있다. 다시 말해서, 하나 이상의 임계 크기들은 입력 데이터 배열의 크기 및/또는 다양한 요구 사항들(예를 들어, 사용자 요구 사항들, 응용 프로그램 유형, 자원 할당 요구 사항들, 다른 동작들을 지원하기 위한 요구 사항들 등)에 따라, 입력 데이터 배열을 효율적으로 분류하는데 이용될 수 있는 처리 요소(PE)들 및/또는 처리 유닛(PU)들의 상이한 구성들에 대응할 수 있다.
예를 들어, 일부 실시 예들에서, 하나 이상의 임계 크기는 룩-업 테이블(Look-Up Table, LUT) 등에 저장될 수 있고, 하나 이상의 임계 크기 각각은, 입력 데이터 배열의 크기에 따라 입력 데이터 배열을 효율적으로 정렬하도록 인스턴스화될 수 있는, 처리 요소(PE)들 및/또는 처리 유닛(PU)들의 적절한 또는 원하는 조합(예를 들어, 미리 결정된 조합)과 상관될 수 있다. 예를 들어, 제 1 임계 값 미만의 입력 데이터 배열의 크기는 단일의 처리 요소(PE)가 입력 데이터 배열을 효율적으로 분류(정렬)하기에 충분함을 나타낼 수 있다. 또 다른 예에서, 제 1 임계 값 이상이고, 제 2 임계 값 미만의 입력 데이터 배열의 크기는 단일의 처리 유닛(PU)에 연결된 복수의 처리 요소(PE)들이 입력 데이터 배열을 효율적으로 분류하기에 충분함을 나타낼 수 있다. 또 다른 예에서, 제 2 임계 값 이상의 입력 데이터 배열의 크기는 각각이 복수의 처리 요소(PE)들을 포함하는 복수의 처리 유닛(PU)들이 입력 데이터 배열을 효율적으로 분류하기에 충분함을 나타낼 수 있다. 그러나, 본 개시는 이러한 예시들에 제한되지 않으며, 임계 크기는 처리 요소(PE)들 및/또는 처리 유닛(PU)들의 다양한 입상의(granular) 조합들에 따라, 그리고 다양한 사용자 요구 사항들, 자원 할당 요구 사항들, 응용 프로그램 유형, 지원될 다른 동작들 등에 따라 분할될 수 있음이 이해되어야 한다.
도 6을 다시 참조하면, 일부 실시 예들에서, 615 단계에서 입력 데이터 배열의 크기가 임계 크기보다 작은 경우(예를 들어, '아니오'인 경우), 단일의 처리 요소(PE)는 상술한 바와 같이 입력 데이터 배열을 효율적으로 정렬하기에 충분한 것으로 결정될 수 있다. 따라서, 단일의 처리 요소(PE)는 620 단계에서 인스턴스화 될 수 있고, 625 단계에서 입력 데이터 배열의 완전히 정렬된 배열을 생성하기 위하여 단일의 처리 요소(PE)는 입력 데이터 배열 전체를 정렬할 수 있다(예를 들어, 병렬 프로세스 또는 순차적 프로세스에서). 645 단계에서, 완전히 정렬된 배열은 호스트 컴퓨터(102)로 리턴(반환)될 수 있고, 방법은 종료될 수 있다.
반면, 615 단계에서 입력 데이터 배열의 크기가 임계 크기보다 큰 경우(예를 들어, '예'인 경우), 복수의 처리 요소(PE)들을 포함하는 적어도 하나의 처리 유닛(PU)은 상술한 바와 같이 입력 데이터 배열을 효율적으로 정렬하기에 충분한 것으로 결정될 수 있다. 예를 들어, 이 경우에, 615 단계는 입력 데이터 배열이 효율적으로 정렬될 수 있도록 인스턴스화될 처리 유닛(PU)들 및 처리 요소(PE)들의 적절한 개수를 결정하기 위하여, 하나 이상의 임계 값과 입력 데이터 배열의 크기의 하나 이상의 비교를 포함할 수 있다. 따라서, 620 단계에서, 복수의 처리 요소(PE)들을 포함하는 적어도 하나의 처리 유닛(PU)은 인스턴스화될 수 있고, 625 단계에서, 입력 데이터 배열의 부분적으로 정렬된 배열들을 생성하기 위하여 복수의 처리 요소(PE)들은 입력 데이터 배열의 상이한 세그먼트(예를 들어, 상이한 부분 또는 상이한 서브-세트)를 정렬할 수 있다. 예를 들어, 입력 데이터 배열은 복수의 처리 요소(PE)들 사이에서 세그먼트화 될 수 있고, 각 처리 요소(PE)는 입력 데이터의 세그먼트에 대응하는 부분적으로 정렬된 배열을 생성할 수 있다.
640 단계에서, 입력 데이터 배열의 완전히 정렬된 배열을 생성하기 위하여 부분적으로 정렬된 배열들은 처리 유닛(PU)에 의하여 정렬될 수 있다. 예를 들어, 처리 요소(PE)들에 의하여 출력된 부분적으로 정렬된 배열들은, 입력 데이터 배열의 완전히 정렬된 배열을 생성하기 위하여, 처리 유닛(PU)에 의하여 추가적으로 정렬(예를 들어, 범용 정렬)될 수 있다. 645 단계에서, 완전히 정렬된 배열은 호스트 컴퓨터(102)로 제공될 수 있고, 방법은 종료될 수 있다.
도 7은 본 발명의 실시 예에 따른 스토리지 시스템의 시스템도이다. 도 7에 도시된 스토리지 시스템(700)은 도 1에 도시된 스토리지 시스템(100, 도 1 참조)과 동일하거나, 실질적으로 동일할 수 있으므로(유사할 수 있으므로), 중복되는 설명은 간략화 되거나 반복되지 않을 수 있다. 그러나, 도 1에 도시된 스토리지 시스템(100)과는 달리, 도 7에 도시된 스토리지 시스템(700)은 재설정 처리 장치(106, 도 1 참조)(예를 들어, FPGA(106a)) 및 스토리지 장치(104, 도 1 참조)(예를 들어, SSD(104a)) 간의 직접(또는 개별) 상호 연결(702)을 추가적으로 포함할 수 있다. 예를 들어, 일부 실시 예들에서, 직접 상호 연결(702)은 FPGA(106a)에 의하여 SSD(104a)에 저장된 입력 데이터 배열에 직접적으로 액세스 하고, 호스트 컴퓨터(102, 도 1 참조)를 수반하는 것 없이 FPGA DRAM(114a)으로 입력 데이터 배열을 리드하기 위해 사용될 수 있다. 따라서, 호스트 컴퓨터(102)에 의하여 부과된 레이턴시(latency) 및 스루풋(처리량) 제한(throughput limitation)이 감소될 수 있다.
보다 구체적으로, 도 1의 실시 예를 참조하면, 호스트 컴퓨터(102)는 스토리지 장치(104)(예를 들어, SSD(104a)로부터 입력 데이터 배열을 리드하고, 호스트 메모리(110)로 입력 데이터 배열을 로드(load) 한다. 그 후, 호스트 컴퓨터(102)는 정렬을 인스턴스화 하기 위하여, 호스트 메모리(110)로부터 재설정 처리 메모리(114)(예를 들어, FPGA DRAM(114a))로 입력 데이터 배열을 전송한다. 이 경우, 호스트 컴퓨터(102), 스토리지 장치(104)(예를 들어, SSD(104a)) 및 재설정 처리 장치(106)(예를 들어, FPGA(106a)) 간의 통신 비용이 증가될 수 있고, 레이턴시 및 스루풋 제한이 증가할 수 있다. 더욱이, 호스트 컴퓨터(102)와 같은 범용 프로세서는 CPU 오버헤드가 크고, 다수의 SSD에서 PCI 대역폭을 공유하기 때문에, 다수의 SSD와 통신하는 경우 확장성에 한계가 있을 수 있다.
도 7에 개시된 실시 예를 참조하여 비교하면, FPGA(106a)는 호스트 컴퓨터(102)를 수반하지 않고, P2P(Point-to-Point) 통신을 사용하는 직접 상호 연결(702)을 통하여 하나 이상의 SSD(104a)에 직접 액세스할 수 있다. 예를 들어, 먼저 데이터를 호스트 메모리(110)에 로딩한 다음 정렬을 개시 하기 위하여 데이터를 FPGA DRAM(114a)으로 전송하는 대신, FPGA(106a)는 배열 요소들을 리드하기 위하여 SSD(104a)에 직접 액세스할 수 있다. 정렬 후에, 정렬된 세그먼트는 FPGA DRAM(114a)에 저장되고, 다음 세그먼트는 로드 및 정렬될 수 있다. 직접 상호 연결(702)을 통한 FPGA(106a) 및 SSD(104a) 간의 P2P 통신은 호스트 메모리(110)로부터 리드하고 그리고 호스트 메모리(110)로 라이트하는 오버헤드를 감소시키거나 제거할 수 있고, 호스트 컴퓨터(110)를 통한 통신과 관련된 오버헤드를 제거하거나 감소시킴으로써 동작상 레이턴시를 감소 시킬 수 있다.
본 발명의 실시 예에 따르면, 연산을 스토리지 장치에 더 가깝게 함으로써, 입/출력(I/O) 비용이 감소할 수 있고, 더 큰 저장 시스템을 관리하는 관점에서 시스템의 확장성이 증가될 수 있다. 예를 들어, 다수의 SSD들로 더 큰 스토리지 시스템을 관리하기 위한 확장성은 일반적으로 대용량 호스트 메모리, 데이터 리드의 CPU 오버헤드, 및 자원들 간의 PCI 대역폭 공유에 의하여 제한될 수 있다. 직접 상호 연결(702)을 통한 P2P 통신을 사용함으로써, 그러한 병목 현상들을 제거하거나 완화하므로 시스템 확장성은 증가될 수 있다. 또한, 직접 상호 연결(702)을 통한 P2P 통신은 정렬될 데이터가 연산 장치(예를 들어, 호스트 컴퓨터(102))의 메인 메모리(예를 들어, 일반적으로 DRAM)에 맞지 않는 경우 사용될 수 있는 외부 정렬에 특히 유용할 수 있으므로, 예를 들어, SSD(104a)와 같이 느린 외부 저장소로 데이터가 옮겨진다. SSD(104a)에 다수의 리드 및 라이트를 요구할 수 있는 외부 정렬의 경우, 감소된 데이터 액세스 레이턴시는 FPGA(106a) 내부의 연산 자원의 이용률을 향상시킬 수 있다.
본 명세서에서, “제 1”“제 2”“제 3”등의 용어들은 다양한 요소들, 성분들, 구성 요소들, 영역들, 층들, 및/또는 섹션들을 설명하기 위하여 사용될지 라도, 이러한 요소들, 성분들, 구성 요소들, 영역들, 층들, 및/또는 섹션들은 이러한 용어들로 인하여 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 구성 요소, 영역, 층 또는 섹션으로부터 하나의 요소, 구성 요소, 영역, 층 또는 섹션을 구분하기 위하여 사용된다. 따라서, 본 발명의 사상 및 범위를 벗어나지 않으면, 후술되는 제 1 요소, 구성요소, 영역, 층 또는 섹션은 제 2 요소, 구성 요소, 영역, 층 또는 섹션을 지칭할 수 있다.
하나의 구성 요소 또는 층이 다른 구성 요소 또는 층 “상에”, “접속된” 또는 “연결된” 것으로 언급되는 경우, 그것은 다른 요소 또는 층에 직접 연결되거나, 연결될 수 있거나, 또는 하나 이상의 매개 요소 또는 층이 존재할 수 있는 것으로 이해되어야 한다.
본 명세서에서 사용된 용어들은 특정한 실시 예들을 설명하기 위한 것이고, 본 발명을 제한하려는 것으로 의도되지 않았다. 본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 “하나”는 복수의 형태도 포함하는 것으로 의도된다. “구성되는”, “구성하는”, “포함하는” 및 “포함하고 있는”, “가지는” 및 “가지고 있는” 용어들이 본 명세서에서 사용되는 경우, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 성분들의 존재를 명시하나, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 및/또는 그것들의 그룹들의 추가 또는 존재를 배제하지 않는다. 본 명세서에서 사용된 “및/또는” 용어는 하나 이상의 열거된 항목들과 연관된 임의의 그리고 모든 조합들을 포함한다. “적어도 하나”와 같은 표현들은 요소들 전체 리스트를 수정하고, 리스트의 개별 요소들을 수정하지 않는다.
본 명세서에서 사용된 바와 같이, “대체로”, “대략”과 같은 용어 및 이와 유사한 용어들은 정도의 용어들이 아닌 근사치의 용어들로서 사용되고, 통상의 기술자에 의하여 인식될 측정된 또는 계산된 값들의 고유한 변동들을 고려하기 위한 것으로 의도된다. 또한, 본 발명의 실시 예들을 기술함에 있어서, “할 수 있다”의 사용은 “본 발명의 하나 이상의 실시 예들”을 의미한다. 본 명세서에서 사용된 바와 같이, “사용”, “사용되는” 및 “사용된”과 같은 용어들은 “이용”, “이용되는” 및 “이용된”과 같은 용어들의 동의어로 각각 간주될 수 있다.
다르게 정의되지 않는 한, 본 명세서에서 사용되는 모든 용어들(기술적이고 과학적인 용어들을 포함하는)은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의하여 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 또한, 일반적으로 사용되는 사전에 정의된 용어와 같은 용어는 관련 기술 및/또는 본 명세서의 맥락에서 그 의미와 일치하는 의미를 갖는 것으로 해석되어야 하고, 본 명세서에서 명시적으로 정의하지 않는 한 이상적이거나 지나치게 공식적인 의미로 해석되어서는 안된다.
상술한 내용들은, 본 발명의 예시적인 실시 예들을 설명하기 위한 것이며, 본 발명을 제한하는 것으로 해석되어서는 안된다. 본 발명의 일부 예시적인 실시 예가 개시되었음에도 불구하고, 통상의 기술자는 첨부된 청구범위들 및 그들의 등가물들에 개시된 바와 같이, 본 발명의 사상 및 범위를 벗어나지 않고 다양한 실시 예들에 대하여 다양한 수정, 추가 및/또는 대체가 가능할 수 있음을 이해할 것이다.
100 : 스토리지 시스템(Storage System)
102 : 호스트 컴퓨터(Host Computer)
104 : 스토리지 장치(Storage Device)
106 : 재설정 처리 장치(Reconfigurable Processing Device, RP device)
108 : 호스트 프로세서(Host Processor)
110 : 호스트 메모리(Host Memory)
112 : 스토리지 인터페이스(Storage Interface)
114 : 재설정 처리 메모리(Reconfigurable Processing Memory, RP Memory)
116 : 재설정 처리 가속기(Reconfigurable Processing Accelerator, RP Accelerator)

Claims (20)

  1. 정렬 연산(동작)과 관련된 데이터 요소들의 배열을 저장하는 스토리지 장치;
    상기 스토리지 장치 및 호스트 컴퓨터 간의 통신을 가능(용이)하게 하는 스토리지 인터페이스; 및
    상기 스토리지 장치에 통신 가능하게 연결된 재설정 (가능한) 처리 장치(reconfigurable processing device)를 포함하되,
    상기 재설정 처리 장치는:
    상기 스토리지 장치로부터 리드(read)된, 상기 스토리지 장치에 저장된 상기 데이터 요소들의 배열에 대응하는 입력 데이터를 저장하는 메모리; 및
    상기 호스트 컴퓨터로부터 수신된 정렬 명령(SORT command)에 따라, 상기 메모리에 저장된 상기 입력 데이터에 대한 상기 정렬 연산을 실행하는 하나 이상의 연산 구성요소(compute component)를 포함하는 커널을 포함하고,
    상기 재설정 처리 장치는 상기 정렬 연산을 가속화하는 상기 하나 이상의 연산 구성요소를 동적으로 인스턴스화(instantiate)하는 스토리지 시스템.
  2. 제 1 항에 있어서,
    상기 스토리지 장치는 SSD(Solid State Drive)를 포함하고,
    상기 재설정 처리 장치는 FPGA(Field Programmable Gate Array)를 포함하는 스토리지 시스템.
  3. 제 2 항에 있어서,
    상기 입력 데이터는 상기 호스트 컴퓨터에 의하여 상기 SSD로부터 리드되고, 상기 호스트 컴퓨터의 프라이머리 메모리(primary memory)에 로드(load)되고,
    상기 FPGA의 상기 메모리는 상기 호스트 컴퓨터의 상기 프라이머리 메모리로부터 상기 입력 데이터를 수신하는 스토리지 시스템.
  4. 제 2 항에 있어서,
    상기 메모리 및 상기 SSD 간의 직접 상호 연결(direct interconnect)을 더 포함하고,
    상기 FPGA는 상기 직접 상호 연결을 통하여 상기 SSD로부터 상기 메모리로 상기 입력 데이터를 리드하는 상기 SSD에 직접적으로 엑세스하는 스토리지 시스템.
  5. 제 4 항에 있어서,
    상기 FPGA 및 상기 SSD는 동일한 회로 보드 상에 구현되는 스토리지 시스템.
  6. 제 4 항에 있어서,
    상기 FPGA는 상기 SSD로부터 데이터를 리드하는 경우, 상기 호스트 컴퓨터를 우회하기 위하여 P2P(Point-to-Point) 통신을 사용하는 상기 직접 상호 연결을 통하여 상기 SSD로 액세스하는 스토리지 시스템.
  7. 제 4 항에 있어서,
    상기 메모리는 DRAM(Dynamic Random-Access Memory)을 포함하는 스토리지 시스템.
  8. 제 1 항에 있어서,
    상기 적어도 하나의 연산 구성요소는 복수의 처리 요소(processing element)들을 포함하고,
    상기 복수의 처리 요소들 각각은 정렬 알고리즘에 따라 상기 입력 데이터에 대응하는 상기 데이터 요소들의 배열의 세그먼트를 정렬하는 스토리지 시스템.
  9. 제 8 항에 있어서,
    상기 복수의 처리 요소들 각각은 로컬 비교기 및 로컬 병합기를 포함하고,
    상기 로컬 비교기 및 상기 로컬 병합기는 상기 정렬 알고리즘을 사용하여 상기 세그먼트로부터 부분적으로 정렬된 배열을 생성하는 스토리지 시스템.
  10. 제 9 항에 있어서,
    상기 적어도 하나의 연산 구성요소는 상기 복수의 처리 요소들 각각의 출력에 연결된 처리 유닛(processing unit)을 더 포함하고,
    상기 처리 유닛은 상기 정렬 알고리즘에 따라 상기 복수의 처리 요소들의 상기 출력들을 정렬하는 스토리지 시스템.
  11. 제 10 항에 있어서,
    상기 처리 유닛은 범용 비교기 및 범용 병합기를 포함하고,
    상기 범용 비교기 및 상기 범용 병합기는 상기 정렬 알고리즘을 사용하여 상기 복수의 처리 요소들에 의하여 상기 부분적으로 정렬된 배열들로부터 상기 입력 데이터의 완전히 정렬된 배열을 생성하는 스토리지 시스템.
  12. 제 11 항에 있어서,
    상기 정렬 알고리즘은 바이토닉 정렬 알고리즘(Bitonic sorting algorithm)인 스토리지 시스템.
  13. 제 11 항에 있어서,
    상기 재설정 처리 장치는 상기 데이터 요소들의 배열의 크기에 따라 런-타임(run-time)에 다수의 상기 복수의 처리 요소들 및 상기 처리 유닛을 동적으로 인스턴스화하는 스토리지 시스템.
  14. 제 13 항에 있어서,
    상기 재설정 처리 장치는:
    상기 데이터 요소들의 배열의 상기 크기를 식별하고,
    적어도 하나의 임계 크기와 상기 데이터 요소들의 배열의 상기 크기를 비교하고,
    상기 비교에 따라 다수의 상기 복수의 처리 요소들 및 상기 처리 유닛을 인스턴스화하는 스토리지 시스템.
  15. 정렬 연산과 관련된 데이터 요소들의 배열을 저장하는 스토리지 장치, 상기 스토리지 장치 및 호스트 컴퓨터 간의 통신을 가능하게 하는 스토리지 인터페이스 및 상기 스토리지 장치에 통신 가능하게 연결된 재설정 처리 장치를 포함하는 스토리지 시스템의 상기 정렬 연산을 동적으로 스케일링(scaling) 하는 방법에 있어서:
    상기 재설정 처리 장치에 의하여, 상기 호스트 컴퓨터로부터 정렬 명령과 관련된 상기 데이터 요소들의 배열 크기를 식별하는 단계;
    상기 재설정 처리 장치에 의하여, 상기 크기와 하나 이상의 임계 크기를 비교하는 단계; 및
    상기 재설정 처리 장치에 의하여, 상기 정렬 연산을 가속화하기 위해 상기 비교에 따라 하나 이상의 연산 구성요소를 인스턴스화(instantiate)하는 단계를 포함하는 방법.
  16. 제 15 항에 있어서,
    상기 스토리지 장치는 SSD(Solid State Drive)를 포함하고,
    상기 재설정 처리 장치는 FPGA(Field Programmable Gate Array)를 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 적어도 하나의 연산 구성요소를 인스턴스화하는 단계는 적어도 하나의 로직 블록 및 상기 FPGA의 커널의 적어도 하나의 상호 연결을 재구성하는 단계를 포함하는 방법.
  18. 제 16 항에 있어서,
    적어도 하나의 로컬 정렬 연산 구성요소(local sort compute component)에 의하여, 상기 데이터 요소들의 배열의 적어도 하나의 세그먼트를 정렬하는 단계; 및
    상기 적어도 하나의 로컬 정렬 연산 구성요소에 의하여, 상기 적어도 하나의 세그먼트의 정렬된 배열을 생성하는 단계를 더 포함하되,
    상기 적어도 하나의 연산 구성요소를 인스턴스화하는 단계는, 상기 재설정 처리 장치에 의하여, 상기 적어도 하나의 로컬 정렬 연산 구성요소를 인스턴스화하는 단계를 포함하는 방법.
  19. 제 16 항에 있어서,
    복수의 로컬 정렬 연산 구성요소들 각각에 의하여, 상기 데이터 요소들의 배열의 상이한 세그먼트를 정렬하는 단계; 및
    상기 복수의 로컬 정렬 연산 구성요소들 각각에 의하여, 대응하는 세그먼트의 부분적으로 정렬된 배열을 생성하는 단계를 더 포함하되,
    상기 적어도 하나의 연산 구성요소를 인스턴스화하는 단계는, 상기 재설정 처리 장치에 의하여, 상기 복수의 로컬 정렬 연산 구성요소들을 인스턴스화하는 단계를 포함하는 방법.
  20. 제 19 항에 있어서,
    범용 정렬 연산 구성요소(global sort compute component)에 의하여, 상기 복수의 로컬 정렬 연산 구성요소들 각각에 의하여 생성된 상기 부분적으로 정렬된 배열을 정렬하는 단계; 및
    상기 범용 정렬 연산 구성요소에 의하여, 상기 부분적으로 정렬된 배열의 정렬으로부터 상기 데이터 요소들의 배열에 대응하는 완전히 정렬된 배열을 생성하는 단계를 더 포함하되,
    상기 적어도 하나의 연산 구성요소를 인스턴스화하는 단계는, 상기 재설정 처리 장치에 의하여, 상기 복수의 로컬 정렬 연산 구성요소들 각각의 출력들에 연결된 상기 범용 정렬 연산 구성요소를 인스턴스화하는 단계를 더 포함하는 방법.
KR1020200094791A 2019-10-29 2020-07-29 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법 KR102663759B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962927626P 2019-10-29 2019-10-29
US62/927,626 2019-10-29
US16/821,811 2020-03-17
US16/821,811 US11249651B2 (en) 2019-10-29 2020-03-17 System and method for hierarchical sort acceleration near storage

Publications (2)

Publication Number Publication Date
KR20210052188A true KR20210052188A (ko) 2021-05-10
KR102663759B1 KR102663759B1 (ko) 2024-05-09

Family

ID=75585979

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200094791A KR102663759B1 (ko) 2019-10-29 2020-07-29 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US11249651B2 (ko)
JP (1) JP7381429B2 (ko)
KR (1) KR102663759B1 (ko)
CN (1) CN112749107B (ko)
TW (1) TWI836132B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11995569B2 (en) 2018-05-22 2024-05-28 Marvell Asia Pte Ltd Architecture to support tanh and sigmoid operations for inference acceleration in machine learning
US11995448B1 (en) * 2018-02-08 2024-05-28 Marvell Asia Pte Ltd Method and apparatus for performing machine learning operations in parallel on machine learning hardware
US11995463B2 (en) 2018-05-22 2024-05-28 Marvell Asia Pte Ltd Architecture to support color scheme-based synchronization for machine learning

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11575916B2 (en) * 2020-10-30 2023-02-07 Advanced Micro Devices, Inc. Top palette colors selection using sorting for palette mode in video encoding
CN113900622B (zh) * 2021-09-22 2022-04-08 中国科学院国家空间科学中心 一种基于fpga的数据信息快速排序方法、系统、设备及存储介质
CN115857805B (zh) * 2022-11-30 2023-06-27 合肥腾芯微电子有限公司 人工智能可计算存储系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050144168A1 (en) * 2003-12-25 2005-06-30 Isamu Kurokawa Storage system with a data sort function
US20110314444A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Compiler-Generated Invocation Stubs for Data Parallel Programming Model
US20150046475A1 (en) * 2013-08-07 2015-02-12 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm
US20190278720A1 (en) * 2018-03-09 2019-09-12 Samsung Electronics Co., Ltd. Method and apparatus for supporting a field programmable gate array (fpga) based add-in-card (aic) solid state drive (ssd)

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070277036A1 (en) 2003-05-23 2007-11-29 Washington University, A Corporation Of The State Of Missouri Intelligent data storage and processing using fpga devices
SG136862A1 (en) 2006-04-21 2007-11-29 Oce Tech Bv Variable speed printing
WO2012142069A2 (en) 2011-04-11 2012-10-18 University Of Florida Research Foundation, Inc. Elastic computing
US9100012B1 (en) * 2012-12-14 2015-08-04 Altera Corporation Adaptable programs using partial reconfiguration
US9256535B2 (en) * 2013-04-04 2016-02-09 Advanced Micro Devices, Inc. Conditional notification mechanism
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US9495418B2 (en) 2013-08-07 2016-11-15 International Business Machines Corporation Scalable acceleration of database query operations
US9251218B2 (en) 2013-08-07 2016-02-02 International Business Machines Corporation Tunable hardware sort engine for performing composite sorting algorithms
US20150149691A1 (en) 2013-09-11 2015-05-28 Glenn Austin Baxter Directly Coupled Computing, Storage and Network Elements With Local Intelligence
US10135737B2 (en) * 2014-09-30 2018-11-20 Nicira, Inc. Distributed load balancing systems
US9904793B2 (en) * 2015-03-23 2018-02-27 Intel Corporation Systems, methods, and apparatus to provide private information retrieval
US9740511B2 (en) 2015-06-04 2017-08-22 Advanced Micro Devices, Inc. Per-block sort for performance enhancement of parallel processors
US10445232B2 (en) 2015-07-14 2019-10-15 Western Digital Technologies, Inc. Determining control states for address mapping in non-volatile memories
US10198264B2 (en) * 2015-12-15 2019-02-05 Intel Corporation Sorting data and merging sorted data in an instruction set architecture
US11740868B2 (en) * 2016-11-14 2023-08-29 Google Llc System and method for sorting data elements of slabs of registers using a parallelized processing pipeline
US20190235863A1 (en) * 2018-01-31 2019-08-01 Qualcomm Incorporated Sort instructions for reconfigurable computing cores
CN109711532B (zh) * 2018-12-06 2023-05-12 东南大学 一种针对硬件实现稀疏化卷积神经网络推断的加速方法
CN109598338B (zh) * 2018-12-07 2023-05-19 东南大学 一种基于fpga的计算优化的卷积神经网络加速器

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050144168A1 (en) * 2003-12-25 2005-06-30 Isamu Kurokawa Storage system with a data sort function
US20110314444A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Compiler-Generated Invocation Stubs for Data Parallel Programming Model
US20150046475A1 (en) * 2013-08-07 2015-02-12 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm
US20190278720A1 (en) * 2018-03-09 2019-09-12 Samsung Electronics Co., Ltd. Method and apparatus for supporting a field programmable gate array (fpga) based add-in-card (aic) solid state drive (ssd)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11995448B1 (en) * 2018-02-08 2024-05-28 Marvell Asia Pte Ltd Method and apparatus for performing machine learning operations in parallel on machine learning hardware
US11995569B2 (en) 2018-05-22 2024-05-28 Marvell Asia Pte Ltd Architecture to support tanh and sigmoid operations for inference acceleration in machine learning
US11995463B2 (en) 2018-05-22 2024-05-28 Marvell Asia Pte Ltd Architecture to support color scheme-based synchronization for machine learning

Also Published As

Publication number Publication date
CN112749107B (zh) 2023-07-25
CN112749107A (zh) 2021-05-04
TWI836132B (zh) 2024-03-21
US11249651B2 (en) 2022-02-15
US20210124500A1 (en) 2021-04-29
KR102663759B1 (ko) 2024-05-09
JP7381429B2 (ja) 2023-11-15
TW202117532A (zh) 2021-05-01
JP2021072107A (ja) 2021-05-06

Similar Documents

Publication Publication Date Title
KR102663759B1 (ko) 스토리지 주변의 계층적 정렬 가속을 위한 시스템 및 방법
US11714780B2 (en) Compiler flow logic for reconfigurable architectures
US10354733B1 (en) Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
Kim et al. In-storage processing of database scans and joins
CN111433758A (zh) 可编程运算与控制芯片、设计方法及其装置
Qiao et al. FANS: FPGA-accelerated near-storage sorting
KR20200108774A (ko) 순환 큐 기반의 명령어 메모리를 포함하는 메모리 장치 및 그 동작방법
TW202215227A (zh) 組態檔案之運行時間修補
Biookaghazadeh et al. Toward multi-fpga acceleration of the neural networks
Dhar et al. Near-memory and in-storage fpga acceleration for emerging cognitive computing workloads
TW202227979A (zh) 用於檢測串流相容及廣播相容的資料存取型樣的編譯時邏輯
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
Paul et al. Energy-efficient hardware acceleration through computing in the memory
US11704535B1 (en) Hardware architecture for a neural network accelerator
US20230237012A1 (en) System for Executing an Application on Heterogeneous Reconfigurable Processors
HeydariGorji et al. In-storage processing of I/O intensive applications on computational storage drives
Jain et al. Merge network for a non-von Neumann accumulate accelerator in a 3D chip
US11442643B2 (en) System and method for efficiently converting low-locality data into high-locality data
US11875247B1 (en) Input batching with serial dynamic memory access
US11625453B1 (en) Using shared data bus to support systolic array tiling
WO2022088171A1 (en) Neural processing unit synchronization systems and methods
US20200401882A1 (en) Learning neural networks of programmable device blocks directly with backpropagation
Wang et al. Lightning Talk: Model, Framework and Integration for In-Storage Computing with Computational SSDs
Chen et al. GRAPHIC: GatheR-And-Process in Highly parallel with In-SSD Compression Architecture in Very Large-Scale Graph

Legal Events

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