KR20230059239A - 스토리지 장치 - Google Patents
스토리지 장치 Download PDFInfo
- Publication number
- KR20230059239A KR20230059239A KR1020210143213A KR20210143213A KR20230059239A KR 20230059239 A KR20230059239 A KR 20230059239A KR 1020210143213 A KR1020210143213 A KR 1020210143213A KR 20210143213 A KR20210143213 A KR 20210143213A KR 20230059239 A KR20230059239 A KR 20230059239A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- graph data
- sub
- volatile memory
- memory
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 253
- 239000000872 buffer Substances 0.000 claims abstract description 62
- 238000007781 pre-processing Methods 0.000 claims abstract description 48
- 239000013598 vector Substances 0.000 claims abstract description 48
- 230000004044 response Effects 0.000 claims abstract description 25
- 238000012546 transfer Methods 0.000 claims description 8
- 230000003139 buffering effect Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 32
- 101000641216 Aquareovirus G (isolate American grass carp/USA/PB01-155/-) Non-structural protein 4 Proteins 0.000 description 16
- 101000927946 Homo sapiens LisH domain-containing protein ARMC9 Proteins 0.000 description 16
- 102100036882 LisH domain-containing protein ARMC9 Human genes 0.000 description 16
- 238000004364 calculation method Methods 0.000 description 15
- 239000008186 active pharmaceutical agent Substances 0.000 description 12
- 101100481702 Arabidopsis thaliana TMK1 gene Proteins 0.000 description 10
- 238000000034 method Methods 0.000 description 10
- 101150076088 MTD1 gene Proteins 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 239000000758 substrate Substances 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000010845 search algorithm Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 101100016038 Arabidopsis thaliana GSTF4 gene Proteins 0.000 description 2
- 101100505877 Arabidopsis thaliana GSTF7 gene Proteins 0.000 description 2
- 101100338016 Arabidopsis thaliana GSTU3 gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 101100058961 Arabidopsis thaliana CALS2 gene Proteins 0.000 description 1
- 101100058964 Arabidopsis thaliana CALS5 gene Proteins 0.000 description 1
- 101100112084 Arabidopsis thaliana CRT2 gene Proteins 0.000 description 1
- 101100235014 Capsicum annuum LCY1 gene Proteins 0.000 description 1
- 102100031885 General transcription and DNA repair factor IIH helicase subunit XPB Human genes 0.000 description 1
- 101000920748 Homo sapiens General transcription and DNA repair factor IIH helicase subunit XPB Proteins 0.000 description 1
- 101100287040 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) ARG82 gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 101150062870 ssl3 gene Proteins 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0653—Monitoring storage devices or systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
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)
- Read Only Memory (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
성능 및 효율성이 향상된 스토리지 장치가 제공된다. 상기 스토리지 장치는 외부 장치로부터 전처리 지시 커맨드를 수신하는 컨트롤러, 오리지널 그래프 데이터를 저장하는 비휘발성 메모리, 및 컨트롤러와 비휘발성 메모리에 연결된 버퍼 메모리를 포함하고, 컨트롤러는, 비휘발성 메모리로부터 오리지널 그래프 데이터를 로드하고, 전처리 지시 커맨드에 응답하여 오리지널 그래프 데이터를 벡터 유사성에 따라 분류함으로써 전처리 그래프 데이터를 생성하고, 전처리 그래프 데이터에 기초하여 메타 데이터를 생성하고, 전처리 그래프 데이터 및 메타 데이터를 비휘발성 메모리에 제공하고, 비휘발성 메모리는 전처리 그래프 데이터 및 메타 데이터를 데이터 블록에 저장하고, 버퍼 메모리는 오리지널 그래프 데이터, 전처리 그래프 데이터 및 메타 데이터를 버퍼링한다.
Description
본 발명은 스토리지 장치에 대한 것이다.
반도체 메모리 장치들은 휘발성 메모리 장치들 및 비휘발성 메모리 장치들을 포함한다. 휘발성 메모리 장치의 리드(Read) 및 라이트(write) 속도는 빠른 반면, 휘발성 메모리 장치는 전원-오프일때, 저장된 내용을 잃을 수 있다. 반대로, 비휘발성 메모리 장치들은 전원-오프인 경우에도, 저장된 내용을 유지하므로, 비휘발성 메모리 장치들은 전원 공급 여부에 관계 없이 유지되어야 하는 컨텐츠를 저장하는 데 이용된다.
예컨대, 휘발성 메모리 장치는 정적 램(SRAM: static RAM), 동적 램(DRAM: dynamic RAM), 동기식 디램(SDRAM: synchronous DRAM) 등을 포함한다. 비휘발성 메모리 장치들은 전원-오프인 경우에도, 저장된 내용을 유지한다. 예컨대, 비휘발성 메모리 장치는 롬(ROM: read only memory), 프로그래머블 롬(PROM: programmable ROM), 전기적 프로그래머블 롬(EPROM: electrically programmable ROM), 전기적 소거 및 프로그램 가능 롬(EEPROM: electrically erasable and programmable ROM), 플래시 메모리(flash memory), 상변화 램(PRAM: phase change RAM), 마그네틱 램(MRAM: magnetic RAM), 저항성 램(RRAM: resistive RAM), 강유전체 램(FRAM: ferroelectric RAM) 등을 포함한다. 플래시 메모리는 NOR 타입 플래시 메모리 및 NAND 타입 플래시 메모리로 분류될 수 있다.
최근에, 프로세서와 가속기를 결합하여 전자 장치의 처리 속도를 향상시키기 위한 시도들이 증가하고 있다. 이러한 시도는 다양한 분야에 걸쳐 이루어지고 있으며, 특히 SSD(solid state drive)와 같은 대용량 스토리지 장치에 있어서도, 가속기 기반의 플랫폼을 갖는 스토리지 장치에 대한 많은 연구가 진행되고 있다.
본 발명이 해결하고자 하는 기술적 과제는, 성능 및 효율성이 향상된 스토리지 장치를 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 장치는 외부 장치로부터 전처리 지시 커맨드를 수신하는 컨트롤러, 오리지널 그래프 데이터를 저장하는 비휘발성 메모리, 및 컨트롤러와 비휘발성 메모리에 연결된 버퍼 메모리를 포함하고, 컨트롤러는, 비휘발성 메모리로부터 오리지널 그래프 데이터를 로드하고, 전처리 지시 커맨드에 응답하여 오리지널 그래프 데이터를 벡터 유사성에 따라 분류함으로써 전처리 그래프 데이터를 생성하고, 전처리 그래프 데이터에 기초하여 메타 데이터를 생성하고, 전처리 그래프 데이터 및 메타 데이터를 비휘발성 메모리에 제공하고, 비휘발성 메모리는 전처리 그래프 데이터 및 메타 데이터를 데이터 블록에 저장하고, 버퍼 메모리는 오리지널 그래프 데이터, 전처리 그래프 데이터 및 메타 데이터를 버퍼링할 수 있다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 장치는 복수의 데이터 블록들을 포함하고, 오리지널 그래프 데이터를 저장하는 비휘발성 메모리, 오리지널 그래프 데이터를 버퍼링하는 버퍼 메모리, 및 버퍼 메모리로부터 오리지널 그래프 데이터를 로드하는 FPGA를 포함하고, FPGA는, 버퍼 메모리의 데이터 용량 및 오리지널 그래프 데이터의 전송 속도 중 적어도 하나에 기초하여 비휘발성 메모리의 복수의 데이터 블록들 중 제1 데이터 블록의 블록 사이즈를 결정하고, 오리지널 그래프 데이터 중 제1 그래프 데이터를 제1 데이터 블록에 저장시킬 수 있다.
상기 기술적 과제를 달성하기 위한 몇몇 실시예에 따른 스토리지 장치는 외부 장치로부터 전처리 지시 커맨드 및 쿼리를 수신하는 컨트롤러, 및 오리지널 그래프 데이터를 저장하는 비휘발성 메모리를 포함하고, 컨트롤러는, 전처리 지시 커맨드에 응답하여 오리지널 그래프 데이터에 기초하여 전처리 그래프 데이터를 생성하여 비휘발성 메모리에 저장시키고, 쿼리에 응답하여 전처리 그래프 데이터를 로드하고, 전처리 그래프 데이터에 기초하여 응답 신호를 출력할 수 있다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시예에 따른 메모리 시스템의 블록도이다.
도 2는 도 1의 비휘발성 메모리의 블록도이다.
도 3은 도 1의 스토리지 컨트롤러와 비휘발성 메모리에 대한 블록도이다.
도 4는 몇몇 실시예에 따른 메모리 셀 어레이를 도시한 예시적인 회로도이다.
도 5는 몇몇 실시예에 따른 FPGA에 대한 블록도이다.
도 6은 몇몇 실시예에 따른 오리지널 그래프 데이터에 대하여 전처리를 수행하는 메모리 시스템에 대한 블록도이다.
도 7은 도 6의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다.
도 8은 도 6의 FPGA의 동작을 설명하기 위한 순서도이다.
도 9는 제2 메모리 셀 어레이에 저장되는 복수의 데이터 셋을 설명하기 위한 도면이다.
도 10 및 도 11은 몇몇 실시예에 따른 가속기를 포함하는 FPGA의 동작을 설명하기 위한 도면이다.
도 12는 몇몇 실시예에 따른 메타 데이터를 설명하는 도면이다.
도 13은 몇몇 실시예에 따른 쿼리에 응답하는 메모리 시스템에 대한 블록도이다.
도 14는 도 13의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다.
도 15는 도 13의 FPGA의 연산 동작을 설명하기 위한 블록도이다.
도 16은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다.
도 17은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다.
도 18은 몇몇 실시예에 따른 스토리지 장치를 포함하는 데이터 센터에 대한 도면이다.
도 2는 도 1의 비휘발성 메모리의 블록도이다.
도 3은 도 1의 스토리지 컨트롤러와 비휘발성 메모리에 대한 블록도이다.
도 4는 몇몇 실시예에 따른 메모리 셀 어레이를 도시한 예시적인 회로도이다.
도 5는 몇몇 실시예에 따른 FPGA에 대한 블록도이다.
도 6은 몇몇 실시예에 따른 오리지널 그래프 데이터에 대하여 전처리를 수행하는 메모리 시스템에 대한 블록도이다.
도 7은 도 6의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다.
도 8은 도 6의 FPGA의 동작을 설명하기 위한 순서도이다.
도 9는 제2 메모리 셀 어레이에 저장되는 복수의 데이터 셋을 설명하기 위한 도면이다.
도 10 및 도 11은 몇몇 실시예에 따른 가속기를 포함하는 FPGA의 동작을 설명하기 위한 도면이다.
도 12는 몇몇 실시예에 따른 메타 데이터를 설명하는 도면이다.
도 13은 몇몇 실시예에 따른 쿼리에 응답하는 메모리 시스템에 대한 블록도이다.
도 14는 도 13의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다.
도 15는 도 13의 FPGA의 연산 동작을 설명하기 위한 블록도이다.
도 16은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다.
도 17은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다.
도 18은 몇몇 실시예에 따른 스토리지 장치를 포함하는 데이터 센터에 대한 도면이다.
이하 첨부된 도면을 참조하여, 본 발명의 기술적 사상에 따른 실시예들에 대해 설명한다.
도 1은 몇몇 실시예에 따른 메모리 시스템의 블록도이다.
도 1을 참조하면, 메모리 시스템(1)은 호스트 장치(20) 및 스토리지 장치(10)를 포함할 수 있다. 호스트 장치(20)는 호스트 컨트롤러(201) 및 호스트 메모리(202)를 포함할 수 있다. 호스트 컨트롤러(201)는 호스트 장치(20)의 전반적인 동작을 제어할 수 있다. 호스트 메모리(202)는 외부로부터 전송되는 데이터, 스토리지 장치(10)로 전송될 데이터 또는 스토리지 장치(10)로부터 전송되는 데이터를 임시적으로 저장할 수 있다. 호스트 장치(20)는 어플리케이션 프로세서(application processor, AP)로 구현될 수 있다. 하지만 본 발명의 실시예는 이에 제한되지 않는다.
스토리지 장치(10)는 FPGA(100), 스토리지 컨트롤러(200), 버퍼 메모리(300) 및 비휘발성 메모리(500)를 포함할 수 있다.
스토리지 장치(10)는 호스트 장치(20)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 일 예로서, 스토리지 장치(10)는 SSD(Solid State Drive), 임베디드(embedded) 메모리 및 착탈 가능한 외장(external) 메모리 중 적어도 하나를 포함할 수 있다. 스토리지 장치(10)가 SSD인 경우, 스토리지 장치(10)는 NVMe(non-volatile memory express) 표준을 따르는 장치일 수 있다. 스토리지 장치(10)가 임베디드 메모리 혹은 외장(external) 메모리인 경우, 스토리지 장치(10)는 UFS(universal flash storage) 혹은 eMMC(embedded multi-media card) 표준을 따르는 장치일 수 있다. 스토리지 장치(10)와 호스트 장치(20)는 각각 채용된 표준 프로토콜에 따른 패킷을 생성하고 이를 전송할 수 있다.
스토리지 장치(10)의 비휘발성 메모리(400)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 다른 예로서, 스토리지 장치(10)는 다른 다양한 종류의 비휘발성 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(10)는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torgue MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM) 및 다른 다양한 종류의 메모리가 적용될 수 있다.
FPGA(100)는 버퍼 메모리(300)에 저장된 데이터에 대해 다양한 종류의 연산, 계산 등을 수행할 수 있다. FPGA(100)는 하드웨어 로직 구성에 맵핑된 알고리즘을 이용하여, 버퍼 메모리(300)에 임시 저장된 데이터 셋을 이용하여 연산을 수행할 수 있다. FPGA(100)는 호스트 장치(20)의 개입 없이, 비휘발성 메모리(400)에 저장된 데이터 셋을 이용하여 연산을 수행할 수 있다. 즉, 본 실시예에 따른 FPGA(100)를 포함하는 스토리지 장치(10)는 비휘발성 메모리(400)에 저장된 데이터 셋을 이용한 연산을 처리하기 위해, 호스트 장치(20)로 데이터 셋을 제공해서 호스트 장치(20)가 데이터 셋을 연산 처리하지 않고, 스토리지 장치(10)가 FPGA(100)를 통해 자체적으로 연산을 완료하고 산출한 결과 데이터를 호스트 장치(20)에 제공할 수 있다. FPGA(100)에 대한 보다 상세한 설명은 후술하도록 한다.
스토리지 컨트롤러(200)는 호스트 인터페이스(211), 메모리 인터페이스(212) 및 CPU(central processing unit)(213)를 포함할 수 있다. 또한, 스토리지 컨트롤러(210)는 플래시 변환 레이어(Flash Translation Layer; FTL)(214), 패킷 매니저(215), 버퍼 메모리(216), ECC(error correction code)(217) 엔진 및 AES(advanced encryption standard) 엔진(218)을 더 포함할 수 있다. 스토리지 컨트롤러(200)는 플래시 변환 레이어(FTL)(214)가 로딩되는 워킹 메모리(미도시)를 더 포함할 수 있으며, CPU(213)가 플래시 변환 레이어를 실행하는 것에 의해 비휘발성 메모리(400)에 대한 데이터 라이트 및 리드 동작이 제어될 수 있다.
호스트 인터페이스(211)는 호스트 장치(20)와 패킷(packet)을 송수신할 수 있다. 호스트 장치(20)로부터 호스트 인터페이스(211)로 전송되는 패킷은 커맨드(command) 혹은 비휘발성 메모리(400)에 라이트 될 데이터 등을 포함할 수 있으며, 호스트 인터페이스(211)로부터 호스트 장치(20)로 전송되는 패킷은 커맨드에 대한 응답(response) 혹은 비휘발성 메모리(400)로부터 리드된 데이터 등을 포함할 수 있다. 메모리 인터페이스(212)는 비휘발성 메모리(400)에 라이트 될 데이터를 비휘발성 메모리(400)로 송신하거나, 비휘발성 메모리(400)로부터 리드된 데이터를 수신할 수 있다. 이러한 메모리 인터페이스(212)는 토글(Toggle) 혹은 온파이(Open NAND Flash Interface; ONFI)와 같은 표준 규약을 준수하도록 구현될 수 있다.
플래시 변환 계층(214)은 어드레스 매핑(address mapping), 웨어-레벨링(wear-leveling), 가비지 콜렉션(garbage collection)과 같은 여러 기능을 수행할 수 있다. 어드레스 매핑 동작은 호스트 장치(20)로부터 수신한 논리 어드레스(logical address)를, 비휘발성 메모리(400) 내에 데이터를 실제로 저장하는 데 사용되는 물리 어드레스(physical address)로 바꾸는 동작이다. 웨어-레벨링은 비휘발성 메모리(400) 내의 블록(block)들이 균일하게 사용되도록 하여 특정 블록의 과도한 열화를 방지하기 위한 기술로, 예시적으로 물리 블록(physical block)들의 소거 카운트들을 밸런싱하는 펌웨어 기술을 통해 구현될 수 있다. 가비지 콜렉션은, 블록의 유효 데이터를 새 블록에 복사한 후 기존 블록을 소거(erase)하는 방식을 통해 비휘발성 메모리(400) 내에서 사용 가능한 용량을 확보하기 위한 기술이다.
패킷 매니저(215)는 호스트 장치(20)와 협의된 인터페이스의 프로토콜에 따른 패킷(Packet)을 생성하거나, 호스트 장치(20)로부터 수신된 패킷(Packet)으로부터 각종 정보를 파싱할 수 있다.
버퍼 메모리(216)는 비휘발성 메모리(400)에 라이트 될 데이터 혹은 비휘발성 메모리(400)로부터 리드될 데이터를 임시로 저장할 수 있다. 버퍼 메모리(216)는 스토리지 컨트롤러(200) 내에 구비되는 구성일 수 있으나, 스토리지 컨트롤러(200)의 외부에 배치되어도 무방하다.
ECC 엔진(217)은 비휘발성 메모리(400)로부터 리드된 데이터에 대한 오류 검출 및 정정 기능을 수행할 수 있다. 구체적으로, ECC 엔진(217)은 비휘발성 메모리(400)에 라이트 될 데이터에 대하여 패리티 비트(parity bit)들을 생성할 수 있으며, 이와 같이 생성된 패리티 비트들은 라이트 데이터와 함께 비휘발성 메모리(400) 내에 저장될 수 있다. 비휘발성 메모리(400)로부터의 데이터 리드 시, ECC 엔진(217)은 리드 데이터와 함께 비휘발성 메모리(400)로부터 리드되는 패리티 비트들을 이용하여 리드 데이터의 에러를 정정하고, 에러가 정정된 리드 데이터를 출력할 수 있다.
AES 엔진(218)은, 스토리지 컨트롤러(200)로 입력되는 데이터에 대한 암호화(encryption) 동작과 복호화(decryption) 동작 중 적어도 하나를, 대칭 키 알고리즘(symmetric-key algorithm)를 이용하여 수행할 수 있다.
버퍼 메모리(300)는 비휘발성 메모리(400)에 저장된 데이터를 버퍼링할 수 있다. 또한, 버퍼 메모리(300)는 FPGA(100)로부터 전달된 데이터를 버퍼링할 수 있다. 즉, 버퍼 메모리(300)는 FPGA(100)가 비휘발성 메모리(400)에 저장된 데이터 셋을 이용하는 경우, 비휘발성 메모리(400)에 저장된 데이터 셋을 FPGA(100)가 이용할 수 있도록 임시 저장할 수 있다. 비휘발성 메모리(400)는 FPGA(100)가 연산을 할 때에 필요한 데이터 셋을 저장할 수 있다.
도 2는 도 1의 비휘발성 메모리의 블록도이다.
도 2를 참조하면, 비휘발성 메모리(400)는 메모리 셀 어레이(410), 어드레스 디코더(420), 전압 발생기(430), 리드 라이트 회로(440) 및 제어 로직 회로(450)(control logic) 등을 포함할 수 있다.
메모리 셀 어레이(410)는 워드 라인(WL)들을 통해 어드레스 디코더(420)에 연결될 수 있다. 메모리 셀 어레이(410)는 비트 라인(BL)들을 통해 리드 라이트 회로(440)에 연결될 수 있다. 메모리 셀 어레이(410)는 복수의 메모리 셀들을 포함할 수 있다. 예를 들어, 행(row) 방향으로 배열되는 메모리 셀들은 워드 라인(WL)에 연결될 수 있다. 예를 들어, 열(column) 방향으로 배열되는 메모리 셀들은 비트 라인(BL)에 연결될 수 있다.
어드레스 디코더(420)는 워드 라인(WL)을 통해 메모리 셀 어레이(410)에 연결될 수 있다. 어드레스 디코더(420)는 제어 로직 회로(450)의 제어에 응답하여 동작할 수 있다. 어드레스 디코더(420)는 스토리지 컨트롤러(200)로부터 어드레스(ADDR)를 제공받을 수 있다. 어드레스 디코더(420)는 전압 발생기(430)로부터 프로그램 및 리드 등의 동작에 필요한 전압을 제공받을 수 있다.
어드레스 디코더(420)는 수신한 어드레스(ADDR) 중 행 어드레스를 디코딩할 수 있다. 어드레스 디코더(420)는 디코딩된 행 어드레스를 이용하여 워드 라인(WL)을 선택할 수 있다. 디코딩된 열 어드레스(DCA)는 리드 라이트 회로(440)에 제공될 수 있다. 예를 들어, 어드레스 디코더(420)는 행 디코더, 열 디코더 및 어드레스 버퍼 등을 포함할 수 있다.
전압 발생기(430)는 제어 로직 회로(450)의 제어에 따라 액세스 동작에 필요한 전압을 생성할 수 있다. 예를 들어, 전압 발생기(430)는 프로그램 동작을 수행하기 위해 필요한 프로그램 전압과 프로그램 검증 전압을 생성할 수 있다. 예를 들어, 전압 발생기(430)는 리드 동작을 수행하기 위하여 필요한 리드 전압들을 생성하고, 이레이즈 동작을 수행하기 위하여 필요한 이레이즈 전압과 이레이즈 검증 전압 등을 생성할 수 있다. 또한, 전압 발생기(430)는 각 동작을 수행하기 위해 필요한 전압을 어드레스 디코더(420)에 제공할 수 있다.
리드 라이트 회로(440)는 비트 라인(BL)을 통해 메모리 셀 어레이(410)에 연결될 수 있다. 리드 라이트 회로(440)는 스토리지 컨트롤러(200)와 데이터(DATA)를 주고받을 수 있다. 리드 라이트 회로(440)는 제어 로직 회로(450)의 제어에 응답하여 동작할 수 있다. 리드 라이트 회로(440)는 어드레스 디코더(420)로부터 디코딩된 열 어드레스(DCA)를 제공받을 수 있다. 리드 라이트 회로(440)는 디코딩된 열 어드레스(DCA)를 이용하여 비트 라인(BL)을 선택할 수 있다.
예를 들어, 리드 라이트 회로(440)는 수신한 데이터(DATA)를 메모리 셀 어레이(410)에 프로그램할 수 있다. 리드 라이트 회로(440)는 메모리 셀 어레이(410)로부터 데이터를 리드하고, 리드한 데이터를 외부(예를 들어, 스토리지 컨트롤러(200))에 제공할 수 있다. 예를 들어, 리드 라이트 회로(440)는 감지 증폭기, 라이트 드라이버, 열 선택 회로 및 페이지 버퍼 등과 같은 구성을 포함할 수 있다. 즉, 리드 라이트 회로(440)는 스토리지 컨트롤러(200)로부터 수신한 데이터(DATA)를 페이지 버퍼에 버퍼링하고, 버퍼링된 데이터(DATA)를 메모리 셀 어레이(410)에 프로그램할 수 있다.
제어 로직 회로(450)는 어드레스 디코더(420), 전압 발생기(430) 및 리드 라이트 회로(440)와 연결될 수 있다. 제어 로직 회로(450)는 비휘발성 메모리(400)의 동작을 제어할 수 있다. 제어 로직 회로(450)은 스토리지 컨트롤러(200)로부터 제공된 제어 신호(CRTL) 및 커맨드(CMD)(예를 들어, 라이트 커맨드 및 리드 커맨드 등)에 응답하여 동작할 수 있다.
도 3은 도 1의 스토리지 컨트롤러와 비휘발성 메모리에 대한 블록도이다.
도 3을 참조하면, 스토리지 장치(10)는 스토리지 컨트롤러(200) 및 비휘발성 메모리(400)를 포함할 수 있다. 스토리지 장치(10)는 복수의 채널들(CH1~CHm)을 지원할 수 있고, 스토리지 컨트롤러(200) 및 비휘발성 메모리(400)는 복수의 채널들(CH1~CHm)을 통해 연결될 수 있다. 예를 들어, 스토리지 장치(10)는 SSD(Solid State Drive)와 같은 스토리지 장치로 구현될 수 있다.
비휘발성 메모리(400)는 복수의 비휘발성 메모리 장치들(NVM11~NVMmn)을 포함할 수 있다. 비휘발성 메모리 장치들(NVM11~NVMmn) 각각은 대응하는 웨이(way)를 통해 복수의 채널들(CH1~CHm) 중 하나에 연결될 수 있다. 예를 들어, 비휘발성 메모리 장치들(NVM11~NVM1n)은 웨이들(W11~W1n)을 통해 제1 채널(CH1)에 연결되고, 비휘발성 메모리 장치들(NVM21~NVM2n)은 웨이들(W21~W2n)을 통해 제2 채널(CH2)에 연결될 수 있다. 예시적인 실시 예에서, 비휘발성 메모리 장치들(NVM11~NVMmn) 각각은 스토리지 컨트롤러(200)로부터의 개별적인 명령에 따라 동작할 수 있는 임의의 메모리 단위로 구현될 수 있다. 예를 들어, 비휘발성 메모리 장치들(NVM11~NVMmn) 각각은 칩(chip) 또는 다이(die)로 구현될 수 있으나, 본 발명이 이에 한정되는 것은 아니다.
스토리지 컨트롤러(200)는 복수의 채널들(CH1~CHm)을 통해 비휘발성 메모리(400)와 신호들을 송수신할 수 있다. 예를 들어, 스토리지 컨트롤러(200)는 채널들(CH1~CHm)을 통해 커맨드들(CMDa~CMDm), 어드레스들(ADDRa~ADDRm), 및 데이터(DATAa~DATAm)를 비휘발성 메모리(400)로 전송하거나, 비휘발성 메모리(400)로부터 데이터(DATAa~DATAm)를 수신할 수 있다.
스토리지 컨트롤러(200)는 각각의 채널을 통해 해당 채널에 연결된 비휘발성 메모리 장치들 중 하나를 선택하고, 선택된 비휘발성 메모리 장치와 신호들을 송수신할 수 있다. 예를 들어, 스토리지 컨트롤러(200)는 제1 채널(CH1)에 연결된 비휘발성 메모리 장치들(NVM11~NVM1n) 중 비휘발성 메모리 장치(NVM11)를 선택할 수 있다. 스토리지 컨트롤러(200)는 선택된 비휘발성 메모리 장치(NVM11)로 제1 채널(CH1)을 통해 커맨드(CMDa), 어드레스(ADDRa), 및 데이터(DATAa)를 전송하거나, 선택된 비휘발성 메모리 장치(NVM11)로부터 데이터(DATAa)를 수신할 수 있다.
스토리지 컨트롤러(200)는 서로 다른 채널들을 통해 비휘발성 메모리(400)와 신호들을 병렬적으로 송수신할 수 있다. 예를 들어, 스토리지 컨트롤러(200)는 제1 채널(CH1)을 통해 비휘발성 메모리(400)로 커맨드(CMDa)를 전송하는 동안 제2 채널(CH2)을 통해 비휘발성 메모리(400)로 커맨드(CMDb)를 전송할 수 있다. 예를 들어, 스토리지 컨트롤러(200)는 제1 채널(CH1)을 통해 비휘발성 메모리(400)로부터 데이터(DATAa)를 수신하는 동안 제2 채널(CH2)을 통해 비휘발성 메모리(400)로부터 데이터(DATAb)를 수신할 수 있다.
스토리지 컨트롤러(200)는 비휘발성 메모리(400)의 전반적인 동작을 제어할 수 있다. 스토리지 컨트롤러(200)는 채널들(CH1~CHm)로 신호를 전송하여 채널들(CH1~CHm)에 연결된 비휘발성 메모리 장치들(NVM11~NVMmn) 각각을 제어할 수 있다. 예를 들어, 스토리지 컨트롤러(200)는 제1 채널(CH1)로 커맨드(CMDa) 및 어드레스(ADDRa)를 전송하여 비휘발성 메모리 장치들(NVM11~NVM1n) 중 선택된 하나를 제어할 수 있다.
비휘발성 메모리 장치들(NVM11~NVMmn) 각각은 스토리지 컨트롤러(200)의 제어에 따라 동작할 수 있다. 예를 들어, 비휘발성 메모리 장치(NVM11)는 제1 채널(CH1)로 제공되는 커맨드(CMDa), 어드레스(ADDRa), 및 데이터(DATAa)에 따라 데이터(DATAa)를 프로그램할 수 있다. 예를 들어, 비휘발성 메모리 장치(NVM21)는 제2 채널(CH2)로 제공되는 커맨드(CMDb) 및 어드레스(ADDRb)에 따라 데이터(DATAb)를 독출하고, 독출된 데이터(DATAb)를 스토리지 컨트롤러(200)로 전송할 수 있다.
도 3에는 비휘발성 메모리(400)가 m개의 채널을 통해 스토리지 컨트롤러(200)와 통신하고, 비휘발성 메모리(400)가 각각의 채널에 대응하여 n개의 비휘발성 메모리 장치를 포함하는 것으로 도시되나, 채널들의 개수와 하나의 채널에 연결된 비휘발성 메모리 장치의 개수는 다양하게 변경될 수 있다.
도 4는 몇몇 실시예에 따른 메모리 셀 어레이를 도시한 예시적인 회로도이다.
도 4를 참조하면, 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)이 기판(도시되지 않음) 상에 제1 방향(x) 및 제2 방향(y)으로 배치될 수 있다. 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)은 제3 방향(z)으로 연장된 형태를 가질 수 있다. 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)은 기판(도시되지 않음) 상에, 또는 기판(도시되지 않음) 내에 형성되는 공통 소스 라인(CSL: Common Source Line)에 공통으로 연결될 수 있다. 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)의 제3 방향(z)으로의 최하단에 공통 소스 라인(CSL)이 연결되는 것으로 도시되어 있으나, 공통 소스 라인(CSL)은 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)의 제3 방향(z)으로의 최하단에 전기적으로 연결되는 것으로 충분하며, 물리적으로 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)의 하단에 위치하는 것으로 한정되지 않는다. 또한, 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33)은 3 x 3 배열로 배치되는 것으로 본 도면에 도시되었으나, 메모리 셀 어레이(410)에 배치된 복수의 셀 스트링들의 배치 형태와 수가 이에 제한되는 것은 아니다.
몇몇 셀 스트링들(NS11, NS12, 및 NS13)은 제1 그라운드 선택 라인(GSL: Ground Select Line)(GSL1)과 연결될 수 있다. 몇몇 셀 스트링들(NS21, NS22, 및 NS23)은 제2 그라운드 선택 라인(GSL2)과 연결될 수 있다. 몇몇 셀 스트링들(NS31, NS32, 및 NS33)은 제3 그라운드 선택 라인(GSL3)과 연결될 수 있다.
또한, 몇몇 셀 스트링들(NS11, NS12, 및 NS13)은 제1 스트링 선택 라인(SSL: String Select Line)(SSL1)과 연결될 수 있다. 몇몇 셀 스트링들(NS21, NS22, 및 NS23)은 제2 스트링 선택 라인(SSL2)과 연결될 수 있다. 몇몇 셀 스트링들(NS31, NS32, 및 NS33)은 제3 스트링 선택 라인(SSL3)과 연결될 수 있다.
복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각은 스트링 선택 라인 각각과 연결되는 스트링 선택 트랜지스터(SST: String Select Transistor)를 포함할 수 있다. 또한, 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각은 그라운드 선택 라인 각각과 연결되는 그라운드 선택 트랜지스터(GST: Ground Select Transistor)를 포함할 수 있다.
복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각의 그라운드 선택 트랜지스터의 일단은 공통 소스 라인(CSL)과 연결될 수 있다. 또한, 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각은 그라운드 선택 트랜지스터와 스트링 선택 트랜지스터 사이에 복수의 메모리 셀들이 제3 방향(z)으로 차례로 적층될 수 있다. 본 도면엔 도시되지 않았으나, 복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각은 그라운드 선택 트랜지스터와 스트링 선택 트랜지스터 사이에 더미 셀들이 포함될 수 있다. 또한, 각 스트링에 포함된 스트링 선택 트랜지스터의 개수가 본 도면에 제한되는 것은 아니다.
예를 들어, 셀 스트링(NS11)은 제3 방향(z)으로의 최하단에 배치된 그라운드 선택 트랜지스터(GST11)와, 그라운드 선택 트랜지스터(GST11) 상의 제3 방향(z)으로 차례로 적층된 복수의 메모리 셀들(M11_1 내지 M11_8)과, 최상단 메모리 셀(M11_8) 상의 제3 방향(z)으로 적층된 스트링 선택 트랜지스터(SST11)를 포함할 수 있다. 또한, 셀 스트링(NS21)은 제3 방향(z)으로의 최하단에 배치된 그라운드 선택 트랜지스터(GST21)와, 그라운드 선택 트랜지스터(GST21) 상의 제3 방향(z)으로 차례로 적층된 복수의 메모리 셀들(M21_1 내지 M21_8)과, 최상단 메모리 셀(M21_8) 상의 제3 방향(z)으로 적층된 스트링 선택 트랜지스터(SST21)를 포함할 수 있다. 또한, 셀 스트링(NS31)은 제3 방향(z)으로의 최하단에 배치된 그라운드 선택 트랜지스터(GST31)와, 그라운드 선택 트랜지스터(GST31) 상의 제3 방향(z)으로 차례로 적층된 복수의 메모리 셀들(M31_1 내지 M31_8)과, 최상단 메모리 셀(M31_8) 상의 제3 방향(z)으로 적층된 스트링 선택 트랜지스터(SST31)를 포함할 수 있다. 이하, 다른 스트링의 구성도 이와 유사할 수 있다.
기판(도시되지 않음) 또는 그라운드 선택 트랜지스터로부터 동일한 제3 방향(z)으로의 높이에 위치한 메모리 셀들은 각각의 워드 라인을 통해 전기적으로 공통으로 연결될 수 있다. 예를 들어, 메모리 셀들(M11_1, M21_1, 및 M31_1)이 형성된 높이의 메모리 셀들은 제1 워드 라인(WL1)과 연결될 수 있다. 또한, 메모리 셀들(M11_2, M21_2, 및 M31_2)이 형성된 높이의 메모리 셀들은 제2 워드 라인(WL2)과 연결될 수 있다. 이하, 제3 워드 라인(WL3) 내지 제8 워드 라인(WL8)과 연결되는 메모리 셀들의 배치 및 구조도 이와 유사하므로 설명을 생략한다.
복수의 셀 스트링들(NS11, NS21, NS31, NS12, NS22, NS32, NS13, NS23, 및 NS33) 각각의 스트링 선택 트랜지스터의 일단은 비트 라인(BL1, BL2, 및 BL3)과 연결될 수 있다. 예를 들어, 스트링 선택 트랜지스터(ST11, SST21, 및 SST31)는 제2 방향(y)으로 연장되는 비트 라인(BL1)과 연결될 수 있다. 비트 라인(BL2, 및 BL3)과 연결되는 다른 스트링 선택 트랜지스터에 대한 설명도 이와 유사하므로 설명을 생략한다.
하나의 스트링(또는 그라운드) 선택 라인 및 하나의 워드 라인에 대응하는 메모리 셀들은 하나의 페이지를 형성할 수 있다. 쓰기 동작 및 읽기 동작은 각 페이지의 단위로 수행될 수 있다. 각 페이지의 각 메모리 셀들은 둘 이상의 비트들을 저장할 수도 있다. 각 페이지의 메모리 셀들에 기입되는 비트들은 논리 페이지들을 형성할 수 있다.
메모리 셀 어레이(410)는 3차원 메모리 어레이로 제공될 수 있다. 3차원 메모리 어레이는 기판(도시되지 않음) 및 메모리 셀들의 동작에 연관된 회로의 위에 배치되는 활성 영역을 갖는 메모리 셀들의 어레이들의 하나 또는 그 이상의 물리 레벨들에 획일적으로(monolithically) 형성될 수 있다. 메모리 셀들의 동작에 연관된 회로는 기판 내에 또는 기판 위에 위치할 수 있다. 획일적으로 형성되는 것은, 3차원 어레이의 각 레벨의 레이어들이 3차원 어레이의 하위 레벨의 레이어들 위에 직접 증착될 수 있음을 의미한다.
도 5는 몇몇 실시예에 따른 FPGA에 대한 블록도이다.
도 5를 참조하면, FPGA(100)는 가속기(110), 전처리기(120), 버퍼 메모리(130) 및 최종 연산기(140)를 포함할 수 있다.
가속기(110)는 자체적으로 연산을 수행할 수 있다. 예를 들어, 가속기(110)는 호스트 장치(20)가 수행할 수 있는 연산을 대신하여 수행할 수 있다. 가속기(110)는 비휘발성 메모리(400)에 저장된 데이터 셋에 기초하여 연산을 수행할 수 있다. 가속기(110)는 호스트 장치(20)로부터의 커맨드에 응답하여 연산을 수행하고, 연산 수행 결과를 호스트 장치(20)에 제공할 수 있다.
가속기(110)는 근접 이웃 탐색 알고리즘(nearest neighbor search) 중에서 HNSW(hierarchical navigable small world)를 이용하여 연산을 수행할 수 있다. 본 명세서에서, 가속기(110)가 HNSW 알고리즘을 이용하여 연산을 수행하는 것으로 설명되지만, 이는 설명을 위한 예시일 뿐이며, 실시예는 이에 제한되지 않는다. 예를 들어, 가속기(110)는 근사 근접 이웃(approximate nearest neighbor) 탐색 알고리즘을 이용하여 연산을 수행할 수 있다. 다른 예를 들어, 가속기(110)는 고정 반지름 근사 근접 이웃(Fixed-radius near neighbors) 탐색 알고리즘을 이용하여 연산을 수행할 수 있다.
가속기(110)는 연산에 필요한 데이터 셋과 쿼리를 수신할 수 있다. 예를 들어, 가속기(110)는 연산에 필요한 데이터 셋을 비휘발성 메모리(400) 또는 버퍼 메모리(300)로부터 수신할 수 있다. 또한, 가속기(110)는 연산에 필요한 쿼리를 호스트 장치(20)로부터 수신할 수 있다. 가속기(110)는 쿼리에 응답하여 데이터 셋에 대한 연산을 수행한 결과를 출력할 수 있다. 또한, 가속기(110)는 연산을 수행한 결과를 호스트 장치(20) 또는 비휘발성 메모리(400)에 제공할 수 있다.
전처리기(120)는 버퍼 메모리(300)로부터 제공되는 데이터 셋에 대한 전처리(pre-processing)를 수행할 수 있다. 예를 들어, 전처리기(120)는 비휘발성 메모리(400)에 저장된 데이터 셋을 버퍼 메모리(300)를 통해 수신할 수 있다. 전처리기(120)는 데이터 셋에 포함되는 벡터 데이터를 확인할 수 있다. 여기서 벡터 데이터는 복수의 차원 정보를 포함할 수 있다. 전처리기(120)는 복수의 벡터 데이터들 간의 유사성을 판단할 수 있다. 예를 들어, 전처리기(120)는 HNSW 알고리즘을 이용하여 벡터 데이터들 간의 유사성을 판단할 수 있다. 전처리기(120)는 유사한 벡터 데이터를 포함하는 전처리 데이터 셋을 생성할 수 있다. 즉, 전처리 데이터 셋은 기존의 벡터 유사성을 갖는 벡터 데이터를 갖는 데이터 셋에 해당할 수 있다. 이에 대한 상세한 설명은 후술하도록 한다.
버퍼 메모리(130)는 비휘발성 메모리(400)로부터의 데이터 셋을 버퍼링할 수 있다. 예를 들어, 버퍼 메모리(130)는 버퍼 메모리(300)에 버퍼링된 데이터 셋을 다시 버퍼링할 수 있다. 여기서 버퍼 메모리(130)는 FPGA(100)에서 생략될 수도 있다. 즉, 버퍼 메모리(300)에 버퍼링된 데이터 셋이 가속기(110) 또는 전처리기(120)에 바로 전달될 수 있다. 하지만 본 발명의 실시예는 이에 제한되지 않는다.
최종 연산기(140)는 가속기(110)로부터 생성된 최종 후보 데이터를 이용하여 최종 결과 데이터를 산출할 수 있다. 몇몇 실시예에서, 최종 연산기(140)는 Brute-force 연산을 수행할 수 있다. 몇몇 실시예에서, 최종 연산기(140)는 FPGA(100)와 다른 칩에 배치될 수 있다. 다른 몇몇 실시예에서, 최종 연산기(140)는 호스트 장치(20)에 포함될 수 있다. 이 경우, 가속기(110)로부터 최종 후보 데이터를 제공받아 호스트 장치(20)에 포함된 최종 연산기(140)가 최종 결과 데이터를 산출할 수 있다.
이하, 도 6 내지 도 12를 참조하여 전처리기(120)의 동작에 대하여 설명한다.
도 6은 몇몇 실시예에 따른 오리지널 그래프 데이터에 대하여 전처리를 수행하는 메모리 시스템에 대한 블록도이다. 도 7은 도 6의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다.
도 6 및 도 7을 참조하면, 호스트 장치(20)는 FPGA(100)에 전처리 지시 커맨드(PCMD)를 제공할 수 있다(S500). 여기서 전처리 지시 커맨드(PCMD)는 전처리기(120)가 전처리 동작을 수행할 것을 지시하는 커맨드에 해당한다. 즉, 전처리기(120)는 전처리 지시 커맨드(PCMD)에 응답하여 데이터 셋에 대한 전처리를 수행할 수 있다. 하지만 본 발명의 실시예는 이에 제한되지 않으며, 전처리 지시 커맨드(PCMD)가 전달되지 않는 경우에도, 전처리기(120)가 전처리 동작을 수행할 수도 있다.
FPGA(100)는 오리지널 그래프 데이터(OGD)를 로드할 수 있다(S501). 즉, FPGA(100)는 전처리 지시 커맨드(PCMD)에 응답하여 오리지널 그래프 데이터(OGD)를 로드할 수 있다. 이에 따라서 비휘발성 메모리(S502)는 FPGA(100)에 오리지널 그래프 데이터(OGD)를 제공할 수 있다(S502). 즉, 제1 메모리 셀 어레이(410a)에 저장된 오리지널 그래프 데이터(OGD)는 버퍼 메모리(300)를 통해 전처리기(120)에 제공될 수 있다.
여기서 오리지널 그래프 데이터(OGD)는 복수의 이미지 벡터 데이터를 포함할 수 있다. 몇몇 실시예에서, 하나의 이미지 벡터 데이터는 128 차원의 데이터를 포함할 수 있다. 하나의 차원의 데이터는 4B에 해당할 수 있으므로, 하나의 이미지 벡터 데이터는 512B에 해당할 수 있다. 또한, 이미지 벡터 데이터는 최근접 벡터 데이터에 대한 리스트를 포함할 수 있다. 이에 따라서, 이미지 벡터 데이터는 근접성에 따라서 연결될 수 있으며, 이는 오리지널 그래프 데이터(OGD)로 나타내질 수 있다.
전처리기(120)는 전처리 지시 커맨드(PCMD)와 오리지널 그래프 데이터(OGD)를 수신할 수 있다. 전처리기(120)는 전처리 지시 커맨드(PCMD)에 응답하여 오리지널 그래프 데이터(OGD)에 대한 전처리를 수행할 수 있다.
먼저, 전처리기(120)는 스토리지 장치(10)의 환경 정보에 기초하여 데이터 블록(BLK1 내지 BLKn)의 블록 사이즈를 결정할 수 있다(S503). 즉, 전처리기(120)는 비휘발성 메모리(400)의 제2 메모리 셀 어레이(410b)에 포함되는 데이터 블록(BLK1 내지 BLKn)에 저장되는 데이터의 블록 사이즈를 결정할 수 있다.
도 8은 도 6의 FPGA의 동작을 설명하기 위한 순서도이다. 도 9는 제2 메모리 셀 어레이에 저장되는 복수의 데이터 셋을 설명하기 위한 도면이다.
도 8 및 도 9를 참조하면, FPGA(100)는 오리지널 그래프 데이터(OGD)를 버퍼 메모리(300)에 로드할 수 있다(S510). 전처리기(120)는 스토리지 장치(10)의 환경 정보에 기초하여 임계 값(threshold value)를 결정할 수 있다(S511). 예를 들어, 제2 메모리 셀 어레이(410b)는 제1 내지 제n 데이터 블록(BLK1 내지 BLKn)을 포함할 수 있다. 제1 데이터 블록(BLK1)의 블록 사이즈는 제1 블록 사이즈(SZ1)에 해당할 수 있고, 제2 데이터 블록(BLK2)의 블록 사이즈는 제2 블록 사이즈(SZ2)에 해당할 수 있고, 제n 데이터 블록(BLKn)의 블록 사이즈는 제n 블록 사이즈(SZn)에 해당할 수 있다. 즉, 전처리기(120)는 제1 내지 제n 블록 사이즈(SZn)를 결정할 수 있다.
여기서, 전처리기(120)는 스토리지 장치(120)의 내부 환경 정보에 기초하여 블록 사이즈의 임계 값을 결정할 수 있다. 예를 들어, 전처리기(120)는 버퍼 메모리(300)의 데이터 용량, 데이터의 전송 속도 등의 정보에 기초하여 메모리 셀 어레이(410b)에 포함되는 데이터 블록의 블록 사이즈의 임계 값을 결정할 수 있다. 예를 들어, 버퍼 메모리(300)의 데이터 용량이 비교적 큰 경우의 데이터 블록의 임계 값은 비교적 클 수 있다. 또한, 생성된 전처리 그래프 데이터(PPGD)에 포함된 이미지 벡터 데이터들의 집중도에 따라서 데이터 블록의 임계 값은 달라질 수 있다. 하지만 본 발명의 실시예는 이에 제한되지 않는다.
전처리기(120)는 데이터 블록의 블록 사이즈가 결정된 임계 값보다 작은지 판단할 수 있다(S512). 데이터 블록의 블록 사이즈가 결정된 임계 값보다 작은 경우(S512-Y), 데이터 블록의 블록 사이즈는 증가할 수 있다(S513). 즉, 이 경우 생성되는 데이터 블록의 블록 사이즈는 계속하여 증가할 수 있다. 데이터 블록의 블록 사이즈가 결정된 임계 값보다 작지 않은 경우(S512-N), 전처리기(120)는 새로운 데이터 블록을 생성할 수 있다(S514). 즉, 전처리기(120)는 새롭게 생성된 데이터 블록에 전처리 그래프 데이터(PPGD)를 저장시킬 수 있다.
전처리 그래프 데이터(PPGD)의 생성이 완료된 경우(S515-Y), 해당 동작은 종료될 수 있고, 전처리 그래프 데이터(PPGD)의 생성이 완료되지 않은 경우(S515-N), 전처리기(120)는 다시 S512 동작을 수행할 수 있다.
다시 도 6, 도 7 및 도 9를 참조하면, 전처리기(120)는 벡터 거리 유사성에 기초하여 오리지널 그래프 데이터(OGD)를 분류하여, 전처리 그래프 데이터(PPGD)를 생성할 수 있다(S504). 오리지널 그래프 데이터(OGD)는 분류가 수행되지 않고, 제1 메모리 셀 어레이(410a)의 데이터 블록들에 랜덤하게 저장된 데이터 셋일 수 있다. 전처리 그래프 데이터(PPGD)는 분류가 수행됨으로써, 제2 메모리 셀 어레이(410b)의 데이터 블록들(BLK1 내지 BLKn)에 저장될 수 있다. 여기서, 각 데이터 블록(BLK1 내지 BLKn)에 저장된 이미지 벡터 데이터는 벡터 유사성을 가질 수 있다. 즉, 제1 데이터 블록(BLK1)에 저장된 제1 전처리 그래프 데이터(PPGD1)에 포함되는 제1 이미지 벡터 데이터는 서로 벡터 유사성을 가질 수 있고, 제2 데이터 블록(BLK2)에 저장된 제2 전처리 그래프 데이터(PPGD2)에 포함되는 제2 이미지 벡터 데이터는 서로 벡터 유사성을 가질 수 있고, 제n 데이터 블록(BLKn)에 저장된 제n 전처리 그래프 데이터(PPGDn)에 포함되는 제n 이미지 벡터 데이터는 서로 벡터 유사성을 가질 수 있다. 하지만, 제1 내지 제n 이미지 벡터 데이터들은 서로 벡터 유사성을 가지지 않을 수 있다.
도 10 및 도 11은 몇몇 실시예에 따른 가속기를 포함하는 FPGA의 동작을 설명하기 위한 도면이다.
도 10 및 도 11을 참조하면, 전처리기(120)는 HNSW 알고리즘을 사용하여 데이터를 처리할 수 있다. 하지만 본 발명의 실시예는 이에 제한되지 않으며, 전처리기(120) 또는 가속기(110)는 다양한 알고리즘을 이용하여 데이터를 처리할 수 있다.
전처리기(120)는 복수의 데이터 셋(DS1 내지 DSn)을 처리할 수 있다. 복수의 데이터 셋(DS1 내지 DSn)은 그래프 구조에 해당할 수 있다. 복수의 데이터 셋(DS1 내지 DSn)에 포함된 데이터가 형성하는 그래프 구조는 복수의 레이어를 포함할 수 있다. 복수의 레이어는 탑 레이어 내지 레이어 0를 포함할 수 있다. 복수의 레이어 각각은 복수의 포인트들을 포함할 수 있다. 복수의 포인트들은 이미지 벡터 정보를 포함할 수 있다.
데이터 셋(DS1 내지 DSn)에 포함된 데이터로 구현되는 그래프 구조에서, 탑 레이어는 가장 적은 수의 포인트를 포함할 수 있다. 레이어가 아래로 내려갈수록 레이어에 포함되는 포인트의 수는 증가할 수 있다. 그래프 구조의 최하위 레이어인 레이어 0는 데이터 셋(DS1 내지 DSn)의 모든 포인트를 포함할 수 있다. 각 레이어는 상위 레이어가 포함하는 포인트를 모두 포함할 수 있다. 이에 따라서 상하로 인접한 레이어들이 포인트들을 통해서 연결될 수 있다.
몇몇 실시예에서, 전처리기(120)는 전처리 지시 커맨드(PCMD)에 대응하는 데이터에 대한 탐색을 탑 레이어부터 시작할 수 있다. 전처리기(120)는 데이터와 가장 가까운 포인트를 찾은 후, 해당 포인트를 기준으로 하위 레이어 탐색을 시작할 수 있다.
몇몇 실시예에서, 전처리기(120)는 복수의 데이터 셋(DS1 내지 DSn)을 이용하여 각각의 데이터 셋(DS1 내지 DSn)으로부터 로컬 K 최근접 이웃을 구할 수 있다. 로컬 K 최근접 이웃은 최종 후보 데이터를 포함할 수 있다. 이에 따라서 최종 K 최근접 이웃이 생성될 수 있다. 오리지널 그래프 데이터(OGD)에 포함되는 데이터 셋에 대한 상기 분류 방법을 통하여, 전처리 그래프 데이터(PPGD)가 생성될 수 있다. 여기서, 제1 전처리 그래프 데이터(PPGD1)의 이미지 벡터 데이터는 벡터 유사성을 가지고, 제2 전처리 그래프 데이터(PPGD2)의 이미지 벡터 데이터는 벡터 유사성을 가지고, 제n 전처리 그래프 데이터(PPGD2)의 이미지 벡터 데이터는 벡터 유사성을 가질 수 있다. 전처리 그래프 데이터(PPGD)는 비휘발성 메모리(400)의 제2 메모리 셀 어레이(410b)의 블록 사이즈가 결정된 데이터 블록(BLK1 내지 BLKn)에 저장될 수 있다.
다시 도 7 및 도 9를 참조하면, 전처리기(120)는 전처리 그래프 데이터(PPGD)에 기초하여 메타 데이터(MTD)를 생성할 수 있다(S505). 전처리기(120)는 제1 전처리 그래프 데이터(PPGD1)에 기초하여 제1 메타 데이터(MTD1)를 생성할 수 있다. 제1 메타 데이터(MTD1)는 제1 전처리 그래프 데이터(PPGD1)에 포함되는 이미지 벡터 데이터들과, 다른 전처리 그래프 데이터와의 관계를 나타내는 정보를 포함할 수 있다.
도 12는 몇몇 실시예에 따른 메타 데이터를 설명하는 도면이다.
도 12를 참조하면, 메타 데이터(MTD)는 최근접 이웃 블록 리스트를 포함할 수 있다. 예를 들어, 메타 데이터(MTD)는 제2 데이터 블록(BLK2)이 제12 데이터 블록(BLK12), 제43 데이터 블록(BLK43) 및 제9 데이터 블록(BLK9)과 근접하다는 정보를 포함할 수 있다.
또한, 메타 데이터(MTD)는 블록 프리뷰 벡터 데이터를 포함할 수 있다. 블록 프리뷰 벡터 데이터는 제2 데이터 블록(BLK2)의 블록 사이즈인 제2 블록 사이즈(SZ2), 제2 데이터 블록(BLK2)에 저장된 제2 전처리 그래프 데이터(PPGD2)의 데이터 중 최솟값, 최댓값 및 평균값, 제2 데이터 블록(BLK2)과 다른 데이터 블록 간의 벡터 유사성 거리 등을 포함할 수 있다. 하지만, 본 발명의 실시예는 이에 제한되지 않는다.
다시 도 9를 참조하면, 전처리기(120)는 복수의 메타 데이터(MTD)를 생성할 수 있다. 제1 내지 제n 메타 데이터(MTD1 내지 MTDn)가 생성될 수 있다. 여기서 제1 데이터 셋(DS1)은 제1 전처리 그래프 데이터(PPGD1) 및 제1 메타 데이터(MTD1)를 포함할 수 있고, 제2 데이터 셋(DS2)은 제2 전처리 그래프 데이터(PPGD2) 및 제2 메타 데이터(MTD2)를 포함할 수 있고, 제n 데이터 셋(DSn)은 제n 전처리 그래프 데이터(PPGDn) 및 제n 메타 데이터(MTDn)를 포함할 수 있다.
다시 도 7을 참조하면, 전처리기(120)는 비휘발성 메모리(400)에 전처리 그래프 데이터(PPGD) 및 메타 데이터(MTD)를 제공할 수 있다(S506). 이에 따라서, 비휘발성 메모리(400)는 복수의 데이터 블록들(BLK1 내지 BLKn)에 전처리 그래프 데이터(PPGD) 및 메타 데이터(MTD)를 저장시킬 수 있다(S507). 이에 따라서, 벡터 유사성에 따라서 정리된 전처리 그래프 데이터(PPGD)가 비휘발성 메모리(400)의 제2 메모리 셀 어레이(410b)에 저장될 수 있고, 제1 메모리 셀 어레이(410a)에 저장된 오리지널 그래프 데이터(OGD)는 삭제될 수 있다. 복수의 데이터 블록들(BLK1 내지 BLKn)에 전처리 그래프 데이터(PPGD)가 저장됨에 따라서, 스토리지 장치(10)의 성능이 개선될 수 있다.
도 13은 몇몇 실시예에 따른 쿼리에 응답하는 메모리 시스템에 대한 블록도이다. 도 14는 도 13의 메모리 시스템의 동작을 설명하기 위한 래더 다이어그램이다. 도 15는 도 13의 FPGA의 연산 동작을 설명하기 위한 블록도이다.
도 13 및 도 14를 참조하면, 호스트 장치(20)는 쿼리(QR)를 FPGA(100)에 제공할 수 있다(S520). FPGA(100)는 쿼리(QR)에 응답하여 메타 데이터(MTD)를 로드할 수 있다(S521). 이에 따라서, 비휘발성 메모리(400)는 FPGA(100)에 메타 데이터(MTD)를 제공할 수 있다(S522).
전처리기(120)는 쿼리(QR)와 메타 데이터(MTD)에 기초하여 전처리 그래프 데이터(PPGD)를 로드할 수 있다(S523). 예를 들어, 전처리기(120)는 메타 데이터(MTD)에 포함되는 블록 사이즈, 전처리 그래프 데이터(PPGD)의 데이터 중 최솟값, 최댓값 및 평균값, 데이터 블록들 간의 벡터 유사성 거리 등에 기초하여 해당하는 전처리 그래프 데이터(PPGD)를 로드할 수 있다. 예를 들어, 복수의 메타 데이터(MTD1 내지 MTDn) 중 제1 메타 데이터(MTD1)에 포함되는 정보가 쿼리(QR)와 벡터 유사성이 있는 경우에, 전처리기(120)는 제1 메타 데이터(MTD1)에 해당하는 제1 전처리 그래프 데이터(PPGD1)를 로드할 수 있다. 이 경우, 전처리기(120)는 앞서 설명한 HNSW 알고리즘을 이용하여 전처리 그래프 데이터(PPGD)를 로드할 수 있다.
이에 따라, FPGA(100)는 비휘발성 메모리(400)에 요청 신호(RQ)를 제공할 수 있고(S524), 비휘발성 메모리(400)는 요청 신호(RQ)에 응답하여 전처리 그래프 데이터(PPGD)를 FPGA(100)에 제공할 수 있다(S525).
FPGA(100)는 쿼리(QR) 및 전처리 그래프 데이터(PPGD)에 기초하여 연산을 수행할 수 있다(S526). 여기서, 가속기(110)는 전처리 그래프 데이터(PPGD)를 수신할 수 있고, 이에 대하여 연산을 수행할 수 있다.
도 15를 참조하면, 버퍼 메모리(130) 또는 버퍼 메모리(300)는 비휘발성 메모리(400)로부터 제x 전처리 그래프 데이터(PPGDx), 제y 전처리 그래프 데이터(PPGDy) 및 제z 전처리 그래프 데이터(PPGDz)를 수신할 수 있다. 버퍼 메모리(300)는 제x 전처리 그래프 데이터(PPGDx), 제y 전처리 그래프 데이터(PPGDy) 및 제z 전처리 그래프 데이터(PPGDz)를 버퍼링할 수 있다. 여기서, 제y 전처리 그래프 데이터(PPGDy) 및 제z 전처리 그래프 데이터(PPGDz)는 제x 전처리 그래프 데이터(PPGDx)와 최근접 벡터 유사성을 가질 수 있다. 해당 정보는 메타 데이터(MTD)에 기록될 수 있다.
버퍼 메모리(130) 또는 버퍼 메모리(300)는 제x 전처리 그래프 데이터(PPGDx)를 가속기(110)에 제공할 수 있다. 가속기(110)는 쿼리(QR)와 제x 전처리 그래프 데이터(PPGDx)에 기초하여 연산을 수행할 수 있다. 예를 들어, 가속기(110)는 쿼리(QR)의 이미지 벡터 데이터와 제x 전처리 그래프 데이터(PPGDx)를 비교하여, 유사성을 갖는지 판단할 수 있다. 가속기(110)는 앞서 설명한 HNSW 알고리즘을 이용하여 연산을 수행할 수 있다.
이어서, 가속기(110)는 버퍼 메모리(130) 또는 버퍼 메모리(300)로부터 제y 전처리 그래프 데이터(PPGDy) 및 제z 전처리 그래프 데이터(PPGDz)를 순차적으로 수신하여 처리할 수 있다. 여기서, 제x 전처리 그래프 데이터(PPGDx), 제y 전처리 그래프 데이터(PPGDy) 및 제z 전처리 그래프 데이터(PPGDz)는 전처리기(120)에 의하여 벡터 최근접성을 가지므로, 스토리지 장치(10)의 대량의 데이터 관리의 최적화 및 효율화가 달성될 수 있다.
최종 연산기(140)는 가속기(110)로부터의 정보를 수신하여 요청 신호(RSP)를 출력할 수 있다. 예를 들어, 최종 연산기(140)는 쿼리(QR)와 유사한 특징을 갖는 전처리 그래프 데이터(PPGD)를 수신하고, 이에 대하여 판단을 할 수 있다. 예를 들어, 쿼리(QR)에 해당되는 전처리 그래프 데이터(PPGD)의 특징을 출력할 수 있다. 하지만 본 발명의 실시예는 예시적인 것이며, 최종 연산기(140) 및 가속기(110)의 동작은 이에 제한되지 않는다. FPGA(100)는 호스트 장치(20)에 응답 신호(RSP)를 제공하고(S527), 호스트 장치(20)는 응답 신호(RSP)에 기초하여 동작할 수 있다.
이하, 도 16을 참조하여 다른 실시예에 따른 메모리 시스템(2)을 설명한다.
도 16은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다. 설명의 편의를 위해, 도 1 내지 도 15를 이용하여 설명한 것과 중복되는 부분은 간략히 설명하거나 생략한다.
도 16을 참조하면, 메모리 시스템(2)은 스토리지 장치(10)와 호스트 장치(20)를 포함할 수 있다.
스토리지 장치(10)의 스토리지 컨트롤러(200)는 FPGA(100)를 포함할 수 있다. 호스트 장치(20)는 호스트 컨트롤러(201), 호스트 메모리(202) 및 최종 연산기(140)를 포함할 수 있다.
호스트 메모리(202)는 FPGA(100)의 가속기(110)로부터 최종 후보 데이터를 제공받아 임시로 저장할 수 있다. 즉, 호스트 메모리(202)는 가속기(110)로부터 제공받은 최종 후보 데이터를 저장하는 버퍼 메모리로서 기능할 수 있다.
최종 연산기(130)는 호스트 메모리(202)에 저장된 최종 후보 데이터를 이용하여 최종 결과 데이터를 생성할 수 있다. 최종 연산기(130)는 Brute-force 연산기를 포함할 수 있다. 최종 연산기(130)는 Brute-force 연산을 위한 가속 회로를 포함할 수 있다. 이에 따라, FPGA(100)는 최종 연산기(130)를 별도로 포함하지 않을 수 있다. 즉, FPGA(100)는 최종 연산기(130)를 통한 연산을 하지 않은 최종 후보 데이터를 호스트 장치(20)에 제공할 수 있다.
이하, 도 17을 참조하여 다른 실시예에 따른 메모리 시스템(3)을 설명한다.
도 17은 몇몇 실시예에 따른 메모리 시스템에 대한 블록도이다. 설명의 편의를 위해, 도 1 내지 도 16을 이용하여 설명한 것과 중복되는 부분은 간략히 설명하거나 생략한다.
도 17을 참조하면, 메모리 시스템(3)은 제1 스토리지 장치(11), 제2 스토리지 장치(12) 및 호스트 장치(20)를 포함할 수 있다.
제1 스토리지 장치(11)는 제1 스토리지 컨트롤러(210), 제1 FPGA(101), 제1 버퍼 메모리(301) 및 제1 비휘발성 메모리(401)를 포함할 수 있다.
제1 비휘발성 메모리(401)는 제1 데이터 셋 내지 제M 데이터 셋(DS1-DS M)을 저장할 수 있다.
제1 FPGA(101)는 기존에 저장된 데이터 셋에 대하여 전처리를 수행함으로써, 제1 데이터 셋 내지 제M 데이터 셋(DS1-DS M)을 생성할 수 있다. 제1 FPGA(101)는 제1 입력 쿼리에 기초하여 제1 데이터 셋 내지 제M 데이터 셋(DS1-DS M)에 대한 연산 처리를 수행할 수 있다. 제1 FPGA(101)에 포함된 가속기는 제1 데이터 셋(DS1)을 이용하여 제1 최종 후보 데이터를 생성할 수 있다. 제1 FPGA(101)는 생성한 제1 최종 후보 데이터를 호스트 장치(20)에 제공할 수 있다.
제2 스토리지 장치(12)는 제2 스토리지 컨트롤러(220), 제2 FPGA(102), 제2 버퍼 메모리(302) 및 제2 비휘발성 메모리(402)를 포함할 수 있다.
제2 비휘발성 메모리(402)는 제1 데이터 셋 내지 제M 데이터 셋(DS1-DS M)과 다른 제M+1 데이터 셋 내지 제N 데이터 셋(DS (M+1) - DS N)을 저장할 수 있다.
제2 FPGA(102)는 기존에 저장된 데이터 셋에 대하여 전처리를 수행함으로써, 제M+1 데이터 셋 내지 제N 데이터 셋(DS (M+1) - DS N)을 생성할 수 있다. 제2 FPGA(102)는 제2 입력 쿼리에 기초하여 제M+1 데이터 셋 내지 제N 데이터 셋(DS (M+1) - DS N)에 대한 연산 처리를 수행할 수 있다. 제2 FPGA(102)에 포함된 가속기는 제M+1 데이터 셋 내지 제N 데이터 셋(DS (M+1) - DS N)을 이용하여 제2 최종 후보 데이터를 생성할 수 있다. 제2 FPGA(102)는 생성한 제2 최종 후보 데이터를 호스트 장치(20)에 제공할 수 있다.
즉, 제1 FPGA(101)와 제2 FPGA(102)는 각각 동일한 쿼리에 기초하여 다른 데이터 셋을 이용하여 병렬적으로 연산을 수행할 수 있다.
호스트 메모리(202)는 제1 FPGA(101)로부터 제공받은 제1 최종 후보 데이터와 제2 FPGA(102)로부터 제공받은 제2 최종 후보 데이터를 임시로 저장하는 버퍼 메모리로서 기능할 수 있다.
호스트 장치(20)가 포함하는 최종 연산기(130)는 호스트 메모리(202)에 저장된 제1 최종 후보 데이터와 제2 최종 후보 데이터를 이용하여, 최종 결과 데이터를 생성할 수 있다. 최종 연산기(130)는 Brute-force 연산기를 포함할 수 있다. 최종 연산기(130)는 Brute-force 연산을 위한 가속 회로를 포함할 수 있다. 이에 따라, 제1 FPGA(101)와 제2 FPGA(102)는 최종 연산기(130)를 별도로 포함하지 않을 수 있다. 즉, 제1 FPGA(101)와 제2 FPGA(102)는 최종 연산기(130)를 통한 연산을 하지 않은 제1 및 제2 최종 후보 데이터를 호스트 장치(20)에 제공할 수 있다.
도 18은 몇몇 실시예에 따른 스토리지 장치를 포함하는 데이터 센터에 대한 도면이다.
도 18을 참조하면, 데이터 센터(3000)는 각종 데이터를 모아두고 서비스를 제공하는 시설로서, 데이터 스토리지 센터라고 지칭될 수도 있다. 데이터 센터(3000)는 검색 엔진 및 데이터 베이스 운용을 위한 시스템일 수 있으며, 은행 등의 기업 또는 정부기관에서 사용되는 컴퓨팅 시스템일 수 있다. 데이터 센터(3000)는 애플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)을 포함할 수 있다. 애플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 실시예에 따라 다양하게 선택될 수 있고, 애플리케이션 서버들(3100 내지 3100n)의 개수 및 스토리지 서버들(3200 내지 3200m)의 개수는 서로 다를 수 있다.
애플리케이션 서버(3100) 또는 스토리지 서버(3200)는 프로세서(3110, 3210) 및 메모리(3120, 3220) 중 적어도 하나를 포함할 수 있다. 스토리지 서버(3200)를 예시로 설명하면, 프로세서(3210)는 스토리지 서버(3200)의 전반적인 동작을 제어할 수 있고, 메모리(3220)에 액세스하여 메모리(3220)에 로딩된 명령어 및/또는 데이터를 실행할 수 있다. 메모리(3220)는 DDR SDRAM(Double Data Rate Synchronous DRAM), HBM(High Bandwidth Memory), HMC(Hybrid Memory Cube), DIMM(Dual In-line Memory Module), Optane DIMM 및/또는 NVMDIMM(Non-Volatile DIMM)일 수 있다. 실시예에 따라, 스토리지 서버(3200)에 포함되는 프로세서(3210)의 개수 및 메모리(3220)의 개수는 다양하게 선택될 수 있다. 일 실시예에서, 프로세서(3210)와 메모리(3220)는 프로세서-메모리 페어를 제공할 수 있다. 일 실시예에서, 프로세서(3210)와 메모리(3220)의 개수는 서로 다를 수도 있다. 프로세서(3210)는 단일 코어 프로세서 또는 다중 코어 프로세서를 포함할 수 있다. 스토리지 서버(3200)에 대한 상기 설명은, 애플리케이션 서버(3100)에도 유사하게 적용될 수 있다. 실시예에 따라, 애플리케이션 서버(3100)는 스토리지 장치(3150)를 포함하지 않을 수도 있다. 스토리지 서버(3200)는 적어도 하나 이상의 스토리지 장치(3250)를 포함할 수 있다. 스토리지 서버(3200)에 포함되는 스토리지 장치(3250)의 개수는 실시예에 따라 다양하게 선택될 수 있다. 스토리지 장치(3250)는 도 1 내지 도 17을 참조하여 설명한 스토리지 장치(10)를 포함할 수 있다. 즉, 스토리지 장치(3250)는 FPGA(100)를 포함하여, 비휘발성 메모리에 저장된 데이터 셋을 정리하여, 전처리 그래프 데이터(PPGD)를 생성할 수 있다.
애플리케이션 서버들(3100 내지 3100n) 및 스토리지 서버들(3200 내지 3200m)은 네트워크(3300)를 통해 서로 통신할 수 있다. 네트워크(3300)는 FC(Fiber Channel) 또는 이더넷(Ethernet) 등을 이용하여 구현될 수 있다. 이 때, FC는 상대적으로 고속의 데이터 전송에 사용되는 매체이며, 고성능/고가용성을 제공하는 광 스위치를 사용할 수 있다. 네트워크(3300)의 액세스 방식에 따라 스토리지 서버들(3200 내지 3200m)은 파일 스토리지, 블록 스토리지, 또는 오브젝트 스토리지로서 제공될 수 있다.
일 실시예에서, 네트워크(3300)는 SAN(Storage Area Network)와 같은 스토리지 전용 네트워크일 수 있다. 예를 들어, SAN은 FC 네트워크를 이용하고 FCP(FC Protocol)에 따라 구현된 FC-SAN일 수 있다. 다른 예를 들어, SAN은 TCP/IP 네트워크를 이용하고 iSCSI(SCSI over TCP/IP 또는 Internet SCSI) 프로토콜에 따라 구현된 IP-SAN일 수 있다. 다른 실시예에서, 네트워크(3300)는 TCP/IP 네트워크와 같은 일반 네트워크일 수 있다. 예를 들어, 네트워크(3300)는 FCoE(FC over Ethernet), NAS(Network Attached Storage), NVMe-oF(NVMe over Fabrics) 등의 프로토콜에 따라 구현될 수 있다.
이하에서는, 애플리케이션 서버(3100) 및 스토리지 서버(3200)를 중심으로 설명하기로 한다. 애플리케이션 서버(3100)에 대한 설명은 다른 애플리케이션 서버(3100n)에도 적용될 수 있고, 스토리지 서버(3200)에 대한 설명은 다른 스토리지 서버(3200m)에도 적용될 수 있다.
애플리케이션 서버(3100)는 사용자 또는 클라이언트가 저장 요청한 데이터를 네트워크(3300)를 통해 스토리지 서버들(3200 내지 3200m) 중 하나에 저장할 수 있다. 또한, 애플리케이션 서버(3100)는 사용자 또는 클라이언트가 독출 요청한 데이터를 스토리지 서버들(3200 내지 3200m) 중 하나로부터 네트워크(3300)를 통해 획득할 수 있다. 예를 들어, 애플리케이션 서버(3100)는 웹 서버 또는 DBMS(Database Management System) 등으로 구현될 수 있다.
애플리케이션 서버(3100)는 네트워크(3300)를 통해 다른 애플리케이션 서버(3100n)에 포함된 메모리(3120n) 또는 스토리지 장치(3150n)에 액세스할 수 있고, 또는 네트워크(3300)를 통해 스토리지 서버들(3200-3200m)에 포함된 메모리들(3220-3220m) 또는 스토리지 장치(3250-3250m)에 액세스할 수 있다. 이로써, 애플리케이션 서버(3100)는 애플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m)에 저장된 데이터에 대해 다양한 동작들을 수행할 수 있다. 예를 들어, 애플리케이션 서버(3100)는 애플리케이션 서버들(3100-3100n) 및/또는 스토리지 서버들(3200-3200m) 사이에서 데이터를 이동 또는 카피(copy)하기 위한 명령어를 실행할 수 있다. 이 때 데이터는 스토리지 서버들(3200-3200m)의 스토리지 장치(3250-3250m)로부터 스토리지 서버들(3200-3200m)의 메모리들(3220-3220m)을 거쳐서, 또는 바로 애플리케이션 서버들(3100-3100n)의 메모리(3120-3120n)로 이동될 수 있다. 네트워크(3300)를 통해 이동하는 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 서버(3200)를 예시로 설명하면, 인터페이스(3254)는 프로세서(3210)와 컨트롤러(3251)의 물리적 연결 및 NIC(Network InterConnect)(3240)와 컨트롤러(3251)의 물리적 연결을 제공할 수 있다. 예를 들어, 인터페이스(3254)는 스토리지 장치(3250)를 전용 케이블로 직접 접속하는 DAS(Direct Attached Storage) 방식으로 구현될 수 있다. 또한, 예를 들어, 인터페이스(3254)는 ATA(Advanced Technology Attachment), SATA(Serial ATA), e-SATA(external SATA), SCSI(Small Computer Small Interface), SAS(Serial Attached SCSI), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(NVM express), IEEE 1394, USB(universal serial bus), SD(secure digital) 카드, MMC(multi-media card), eMMC(embedded multi-media card), UFS(Universal Flash Storage), eUFS(embedded Universal Flash Storage), 및/또는 CF(compact flash) 카드 인터페이스 등과 같은 다양한 인터페이스 방식으로 구현될 수 있다.
스토리지 서버(3200)는 스위치(3230) 및 NIC(3240)을 더 포함할 수 있다. 스위치(3230)는 프로세서(3210)의 제어에 따라 프로세서(3210)와 스토리지 장치(3250)를 선택적으로 연결시키거나, NIC(3240)와 스토리지 장치(3250)를 선택적으로 연결시킬 수 있다.
일 실시예에서 NIC(3240)는 네트워크 인터페이스 카드, 네트워크 어댑터 등을 포함할 수 있다. NIC(3240)는 유선 인터페이스, 무선 인터페이스, 블루투스 인터페이스, 광학 인터페이스 등에 의해 네트워크(3300)에 연결될 수 있다. NIC(3240)는 내부 메모리, DSP(Digital Signal Processor), 호스트 버스 인터페이스 등을 포함할 수 있으며, 호스트 버스 인터페이스를 통해 프로세서(3210) 및/또는 스위치(3230) 등과 연결될 수 있다. 호스트 버스 인터페이스는, 앞서 설명한 인터페이스(3254)의 예시들 중 하나로 구현될 수도 있다. 일 실시예에서, NIC(3240)는 프로세서(3210), 스위치(3230), 스토리지 장치(3250) 중 적어도 하나와 통합될 수도 있다.
스토리지 서버들(3200-3200m) 또는 애플리케이션 서버들(3100-3100n)에서 프로세서는 스토리지 장치(3150-3150n, 3250-3250m) 또는 메모리(3120-3120n, 3220-3220m)로 커맨드를 전송하여 데이터를 프로그램하거나 리드할 수 있다. 이 때 데이터는 ECC(Error Correction Code) 엔진을 통해 에러 정정된 데이터일 수 있다. 데이터는 데이터 버스 변환(Data Bus Inversion: DBI) 또는 데이터 마스킹(Data Masking: DM) 처리된 데이터로서, CRC(Cyclic Redundancy Code) 정보를 포함할 수 있다. 데이터는 보안 또는 프라이버시를 위해 암호화된 데이터일 수 있다.
스토리지 장치(3150-3150n, 3250-3250m)는 프로세서로부터 수신된 리드 커맨드에 응답하여, 제어 신호 및 커맨드/어드레스 신호를 NAND 플래시 메모리 장치(3252-3252m)로 전송할 수 있다. 이에 따라 NAND 플래시 메모리 장치(3252-3252m)로부터 데이터를 독출하는 경우, RE(Read Enable) 신호는 데이터 출력 제어 신호로 입력되어, 데이터를 DQ 버스로 출력하는 역할을 할 수 있다. RE 신호를 이용하여 DQS(Data Strobe)가 생성될 수 있다. 커맨드와 어드레스 신호는 WE(Write Enable) 신호의 상승 엣지 또는 하강 엣지에 따라 페이지 버퍼에 래치될 수 있다.
컨트롤러(3251)는 스토리지 장치(3250)의 동작을 전반적으로 제어할 수 있다. 일 실시예에서, 컨트롤러(3251)는 SRAM(Static Random Access Memory)을 포함할 수 있다. 컨트롤러(3251)는 기입 커맨드에 응답하여 낸드 플래시(3252)에 데이터를 기입할 수 있고, 또는 독출 커맨드에 응답하여 낸드 플래시(3252)로부터 데이터를 독출할 수 있다. 예를 들어, 기입 커맨드 및/또는 독출 커맨드는 스토리지 서버(3200) 내의 프로세서(3210), 다른 스토리지 서버(3200m) 내의 프로세서(3210m) 또는 애플리케이션 서버(3100, 3100n) 내의 프로세서(3110, 3110n)로부터 제공될 수 있다. DRAM(3253)은 낸드 플래시(3252)에 기입될 데이터 또는 낸드 플래시(3252)로부터 독출된 데이터를 임시 저장(버퍼링)할 수 있다. 또한, DRAM(3253)은 메타 데이터를 저장할 수 있다. 여기서, 메타 데이터는 사용자 데이터 또는 낸드 플래시(3252)를 관리하기 위해 컨트롤러(3251)에서 생성된 데이터이다. 스토리지 장치(3250)는 보안 또는 프라이버시를 위해 SE(Secure Element)를 포함할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
1: 메모리 시스템
10: 스토리지 장치
20: 호스트 장치 100: FPGA
110: 가속기 120: 전처리기
130: 버퍼 메모리 140: 최종 연산기
200: 스토리지 컨트롤러 300: 버퍼 메모리
400: 비휘발성 메모리
20: 호스트 장치 100: FPGA
110: 가속기 120: 전처리기
130: 버퍼 메모리 140: 최종 연산기
200: 스토리지 컨트롤러 300: 버퍼 메모리
400: 비휘발성 메모리
Claims (10)
- 외부 장치로부터 전처리 지시 커맨드를 수신하는 컨트롤러;
오리지널 그래프 데이터를 저장하는 비휘발성 메모리; 및
상기 컨트롤러와 상기 비휘발성 메모리에 연결된 버퍼 메모리를 포함하고,
상기 컨트롤러는,
상기 비휘발성 메모리로부터 상기 오리지널 그래프 데이터를 로드하고,
상기 전처리 지시 커맨드에 응답하여 상기 오리지널 그래프 데이터를 벡터 유사성에 따라 분류함으로써 전처리 그래프 데이터를 생성하고,
상기 전처리 그래프 데이터에 기초하여 메타 데이터를 생성하고,
상기 전처리 그래프 데이터 및 상기 메타 데이터를 상기 비휘발성 메모리에 제공하고,
상기 비휘발성 메모리는 상기 전처리 그래프 데이터 및 상기 메타 데이터를 데이터 블록에 저장하고,
상기 버퍼 메모리는 상기 오리지널 그래프 데이터, 상기 전처리 그래프 데이터 및 상기 메타 데이터를 버퍼링하는 스토리지 장치. - 제 1항에 있어서,
상기 컨트롤러는 상기 버퍼 메모리의 데이터 용량 및 상기 오리지널 그래프 데이터의 전송 속도 중 적어도 하나에 기초하여 상기 비휘발성 메모리의 상기 데이터 블록에 저장되는 데이터의 용량을 결정하는 스토리지 장치. - 제 1항에 있어서,
상기 데이터 블록은 제1 서브 데이터 블록 및 제2 서브 데이터 블록을 포함하고,
상기 전처리 그래프 데이터는 제1 서브 전처리 그래프 데이터 및 제2 서브 전처리 그래프 데이터를 포함하고,
상기 메타 데이터는 제1 서브 메타 데이터 및 제2 서브 메타 데이터를 포함하고,
상기 제1 서브 전처리 그래프 데이터와 상기 제1 서브 메타 데이터는 상기 제1 서브 데이터 블록에 저장되고,
상기 제2 서브 전처리 그래프 데이터와 상기 제2 서브 메타 데이터는 상기 제2 서브 데이터 블록에 저장되는 스토리지 장치. - 제 3항에 있어서,
상기 제1 서브 메타 데이터는 상기 제1 서브 데이터 블록에 최근접한 상기 제2 서브 데이터 블록에 대한 정보와 상기 제1 서브 전처리 그래프 데이터의 최솟값, 최댓값 및 평균값에 대한 정보를 포함하는 스토리지 장치. - 제 4항에 있어서,
상기 컨트롤러는 상기 비휘발성 메모리로부터 상기 제1 서브 데이터 블록에 저장된 데이터를 로드하고, 상기 제1 서브 메타 데이터를 참조하여 상기 비휘발성 메모리로부터 상기 제2 서브 데이터 블록에 저장된 데이터를 로드하는 스토리지 장치. - 제 3항에 있어서,
상기 제1 서브 데이터 블록에 저장된 데이터의 용량은 상기 제2 서브 데이터 블록에 저장된 데이터의 용량과 다른 스토리지 장치. - 제 3항에 있어서,
상기 제1 서브 전처리 그래프 데이터에 포함되는 제1 벡터들 사이의 유사성은 상기 제2 서브 전처리 그래프 데이터에 포함되는 제2 벡터들과 상기 제1 벡터들 사이의 유사성보다 큰 스토리지 장치. - 제 1항에 있어서,
상기 컨트롤러는,
쿼리에 응답하여, 상기 메타 데이터에 기초하여 상기 비휘발성 메모리에 저장된 상기 전처리 그래프 데이터를 로드하고,
상기 쿼리 및 상기 전처리 그래프 데이터에 기초하여 연산을 수행함으로써 응답 신호를 출력하는 스토리지 장치. - 복수의 데이터 블록들을 포함하고, 오리지널 그래프 데이터를 저장하는 비휘발성 메모리;
상기 오리지널 그래프 데이터를 버퍼링하는 버퍼 메모리; 및
상기 버퍼 메모리로부터 상기 오리지널 그래프 데이터를 로드하는 FPGA를 포함하고,
상기 FPGA는,
상기 버퍼 메모리의 데이터 용량 및 상기 오리지널 그래프 데이터의 전송 속도 중 적어도 하나에 기초하여 상기 비휘발성 메모리의 복수의 데이터 블록들 중 제1 데이터 블록의 블록 사이즈를 결정하고,
상기 오리지널 그래프 데이터 중 제1 그래프 데이터를 상기 제1 데이터 블록에 저장시키는 스토리지 장치. - 외부 장치로부터 전처리 지시 커맨드 및 쿼리를 수신하는 컨트롤러; 및
오리지널 그래프 데이터를 저장하는 비휘발성 메모리를 포함하고,
상기 컨트롤러는,
상기 전처리 지시 커맨드에 응답하여 상기 오리지널 그래프 데이터에 기초하여 전처리 그래프 데이터를 생성하여 상기 비휘발성 메모리에 저장시키고,
상기 쿼리에 응답하여 상기 전처리 그래프 데이터를 로드하고,
상기 전처리 그래프 데이터에 기초하여 응답 신호를 출력하는 스토리지 장치.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210143213A KR20230059239A (ko) | 2021-10-26 | 2021-10-26 | 스토리지 장치 |
US17/752,004 US11921625B2 (en) | 2021-10-26 | 2022-05-24 | Storage device for graph data |
CN202211291412.6A CN116027969A (zh) | 2021-10-26 | 2022-10-19 | 存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210143213A KR20230059239A (ko) | 2021-10-26 | 2021-10-26 | 스토리지 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230059239A true KR20230059239A (ko) | 2023-05-03 |
Family
ID=86055580
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210143213A KR20230059239A (ko) | 2021-10-26 | 2021-10-26 | 스토리지 장치 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11921625B2 (ko) |
KR (1) | KR20230059239A (ko) |
CN (1) | CN116027969A (ko) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9626334B2 (en) | 2014-12-24 | 2017-04-18 | Intel Corporation | Systems, apparatuses, and methods for K nearest neighbor search |
US20180341642A1 (en) | 2016-07-17 | 2018-11-29 | Gsi Technology Inc. | Natural language processing with knn |
US11256431B1 (en) | 2017-01-13 | 2022-02-22 | Lightbits Labs Ltd. | Storage system having a field programmable gate array |
JP2018148366A (ja) * | 2017-03-03 | 2018-09-20 | キヤノン株式会社 | 画像形成装置 |
CN108256570A (zh) | 2018-01-13 | 2018-07-06 | 惠州学院 | 基于k邻域相似性的数据聚类方法、装置和存储介质 |
US10949087B2 (en) * | 2018-05-15 | 2021-03-16 | Samsung Electronics Co., Ltd. | Method for rapid reference object storage format for chroma subsampled images |
US11074008B2 (en) | 2019-03-29 | 2021-07-27 | Intel Corporation | Technologies for providing stochastic key-value storage |
US10949214B2 (en) | 2019-03-29 | 2021-03-16 | Intel Corporation | Technologies for efficient exit from hyper dimensional space in the presence of errors |
US11029871B2 (en) | 2019-05-15 | 2021-06-08 | EMC IP Holding Company LLC | Deduplication using nearest neighbor cluster |
-
2021
- 2021-10-26 KR KR1020210143213A patent/KR20230059239A/ko active Search and Examination
-
2022
- 2022-05-24 US US17/752,004 patent/US11921625B2/en active Active
- 2022-10-19 CN CN202211291412.6A patent/CN116027969A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230129606A1 (en) | 2023-04-27 |
US11921625B2 (en) | 2024-03-05 |
CN116027969A (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11429295B2 (en) | Storage device storing data based on key-value and operating method of the same | |
US11698855B2 (en) | Method, memory controller and storage device to perform garbage collection based on fragmentation ratio of blocks | |
US12045470B2 (en) | Method of writing data in nonvolatile memory device and nonvolatile memory device performing the same | |
US11675504B2 (en) | Memory controller, memory system including the same, and method of operating the same | |
KR20230068935A (ko) | 스토리지 장치 및 그 구동 방법 | |
CN114546903A (zh) | 存储装置和包括其的存储系统 | |
US11921625B2 (en) | Storage device for graph data | |
US20230114199A1 (en) | Storage device | |
US20240220151A1 (en) | Computational storage device and method for operating the device | |
US12014772B2 (en) | Storage controller and storage device including the same | |
US12056048B2 (en) | System and method for management of electronic memory | |
US11842076B2 (en) | Storage system and operating method for same | |
KR102430219B1 (ko) | 스토리지 장치, 스토리지 장치의 키 생성 방법 및 스토리지 장치의 인증 방법 | |
US20240193105A1 (en) | Computational storage device and method of operating the same | |
KR102545465B1 (ko) | 스토리지 컨트롤러 및 이를 포함하는 스토리지 장치 | |
US20230146540A1 (en) | Storage device and an operating method of a storage controller thereof | |
US20230137866A1 (en) | Program command generation with dummy data generation at a memory device | |
KR20240057106A (ko) | 연산 스토리지 장치 및 그 구동 방법, 호스트 장치의 구동 방법 | |
KR20220037184A (ko) | 스토리지 장치, 스토리지 시스템 및 스토리지 시스템의 동작 방법 | |
KR20230067457A (ko) | 스토리지 컨트롤러, 스토리지 시스템 및 그 동작방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |