KR101698237B1 - 계층적 구조를 이용한 데이터 분석 - Google Patents

계층적 구조를 이용한 데이터 분석 Download PDF

Info

Publication number
KR101698237B1
KR101698237B1 KR1020137000570A KR20137000570A KR101698237B1 KR 101698237 B1 KR101698237 B1 KR 101698237B1 KR 1020137000570 A KR1020137000570 A KR 1020137000570A KR 20137000570 A KR20137000570 A KR 20137000570A KR 101698237 B1 KR101698237 B1 KR 101698237B1
Authority
KR
South Korea
Prior art keywords
data
parallel machine
programmable hardware
hardware elements
parallel
Prior art date
Application number
KR1020137000570A
Other languages
English (en)
Other versions
KR20130120441A (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 KR20130120441A publication Critical patent/KR20130120441A/ko
Application granted granted Critical
Publication of KR101698237B1 publication Critical patent/KR101698237B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/243Natural language query formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • G06F16/24522Translation of natural language queries to structured queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/3332Query translation
    • G06F16/3335Syntactic pre-processing, e.g. stopword elimination, stemming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Multimedia (AREA)
  • General Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Image Processing (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Character Discrimination (AREA)
  • Analysing Materials By The Use Of Radiation (AREA)
  • Image Analysis (AREA)

Abstract

데이터를 분석하기 위한 장치, 시스템, 및 방법이 기재된다. 상기 데이터는 계층적 구조를 이용해 분석될 수 있다. 이러한 한 가지 계층적 구조는 복수의 층을 포함할 수 있고, 각각의 층은 입력 데이터에 대한 분석을 수행하며, 분석을 기초로 하여 출력을 제공한다. 계층적 구조의 하위 층으로부터의 출력이 상위 층으로의 입력으로서 제공될 수 있다. 이러한 방식으로, 하위 층은 하위 레벨의 분석(가령, 더 기본적/근본적 분석)을 수행할 수 있고, 반면에 하나 이상의 하위 층으로부터의 출력을 이용해 상위 층은 상위 레벨의 분석(가령, 더 복잡한 분석)을 수행할 수 있다. 예를 들어, 계층적 구조는 패턴 인식을 수행한다.

Description

계층적 구조를 이용한 데이터 분석{ANALYZING DATA USING A HIERARCHICAL STRUCTURE}
우선권의 주장
이 특허 출원은, 35 U.S.C. 섹션 119(e)에 따라 2010년06월10일자로 출원된 가 특허 출원 제61/353,546호 "Hierarchical Pattern Recognition"을 기초로 우선권 주장한 2010년11월10일자로 출원된 미국 출원 제12/943,551호 "Analyzing Data Using A Hierarchical Structure"를 기초로 우선권 주장하며, 상기 두 출원의 전체 내용은 본원에서 참조로서 포함된다.
배경기술
복잡한 패턴 인식은 종래의 폰 노이만(von Neumann) 기반 컴퓨터에서 수행되기에 비효율적일 수 있다. 그러나 생물체의 뇌, 특히, 인간의 뇌는 패턴 인식을 수행하는 데 능숙하다. 현재의 연구는 인간의 뇌가 신피질의 일련의 계층적으로 조직된 뉴런 층을 이용해 패턴 인식을 수행함을 보여준다. 계층구조의 하위 층의 뉴런은 예를 들어 감각 기관으로부터의 "원시 신호(raw signal)"를 분석하며, 상위 층의 뉴런은 하위 레벨의 뉴런으로부터의 신호 출력물을 분석한다. 신피질의 이러한 계층적 시스템은, 아마도 뇌의 다른 영역과 함께, 인간이 높은 수준의 기능, 가령, 공간 추론, 의식적 사고, 및 복잡한 언어를 수행할 수 있도록 하는 복잡한 패턴 인식을 달성할 수 있다.
도 1은 본 발명의 다양한 실시예에 따르는 병렬 기계의 일례를 도시한다.
도 2는 본 발명의 다양한 실시예에 따르는 유한 상태 기계의 일례를 도시한다.
도 3은 본 발명의 다양한 실시예에 따르는 병렬 기계에 의해 구현되는 2-레벨 계층구조의 일례를 도시한다.
도 4는 본 발명의 다양한 실시예에 따르는 병렬 기계에 의해 구현되는 2-레벨 계층구조의 또 다른 일례를 도시한다.
도 5는 본 발명의 다양한 실시예에 따르는 병렬 기계에 의해 구현되는 4-레벨 계층구조의 일례를 도시한다.
도 6은 본 발명의 다양한 실시예에 따르는 병렬 기계에 의해 구현되는 피드백을 갖는 4-레벨 계층구조의 일례를 도시한다.
도 7은 본 발명의 다양한 실시예에 따르는 병렬 기계에 의해 구현되는 피드백을 갖는 4-레벨 계층구조의 또 다른 일례를 도시한다.
도 8은 본 발명의 다양한 실시예에 따르는 유한 상태 기계 엔진으로서 구현되는 도 1의 병렬 기계의 일례를 도시한다.
도 9는 본 발명의 다양한 실시예에 따르는 도 8의 유한 상태 기계 엔진의 블록(block)의 일례를 도시한다.
도 10은 본 발명의 다양한 실시예에 따르는 도 9의 블록의 로우(row)의 일례를 도시한다.
도 11은 본 발명의 다양한 실시예에 따르는 도 10의 로우의 2원 그룹(group of two)의 일례를 도시한다.
도 12는 본 발명의 다양한 실시예에 따르는 컴파일러가 소스 코드를 도 8의 병렬 기계의 프로그래밍을 위한 이미지로 변환하기 위한 방법의 일례를 도시한다.
도 13은 본 발명의 다양한 실시예에 따르는 폰 노이만 기반 아키텍처를 갖는 컴퓨터의 일례를 도시한다.
구체적인 설명
다음의 기재와 도면은 해당업계 종사자가 실시하기에 충분하도록 특정 실시예를 설명한다. 또 다른 실시예가 구조적, 논리적, 전기적, 프로세스적, 및 그 밖의 다른 변형을 포함할 수 있다. 어떤 실시예의 부분과 특징이 또 다른 실시예의 부분과 특징에 포함되거나 대체될 수 있다.
본원은, 무엇보다도, 계층적 구조를 이용해 데이터를 분석하기 위한 방법과 장치를 기재한다. 계층적 구조는 복수의 층을 포함할 수 있으며, 여기서 각각의 층은 입력 데이터에 대한 분석을 수행하고 상기 분석을 기초로 한 출력을 제공한다. 계층적 구조의 하위 층으로부터의 출력이 상위 층으로의 입력으로서 제공될 수 있다. 이러한 방식으로, 하위 층은 하위 레벨의 분석(가령, 더 기본적/근본적 분석)을 수행할 수 있고, 반면에, 상위 층은 하나 이상의 하위 층으로부터의 출력을 이용하는 상위 레벨의 분석(가령, 더 복잡한 분석)을 수행할 수 있다. 하나의 예에서, 계층적 구조는 패턴 인식을 수행한다. 하나의 예에서, 패턴 인식은 심볼의 시퀀스를 식별하는 것을 포함한다. 패턴의 식별을 위한 예시적 심볼이 음소(오디오), 이미지 내 화소, ASCII 문자, 기계 데이터(가령, 0과 1)에 대응할 수 있다.
예를 들어, 계층적 구조는 캐스케이딩 방식으로 함께 연결된 복수의 병렬 기계를 이용해 구현된다. 예를 들어, 제 2 병렬 기계가 제 1 병렬 기계로부터의 출력을 입력으로서 수신하도록 제 1 및 제 2 병렬 기계는 직렬로 연결될 수 있다. 임의의 개수의 병렬 기계가 이 계층적 구조에서 서로 연결될 수 있다.
계층적 구조를 이용해 데이터를 분석하는 것에 추가로, 본원은, 계층구조의 어느 한 레벨에서 수행된 분석으로부터의 정보를 이용하여 계층구조의 또 다른 레벨에서 수행되는 분석을 수정하는 방법과 장치도 기재한다. 앞서 기재된 병렬 기계 예를 이용하여, 상위 레벨의 분석을 이행하는 제 2 병렬 기계가 하위 레벨의 분석을 이행하는 제 1 병렬 기계로 피드백 정보를 제공할 수 있다. 피드백 정보는 제 1 병렬 기계에 의해 사용되어, 생물체의 뇌에서의 학습과 유사한 방식으로 제 1 병렬 기계에 의해 수행되는 분석을 업데이트할 수 있다.
도 1은 데이터를 분석하기 위한 계층적 구조를 구현하기 위해 사용될 수 있는 예시적 병렬 기계(100)를 도시한다. 병렬 기계(100)는 입력 데이터를 수신하고, 상기 입력 데이터를 기초로 하여 출력을 제공할 수 있다. 병렬 기계(100)는 입력 데이터를 수신하기 위한 데이터 입력 포트(110)와 또 다른 장치로 출력을 제공하기 위한 출력 포트(114)를 포함할 수 있다. 데이터 입력 포트(110)는 데이터가 병렬 기계(100)로 입력되기 위한 인터페이스를 제공한다.
병렬 기계(100)는 하나 이상의 입력(104)과 하나 이상의 출력(106)을 각각 갖는 복수의 프로그램 가능 요소(102)를 포함한다. 프로그램 가능 요소(102)는 복수의 상태(state) 중 하나로 프로그램될 수 있다. 프로그램 가능 요소(102)의 상태는 프로그램 가능 요소(102)가 특정 입력을 기초로 제공할 출력을 결정한다. 즉, 프로그램 가능 요소(102)의 상태는 프로그램 가능 요소가 특정 입력을 기초로 어떻게 반응할지를 결정한다. 데이터 입력 포트(110)로의 데이터 입력이 복수의 프로그램 가능 요소(102)로 제공되어, 프로그램 가능 요소(102)가 상기 데이터 입력에 대해 조치를 취할 수 있다. 프로그램 가능 요소(102)의 예는, 이하에서 상세히 설명될 상태 기계 요소(SME), 구성 가능한 로직 블록(configurable logic block)을 포함할 수 있다. 하나의 예에서, SME는 데이터 입력 포트(110)에서 특정 입력이 수신될 때 특정 출력(가령, 하이(high), 즉 "1" 신호)을 제공하기 위해 특정 상태로 설정될 수 있다. 데이터 입력 포트(110)에서 특정 입력이 아닌 입력이 수신될 때, SME는 상이한 출력(가령, 로우(low), 즉, "0" 신호)을 제공할 수 있다. 하나의 예에서, 구성 가능한 로직 블록은 데이터 입력 포트(110)에서 수신된 입력을 기초로 하는 부울 로직 함수(가령, AND, OR, NOR, ext.)를 수행하도록 설정될 수 있다.
또한 병렬 기계(100)는 프로그램(가령, 이미지)을 병렬 기계(100)로 로딩하기 위한 프로그래밍 인터페이스(111)를 포함할 수 있다. 상기 이미지는 프로그램 가능 요소(102)의 상태를 프로그램(가령, 설정)할 수 있다. 즉, 이미지는 특정 입력에 대해 특정 방식으로 반응하도록 프로그램 가능 요소(102)를 구성할 수 있다. 예를 들어, 프로그램 가능 요소(102)는, 데이터 입력 포트(110)에서 문자 'a'가 수신될 때 하이 신호를 출력하도록 설정될 수 있다. 일부 예에서, 병렬 기계(100)가 프로그램 가능 요소(102)의 동작의 타이밍을 제어하기 위한 클럭 신호(clock signal)를 이용할 수 있다. 특정 예에서, 병렬 기계(100)는 프로그램 가능 요소(102)와 상호대화하고 특수 목적 기능을 수행하기 위한 특수 목적 요소(112)(가령, RAM, 로직 게이트, 카운터, 룩-업 테이블, 등)을 포함할 수 있다. 일부 실시예에서, 데이터 입력 포트(110)에서 수신된 데이터는 시간에 따라 또는 한번에 모두 수신된 데이터의 고정 세트, 또는 시간에 따라 수신되는 데이터의 스트림을 포함할 수 있다. 데이터는 병렬 기계(100)로 연결된 임의의 소스, 가령, 데이터베이스, 센서, 네트워크, 등으로부터, 또는 상기 임의의 소스에 의해 수신될 수 있다.
또한 상기 병렬 기계(100)는 자신의 서로 다른 요소(가령, 프로그램 요소(102), 데이터 입력 포트(110), 출력 포트(114), 프로그래밍 인터페이스(111), 및 특수 목적 요소(112))를 함께 선택적으로 연결하기 위한 복수의 프로그램 가능 스위치(108)를 포함한다. 따라서 병렬 기계(100)는 요소들 사이에 형성되는 프로그램 가능 매트릭스를 포함한다. 하나의 예에서, 프로그램 가능 요소(102)의 입력(104), 데이터 입력 포트(110), 프로그래밍 인터페이스(111), 또는 특수 목적 요소(112)가 하나 이상의 프로그램 가능 스위치(108)를 통해 프로그램 가능 요소(102)의 출력(106), 출력 포트(114), 프로그래밍 인터페이스(111), 또는 특수 목적 요소(112)로 연결될 수 있도록, 프로그램 가능 스위치(108)는 둘 이상의 요소를 서로 선택적으로 연결할 수 있다. 따라서 프로그램 가능 스위치(108)를 설정함으로써, 요소들 간의 신호의 라우팅이 제어될 수 있다. 도 1이 특정 요소와 프로그램 가능 스위치(108) 사이의 특정 개수의 전도체(가령, 배선)를 도시하지만, 또 다른 예에서, 상이한 개수의 전도체가 사용될 수 있다. 또한, 도 1이 프로그램 가능 스위치(108)로 개별적으로 연결된 각각의 프로그램 가능 요소(102)를 도시하지만, 또 다른 예에서, 복수의 프로그램 가능 요소(102)가 그룹(가령, 도 8에 도시된 것과 같이, 블록(802))으로서 프로그램 가능 스위치(108)로 연결될 수 있다. 한 예를 들면, 데이터 입력 포트(110), 데이터 출력 포트(114), 및/또는 프로그래밍 인터페이스(111)가 레지스터로서 구현되어, 레지스터로의 쓰기가 각각의 요소로, 또는 각각의 요소로부터 데이터를 제공하도록 할 수 있다.
한 예에서, 단일 병렬 기계(100)가 물리 장치상에서 구현되지만, 또 다른 예에서, 둘 이상의 병렬 기계(100)가 하나의 단일 물리 장치(가령, 물리 칩) 상에서 구현될 수 있다. 한 예에서, 복수의 병렬 기계(100) 각각은 개별 데이터 입력 포트(110), 개별 출력 포트(114), 개별 프로그래밍 인터페이스(111), 및 프로그램 가능 요소(102)의 개별 세트를 포함할 수 있다. 덧붙이자면, 프로그램 가능 요소(102)의 세트 각각은, 그들의 대응하는 입력 데이터 포트(110)에서의 데이터에 반응(가령, 하이 또는 로우 신호를 출력)할 수 있다. 예를 들어, 제 1 병렬 기계(100)에 대응하는 프로그램 가능 요소(102)의 제 1 세트가 제 1 병렬 기계(100)에 대응하는 제 1 데이터 입력 포트(110)에서의 데이터에 반응할 수 있다. 제 2 병렬 기계(100)에 대응하는 프로그램 가능 요소(102)의 제 2 세트가 제 2 병렬 기계(100)에 대응하는 제 2 데이터 입력 포트(110)에 반응할 수 있다. 따라서 병렬 기계(100) 각각은 프로그램 가능 요소(102)의 하나씩의 세트를 포함하며, 여기서 서로 다른 세트의 프로그램 가능 요소(102)가 서로 다른 입력 데이터에 반응할 수 있다. 마찬가지로 병렬 기계(100) 각각과, 이에 대응하는 프로그램 가능 요소(102)의 세트 각각이 개별 출력을 제공할 수 있다. 일부 예에서 제 2 병렬 기계(100)에 대한 입력 데이터가 제 1 병렬 기계(100)로부터의 출력 데이터를 포함할 수 있도록, 제 1 병렬 기계(100)로부터의 출력 포트(114)가 제 2 병렬 기계(100)의 입력 포트(110)로 연결될 수 있다.
한 예에서, 병렬 기계(100)로 로딩되기 위한 이미지는, 병렬 기계(100) 내 프로그램 가능 요소(102)의 상태를 설정하고, 프로그램 가능 스위치(108)를 프로그램하고, 특수 목적 요소(112)를 구성하기 위한 정보의 복수의 비트를 포함한다. 한 예에서, 특정 입력을 기초로 원하는 출력을 제공하도록 병렬 기계(100)를 프로그램하기 위해 이미지가 병렬 기계(100)로 로딩될 수 있다. 출력 포트(114)는 데이터 입력 포트(110)에서의 데이터에 대한 프로그램 가능 요소(102)의 반응을 기초로 하여 병렬 기계(100)로부터의 출력을 제공할 수 있다. 출력 포트(114)로부터의 출력은 특정 패턴의 매칭을 가리키는 단일 비트, 복수의 패턴의 매칭 및 비-매칭(non-match)을 가리키는 복수의 비트를 포함하는 워드, 및 특정 순간에서의 모든 또는 특정 프로그램 가능 요소(102)의 상태에 대응하는 상태 벡터를 포함할 수 있다.
병렬 기계(100)에 대한 예시적 용도는 패턴-인식(가령, 음성 인식, 이미지 인식, 등), 신호 프로세싱, 이미징, 컴퓨터 비전(computer vision), 암호화, 및 그 밖의 다른 것을 포함한다. 특정 예에서, 병렬 기계(100)는 유한 상태 기계(FSM) 엔진, 필드 프로그램 가능 게이트 어레이(FPGA), 및 이들의 변형예를 포함할 수 있다. 덧붙여, 병렬 기계(100)는 컴퓨터, 호출기(pager), 셀룰러 전화기, 전자 수첩(personal organizer), 휴대용 오디오 재생기, 네트워크 장치(가령, 라우터, 방화벽, 스위치, 또는 이들의 임의의 조합), 제어 회로, 카메라 등과 같은 더 큰 장치의 구성요소일 수 있다.
도 2는 병렬 기계(100)에 의해 구현될 수 있는 유한 상태 기계(FSM)의 예시적 모델을 도시한다. 병렬 기계(100)는 FSM의 물리적 구현으로서 구성(가령, 프로그램)될 수 있다. FSM은 하나 이상의 루트 노드(202)를 포함하는 그래프(200)(가령, 방향성 그래프, 무방향성 그래프, 의사그래프(pseudograph))로 표현될 수 있다. 루트 노드(202)에 추가로, FSM은 몇 개의 표준 노드(204) 및 하나 이상의 에지(206)를 통해 루트 노드(202) 및 다른 표준 노드(204)로 연결된 말단 노드(208)로 구성될 수 있다. 노드(202, 204, 208)는 FSM에서의 상태에 대응한다. 에지(206)는 상태들 간 전이에 대응한다.
노드(202, 204, 208) 각각은 활성 상태이거나 비활성 상태일 수 있다. 비활성 상태일 때, 노드(202, 204, 208)는 입력 데이터에 반응(가령, 응답)하지 않는다. 활성 상태일 때, 노드(202, 204, 208)는 입력 데이터에 반응할 수 있다. 입력 데이터가 상류 노드(202, 204)와 하류 노드(204, 208) 사이의 에지(206)에 의해 특정된 기준에 매칭할 때 상류 노드(202, 204)가 노드의 하류에 있는 노드(204, 208)를 활성화함으로써 입력 데이터에 반응할 수 있다. 예를 들어, 제 1 노드(204)가 활성이고 문자 'b'가 입력 데이터로서 수신될 때, 문자 'b'를 특정하는 제 1 노드(204)가, 에지(206)에 의해 제 1 노드(204)로 연결되는 제 2 노드(204)를 활성화할 것이다. 본원에서 사용될 때, "상류(upstream)"는 하나 이상의 노드들 사이의 관계를 지칭하며, 여기서, 하나 이상의 다른 노드의 상류에 있는(또는 루프의 경우 스스로의 상류인) 제 1 노드가 상기 제 1 노드가 하나 이상의 다른 노드를 활성화할 수 있는(또는 루프의 경우 스스로 활성화될 수 있는) 상황을 지칭한다. 마찬가지로, "하류"는 하나 이상의 다른 노드의 하류에 있는(또는 루프의 경우 스스로의 하류인) 제 1 노드가 상기 하나 이상의 다른 노드에 의해 활성화될 수 있는(또는 루프의 경우 스스로 활성화될 수 있는) 관계를 지칭한다. 따라서 "상류" 및 "하류"라는 용어는 본원에서 하나 이상의 노드들 간의 관계를 지칭하기 위해 사용되지만, 이들 용어가 노드들 사이에 루프 또는 그 밖의 다른 비선형적 경로를 사용하지 못하게 하는 것은 아니다.
그래프(200)에서, 루트 노드(202)가 먼저 활성화되고, 입력 데이터가 루트 노드(202)로부터의 에지(206)에 매칭할 때 하류 노드(204, 208)를 활성화할 수 있다. 그래프(200) 전체에서 노드(204, 208)는 입력 데이터가 수신될 때 이러한 방식으로 활성화될 수 있다. 말단 노드(208)는 입력 데이터에 의한 관심 시퀀스의 매칭에 대응한다. 따라서 말단 노드(208)의 활성화가 관심 시퀀스가 입력 데이터로서 수신되었다고 가리킨다. 패턴 인식 기능을 구현하는 병렬 기계(100)의 맥락에서, 말단 노드(208)에 도착하는 것이 특정 관심 패턴이 입력 데이터에서 검출됐다고 가리킬 수 있다.
예를 들어, 각각의 루트 노드(202), 표준 노드(204), 및 말단 노드(208)가 병렬 기계(100)의 프로그램 가능 요소(102)에 대응할 수 있다. 각각의 에지(206)가 프로그램 가능 요소(102)들 사이의 연결에 대응할 수 있다. 따라서 또 다른 표준 노드(204) 또는 말단 노드(208)로 전이하는(가령, 여기로 연결되는 에지(206)를 갖는) 표준 노드(204)가, 또 다른 프로그램 가능 요소(102)로 전이하는(가령, 여기로 출력을 제공하는) 프로그램 요소(102)에 대응한다. 일부 예를 들면, 루트 노드(202)는 대응하는 프로그램 가능 요소(102)를 갖지 않는다.
병렬 기계(100)가 FSM으로서 프로그램될 때, 프로그램 가능 요소(102) 각각이 또한, 활성 상태이거나 비활성 상태일 수 있다. 특정 프로그램 가능 요소(102)는 비활성 상태일 때 자신의 대응하는 데이터 입력 포트(110)에서 입력 데이터에 반응하지 않는다. 활성 프로그램 가능 요소(102)는 입력 데이터 및 데이터 입력 포트(110)에 반응할 수 있고, 입력 데이터가 프로그램 가능 요소(102)의 설정에 매칭할 때, 하류 프로그램 가능 요소(102)를 활성화할 수 있다. 프로그램 가능 요소(102)가 말단 노드(208)에 대응할 때, 프로그램 가능 요소(102)는 외부 장치로 매칭에 대한 지시자를 제공하기 위해, 출력 포트(114)로 연결될 수 있다.
프로그래밍 인터페이스(111)를 통해 병렬 기계(100)로 로딩되는 이미지가 프로그램 가능 요소(102) 및 그 밖의 다른 요소(112)뿐 아니라, 프로그램 가능 요소(102)와 그 밖의 다른 요소(112) 사이의 연결까지 구성하여, 데이터 입력 포트(110)에서의 데이터에 대한 반응을 기초로 하는 노드의 순차적인 활성화를 통해 원하는 FSM이 구현되도록 할 수 있다. 하나의 예를 들면, 프로그램 가능 요소(102)는 단일 데이터 사이클(가령, 단일 문자, 문자들의 세트, 단일 클럭 사이클) 동안 활성 상태를 유지하고, 그 후, 상류 프로그램 가능 요소(102)에 의해 재-활성화되지 않는 한, 비활성 상태로 스위칭된다.
말단 노드(208)는 과거 이벤트들의 압축된 히스토리를 저장한다고 간주될 수 있다. 예를 들어, 말단 노드(208)에 도달하기 위해 요구되는 입력 데이터의 하나 이상의 패턴이 상기 말단 노드(208)의 활성화에 의해 표현될 수 있다. 예를 들어, 말단 노드(208)에 의해 제공되는 출력은 2진(binary)인데, 즉, 출력은 관심 패턴이 매칭됐는지, 또는 매칭되지 않았는지를 가리킨다. 그래프(200) 내 표준 노드(204)에 대한 말단 노드(208)의 비가 꽤 작을 수 있다. 즉, FSM의 복잡도가 높을 수 있지만, FSM의 출력은 비교적 작을 수 있다.
예를 들어, 병렬 기계(100)의 출력이 병렬 기계에 대한 상태 벡터를 포함할 수 있다. 상태 벡터는 병렬 기계(100)의 프로그램 가능 요소(102)의 상태(가령, 활성화됨, 또는 활성화되지 않음)를 포함한다. 예를 들어, 상태 벡터는 말단 노드(208)에 대응하는 프로그램 가능 요소(102)에 대한 상태를 포함한다. 따라서 출력은 그래프(200)의 모든 말단 노드(208)에 의해 제공되는 지시자의 집합을 포함할 수 있다. 상태 벡터는 워드로 표현될 수 있고, 여기서 각각의 말단 노드(208)에 의해 제공되는 2진 지시자가 상기 워드의 1비트를 포함한다. 말단 노드(208)의 이러한 인코딩이 병렬 기계(100)에 대한 검출 상태(가령, 관심 시퀀스가 검출되었는지 여부와 상기 시퀀스가 무엇인지)의 효과적인 지시자를 제공할 수 있다. 또 다른 예를 들면, 프로그램 가능 요소(102)가 말단 노드(208)에 대응하는지 여부에 무관하게, 상태 벡터가 프로그램 가능 요소(102) 모두 또는 그 부분집합의 상태를 포함할 수 있다.
앞서 언급된 바와 같이, 병렬 기계(100)는 패턴 인식 기능을 수행하도록 프로그램될 수 있다. 예를 들어, 병렬 기계(100)에 의해 구현되는 FSM이 입력 데이터에서의 하나 이상의 데이터 시퀀스(가령, 서명, 패턴)를 인식하도록 구성될 수 있다. 병렬 기계(100)에 의해 관심 데이터 시퀀스가 인식될 때, 상기 인식에 대한 지시자가 출력 포트(114)에서 제공될 수 있다. 예를 들어, 패턴 인식은 심볼의 스트링(가령, ASCII 문자)을 인식하여, 예컨대, 네트워크 데이터에서 멀웨어(malware) 또는 또 다른 정보를 식별할 수 있다.
도 3은 계층적 구조(300)를 이용하여 데이터를 분석하기 위해 구성된 제 1 병렬 기계(302) 및 제 2 병렬 기계(304)의 예를 도시한다. 병렬 기계(302, 304) 각각은 데이터 입력 포트(302A, 304A), 프로그래밍 인터페이스(302B, 304B), 및 출력 포트(302C, 304C)를 포함한다.
제 1 병렬 기계(302)가 데이터 입력 포트(302A)에서 입력 데이터, 예를 들어, 원시 데이터(raw data)를 수신하도록 구성된다. 제 1 병렬 기계(302)는 앞서 기재된 것처럼 입력 데이터에 응답하고, 출력 포트(302C)에서 출력을 제공한다. 제 1 병렬 기계(302)로부터의 출력이 제 2 병렬 기계(304)의 데이터 입력 포트(304A)로 전송된다. 그 후, 제 2 병렬 기계(304)는 제 1 병렬 기계(302)에 의해 제공되는 출력을 기초로 반응하고, 이에 대응하는 출력을 출력 포트(304C)에서 제공할 수 있다. 2개의 병렬 기계(302, 304)의 이러한 계층 결합은 과거 이벤트에 관한 정보를 압축된 워드로 제 1 병렬 기계(302)로부터 제 2 병렬 기계(304)로 전송하기 위한 수단을 연속적으로 제공한다. 전송되는 정보는, 제 1 병렬 기계(302)에 의해 기록된 복잡한 이벤트(가령, 관심 시퀀스)의 요약인 것이 효과적일 수 있다.
도 3에 도시된 병렬 기계(302, 304)의 2-레벨 계층구조(300)에 의해, 2개의 독립적인 프로그램이 동일한 데이터 스트림을 기초로 동작할 수 있다. 2 스테이지 계층구조는, 서로 다른 영역들로서 모델링된 생물체의 뇌에서의 시각적 인식과 유사할 수 있다. 이 모델 하에서, 영역들은 각각 유사한 계산적 기능(패턴 매칭)을 수행하지만 서로 다른 프로그램(서명)을 이용하는 서로 다른 패턴 인식 엔진이다. 복수의 병렬 기계(302, 304)를 다 함께 연결함으로써, 데이터 스트림 입력에 대한 증가된 지식이 얻어질 수 있다.
(제 1 병렬 기계(302)에 의해 구현되는) 계층구조의 제 1 레벨이 원시 데이터 스트림에 대해 직접 프로세싱을 수행한다. 즉, 입력 인터페이스(302A)에서 원시 데이터 스트림이 수신되고, 제 1 병렬 기계(302)의 프로그램 가능 요소가 원시 데이터 스트림에 반응할 수 있다. (제 2 병렬 기계(304)에 의해 구현되는) 계층구조의 제 2 레벨이 제 1 레벨로부터의 출력을 프로세싱한다. 즉, 제 2 병렬 기계(304)가 제 1 병렬 기계(302)로부터의 출력을 입력 인터페이스(304B)에서 수신하고, 제 2 병렬 기계(304)의 프로그램 가능 요소는 제 1 병렬 기계(302)의 출력에 반응할 수 있다. 따라서 이 예에서 제 2 병렬 기계(304)는 원시 데이터 스트림을 입력으로서 수신하지 않고, 오히려, 제 1 병렬 기계(302)에 의해 결정되는, 원시 데이터 스트림에 의해 매칭되는 관심 패턴의 지시자를 수신한다. 제 2 병렬 기계(304)는 제 1 병렬 기계(302)로부터의 출력 데이터 스트림 내 패턴을 인식하는 FSM에 의해 프로그램될 수 있다.
도 4는 2-레벨 계층구조(400)의 또 다른 예를 도시하며, 여기서 계층구조의 하나의 레벨이 복수의 병렬 기계를 이용해 구현된다. 여기서, 계층구조(400)의 제 1 레벨은 3개의 병렬 기계(402)에 의해 구현된다. 3개의 제 1 레벨 병렬 기계(402) 각각으로부터의 출력이 단일 제 2 레벨 병렬 기계(404)로 제공되며, 상기 제 2 레벨 병렬 기계는 제 1 레벨 병렬 기계(402)로부터의 출력에서 패턴을 인식(가령, 식별)한다. 또 다른 예를 들면, 여러 다른 개수의 병렬 기계가 여러 다른 레벨에서 구현될 수 있다. 각각의 병렬 기계(402, 404)는 데이터 입력 포트(402A, 404A), 프로그래밍 인터페이스(402B, 404B), 및 출력 포트(402C, 404C)를 포함한다.
도 5는 4개의 병렬 기계(502, 504, 506, 및 508)를 이용해 구현되는 4-레벨 계층구조(500)를 도시하며, 각각의 레벨에 의해 식별될 패턴의 일례를 보여준다. 앞서 설명된 바와 같이, 각각의 병렬 기계(502, 504, 506, 및 508)는 데이터 입력 포트(502A, 504A, 506A, 및 508A), 프로그래밍 인터페이스(502B, 504B, 506B, 및 508B), 및 출력 포트(502C, 504C, 506C, 및 508C)를 포함한다. 4-레벨 계층구조(500)는 하나의 이미지 내 흑색 또는 백색 픽셀을 기초로 하는 글자의 시각적 식별에 대응한다. 계층구조가 더 높은 레벨로 진행될수록, 입력 스트림의 누적된 지식이 이에 따라 증가한다. 병렬 기계(502, 504, 506, 508)는 계층적 인식 능력을 달성하기 위해 캐스케이딩된다. 계층구조(500)의 각각의 연속하는 레벨이 이전 레벨의 압축된 출력에 적용되는 새로운 규칙(패턴 서명)을 구현할 수 있다. 이러한 방식으로, 기본 프리미티브 정보(primitive information)의 초기 검출을 기초로 하여 매우 정밀한 물체가 식별될 수 있다.
예를 들어, 레벨 1(제 1 병렬 기계(502))로의 원시 데이터 입력 스트림은 시각적 이미지에 대한 픽셀 정보(가령, 특정 비트가 흑색/백색, ON/OFF인지 여부)를 포함할 수 있다. 제 1 병렬 기계(502)가 픽셀 정보에 의해 형성되는 프리미티브 패턴(primitive pattern)을 식별하도록 프로그램될 수 있다. 예를 들어, 제 1 병렬 기계(502)는 인접 픽셀이 수직선, 수평선, 호(arc) 등을 형성할 때를 식별하도록 구성될 수 있다. 이들 패턴(가령, 수직선, 수평선 호 등) 각각은 제 1 병렬 기계(502)로부터의 각각의 출력 비트(또는 신호)에 의해 나타내어질 수 있다. 예를 들어, 제 1 병렬 기계(502)가 적어도 3 비트의 수직선을 식별할 때, 하이 신호(가령, 논리 '1')가 제 2 병렬 기계(504)로의 출력 워드의 제 1 비트에서 출력될 수 있다. 제 1 병렬 기계(502)가 적어도 3 비트의 수평선을 식별할 때, 하이 신호가 제 2 병렬 기계(504)로의 출력 워드의 제 2 비트에서 출력될 수 있다.
제 2 레벨(제 2 병렬 기계(504))이 제 1 병렬 기계(502)로부터의 출력 신호 내 패턴을 식별하도록 프로그램될 수 있다. 예를 들어, 제 2 병렬 기계(502)는 제 1 병렬 기계(502)에 의해 식별된 프리미티브 패턴(선, 호 등)의 조합에 의해 형성된 패턴을 식별하도록 프로그램될 수 있다. 제 2 병렬 기계(504)는 수평선과 수직선이 "t"를 형성하면서 교차할 때를 식별하도록 프로그램될 수 있다. 앞서 언급된 바와 같이, 제 2 병렬 기계(504)에 의해 구현되는 FSM의 노드는 제 1 병렬 기계(502)로부터의 출력에 반응한다. 따라서 제 1 병렬 기계(502)로부터의 출력 비트에서 패턴을 식별함으로써, 프리미티브 패턴의 조합이 식별된다.
그 후, 제 2 병렬 기계(504)로부터의 출력이 제 3 레벨(제 3 병렬 기계(506))로 입력되며, 상기 제 3 레벨은 제 2 병렬 기계(506)에 의해 식별되는 문자들의 조합으로부터 단어를 식별할 수 있다. 그 후, 제 4 레벨(제 4 병렬 기계(508))이 제 3 병렬 기계(506)에 의해 식별된 단어들로 형성된 구문을 식별할 수 있다. 따라서 상위 레벨은 하위 레벨의 출력에서의 패턴을 식별하기 위해 프로그램될 수 있다. 덧붙이자면, 하위 레벨은 상위 레벨에서 식별되는 패턴을 구성하는 구성요소들을 식별하도록 프로그램될 수 있다.
픽셀 정보로부터의 문자들, 단어들, 및 구문의 식별이 하나의 예로서 사용되었지만, 본원에 기재된 계층적 방법 및 장치는 그 밖의 다른 데이터에 그 밖의 다른 용도로 적용될 수 있다. 예를 들어, 소리에 대응하는 데이터에 대해 계층적 분석이 사용되어, 제 1 레벨에서 음소들의 조합으로부터 음절을 식별하고, 제 2 레벨에서 음절들의 조합으로부터 단어를 식별할 수 있다. 또 다른 예를 들면, 계층적 분석이, 계층적 방식으로 자체적으로 축적된 기계 데이터(가령, 원시 0 및 1)에 적용될 수 있다.
도 5가 층들 사이의 특정 개별적인 연결을 도시하지만, 하나의 레벨로부터의 출력이 계층구조의 또 다른 레벨로 피드포워드 또는 피드백되는 계층구조가 구현될 수 있음을 알아야 한다. 예를 들어, 제 2 병렬 기계(504)로부터의 출력이 제 4 병렬 기계(508)로 전송될 수 있고, 제 4 병렬 기계(508)로부터의 출력이 제 3 병렬 기계(506)로 피드백될 수 있다. 일반적으로, 계층구조는, 병렬 기계로부터의 검출 상태 정보가 다른 병렬 기계들 중 하나 이상 또는 전부에게 피드될 수 있도록 구현될 수 있다.
일부 예에서, 계층적 구조에서, 하나 이상의 레벨에 의해 사용되는 프로그램을 업데이트하기 위해 피드백이 사용된다. 예를 들어, 제 1 레벨에서의 출력이 제 2 레벨로 제공되어, 제 2 레벨을 재프로그램(reprogram)할 수 있다. 이는 제 1 레벨에서 식별된(또는 식별되지 않은) 패턴을 기초로 제 2 레벨에 의해 적용되는 규칙을 업데이트하기 위해 사용될 수 있다. 예를 들어, 제 1 레벨은 제 2 레벨보다 계층구조의 상위 레벨이다. 예를 들어, 하위 레벨은, 본래는 상위 레벨에 의해 식별되는 패턴을 기초로 하는 프로그램에 의해 특정되지 않은 추가 패턴을 찾도록 재프로그램될 수 있다. 또 다른 예를 들면, 하위 레벨은 상기 하위 레벨에 의해 식별된 특정 패턴이 다른 패턴과 조합되어 유의미한 이벤트를 형성한다는 점에서 유의미하다고 통지받을 수 있다. 또 다른 예를 들면, 하위 레벨은, 식별된 특정 패턴이 어떠한 특정 가치도 갖지 않는다고 통지받을 수 있으며, 따라서 하위 레벨은 상기 패턴을 식별하는 것을 중단할 수 있다. 예를 들어, 재프로그램은 시간의 흐름에 따라 수행될 수 있어서, 특정 레벨에 대한 프로그램이 시간 주기 동안의 작은 조정에 의해 점차적으로 수정될 수 있다.
도 6은 계층구조의 재프로그램 부분으로의 피드백을 이용하는 4-레벨 계층구조(600)의 하나의 예를 도시한다. 4-레벨 계층구조(600)는 4개의 병렬 기계(602, 604, 606, 608)를 이용해 구현되며, 각각의 병렬 기계는 데이터 입력 포트(602A, 604A, 606A, 608A), 프로그래밍 인터페이스(602B, 604B, 606C, 608B), 및 출력 포트(602C, 604C, 606C, 608C)를 가진다. 제 1 병렬 기계(602)는 계층구조(600)의 제 1 레벨을 구현하고 제 2 병렬 기계(604)로 출력을 제공하며, 상기 제 2 병렬 기계(604)는 계층구조(600)의 제 2 레벨을 구현한다. 마찬가지로 제 3 및 제 4 병렬 기계(606, 608)가 계층구조(600)의 제 3 및 제 4 레벨을 구현한다. 예를 들어, 제 4 병렬 기계(608)로부터의 출력이, 제 1 병렬 기계(602)에 의해 수신되는 입력 데이터에 대한 계층구조(600)의 분석을 기초로 하는 계층구조(600)의 출력으로서 외부 장치로 전송된다. 따라서 제 4 병렬 기계(608)로부터의 출력이 계층구조(600)에 대한 집합적 출력에 대응한다. 다른 예를 들면, 병렬 기계(608)로부터의 출력이 계층구조(600)에 대한 집합적 출력에 대응할 수 있다.
제 2, 제 3, 및 제 4 병렬 기계(604, 606, 608)로부터의 출력은 그 아래 레벨에서 병렬 기계(602, 604, 606)의 프로그래밍 인터페이스(602B, 604B, 606B)로 피드백된다. 예를 들어, 제 4 병렬 기계(608)로부터의 출력이 제 3 병렬 기계(606)의 프로그램 인터페이스(606B)로 피드백된다. 따라서 제 3 병렬 기계(606)가 제 4 병렬 기계(608)로부터의 출력을 기초로 재프로그램될 수 있다. 따라서 제 3 병렬 기계(608)는 런타임 동안 자신의 프로그램을 수정할 수 있다. 이와 마찬가지로, 제 1 및 제 2 병렬 기계(602, 604)는 제 2 및 제 3 병렬 기계(604, 606)로부터의 출력을 기초로 런타임 동안 재프로그램될 수 있다.
예를 들어, 병렬 기계(604, 606, 608)로부터의 피드백이 분석되고 컴파일되어, 병렬 기계(602, 604, 606)를 재프로그램하기 위한 프로그램(가령, 이미지)을 형성할 수 있다. 예를 들어, 프로세싱 장치(614)에 의해 병렬 기계(408)로부터의 출력이 프로그래밍 인터페이스(606B)로 전송되기 전에, 분석되고 컴파일된다. 프로세싱 장치(614)는 병렬 기계(608)로부터의 출력을 기초로 병렬 기계(606)에 대해 업데이트된 프로그램을 생성할 수 있다. 프로세싱 장치(614)는 출력을 분석하고 제 3 병렬 기계(606)에 대해 업데이트된 프로그램을 컴파일할 수 있다. 그 후, 업데이트된 프로그램이 프로그래밍 인터페이스(606B)를 통해 제 3 병렬 기계(606)로 로딩되어, 제 3 병렬 기계(606)를 재프로그램할 수 있다. 예를 들어, 업데이트된 프로그램은 현재 프로그램으로부터의 부분적 변화만 포함할 수 있다. 따라서 예를 들어, 업데이트된 프로그램이 병렬 기계(602, 604, 606, 608)상의 현재 프로그램의 일부분만 대체한다. 또 다른 예를 들면, 업데이트된 프로그램이 현재 프로그램의 전체 또는 많은 부분을 대체한다. 마찬가지로, 프로세싱 장치(610, 612)는 제 2 및 제 3 병렬 기계(604, 606)로부터의 출력을 기초로 하여, 피드백을 분석하고, 업데이트된 프로그램을 컴파일할 수 있다. 프로세싱 장치(610, 612, 614)는 하나 이상의 추가 병렬 기계에 의해 구현되거나, 상이한 유형의 기계(가령, 폰 노이만 아키텍처를 갖는 컴퓨터)에 의해 구현될 수 있다.
일부 예에서, 프로세싱 장치(610, 612, 614)는 새로운 프로그램을 컴파일하기 전에 상위 레벨로부터의 출력을 분석한다. 예를 들어, 프로세싱 장치(610, 612, 614)는 하위 레벨 프로그램을 업데이트하는 방식을 결정하기 위해 출력을 분석하고, 그 후 분석을 기초로 하여 새로운(가령, 업데이트된, 원판) 하위 레벨 프로그램을 컴파일한다. 계층구조(600)에서, 특정 병렬 기계에서의 피드백이 특정 병렬 기계 바로 상위 레벨로부터 수신되더라도, 피드백은 임의의 병렬 기계로부터, 상위의, 또는 하위의, 또는 동일한 레벨의 또 다른 병렬 기계로 일 수 있다. 예를 들어, 피드백은 동일한 병렬 기계의 출력, 또는 동일한 레벨, 상위 레벨, 또는 하위 레벨의 또 다른 병렬 기계의 출력으로부터 병렬 기계의 프로그래밍 입력에서 수신될 수 있다. 덧붙이자면, 병렬 기계는 복수의 여러 다른 병렬 기계로부터 피드백을 수신할 수 있다. 피드백을 기초로 하는 병렬 기계의 재프로그래밍은 입력 데이터 내 패턴의 식별과 시간적으로 단절될 수 있다(가령, 원시 데이터의 프로세싱과 실시간으로 이뤄지는 것이 아님).
하위 레벨의 재프로그램에 영향을 미치기 위해, 정보를 계층구조의 하향으로 다시 전송하는 목적은, 하위 레벨이 관심 패턴을 파악하는 데 더 효율적이 될 수 있도록 하는 것일 수 있다. 계층구조의 하향으로 정보를 전송하는 또 다른 목적은 하위 레벨에서 더 높은 수준의 예리함을 얻는 것이다. 일부 예에서, 아마도 정보를 계층구조의 상위 레벨로 전송하는 데 시간이 걸리는 것이 인지될 때, 상위 레벨로 정보를 전송하는 프로세스가 생략된다. 일부 예에서, 시스템에 새로운 패턴의 식별을 분해하기 위해 상위 레벨이 필수적으로 사용될 수 있다. 이는 생물체의 뇌의 신피질에서 발생하여 사용되는 프로세스와 유사하다. 예를 들어, 패턴이 하위 레벨에서 완전히 분해될 수 있다면, 그렇게 되어야 한다. 피드백 메커니즘은 계층구조의 하위 레벨로 "학습"을 전달하는 한 가지 방법이다. 정보를 계층구조의 하향으로 다시 푸시하는 이 프로세스는 계층구조의 상층 레벨을 새롭거나 낯선 패턴을 프로세싱하기 위해 보존하는 데 도움이 될 것이다. 덧붙이자면, 계층구조의 다양한 레벨을 통한 데이터 전송량을 감소시킴으로써, 전체 인식 프로세스의 속도가 높아질 수 있다.
피드백은 계층구조의 하위 레벨을 입력에서의 데이터 스트림에 훨씬 더 민감(sensitive)하게 할 수 있다. 이러한 정보의 "하향 푸시(push down)"의 결과는, 결정이 계층구조의 하위 레벨에서 이뤄질 수 있고, 매우 빠르게 이뤄질 수 있다는 것일 수 있다. 따라서 예를 들어, 하위 레벨 병렬 기계(가령, 제 1 병렬 기계(602))로부터의 출력이 제 4 병렬 기계(608)로부터의 출력과 함께 계층구조(600)로부터 또 다른 장치로의 총체적 출력에 대응할 수 있다. 예를 들어 외부 장치는 이들 병렬 기계(602, 608) 각각으로부터의 출력을 모니터하여, 패턴이 계층구조(600)에 의해 식별됐을 때를 판단할 수 있다.
예를 들어, 피드백 정보는 분석된 데이터 스트림에 대응하는 식별 정보를 포함할 수 있다. 예를 들어, 식별 정보는 데이터의 식별 특성, 데이터의 포맷, 데이터의 프로토콜, 및/또는 그 밖의 다른 임의의 유형의 식별 정보를 포함할 수 있다. 식별 정보는 수집, 분석, 및 사용되어 예를 들어, 프로세싱 장치(610)에 의한 입력 데이터에 대한 분석 방법을 수정(가령, 적응화)할 수 있다. 그 후, 적응된 분석 방법을 이용해 병렬 기계(100)가 프로그램될 수 있다. 예를 들어, 식별 정보는 입력 데이터의 언어를 포함할 수 있다. 초기에 병렬 기계(100)는 입력 데이터의 언어를 판단하도록 프로그램될 수 있고, 입력에 대응하여 언어가 식별된 후 런타임 동안 적응화(가령, 재프로그램)될 수 있다. 병렬 기계(100)에 대한 적응된 분석 방법은 식별된 언어에 대한 분석 방법에 더 특정하게 대응할 수 있다. 마지막으로, 병렬 기계(100)는 적응된 분석 방법을 이용해 미래 입력 데이터를 분석할 수 있다. 분석 방법의 추가 적응화를 가능하게 하기 위해 입력 데이터에서 추가 식별 정보가 발견될 수 있도록, 피드백 프로세스는 반복적일 수 있다.
도 12와 관련하여 아래에서 설명될 바와 같이, 병렬 기계(100)로 로딩되기 위한 프로그램(가령, 이미지)가 컴파일러에 의해 생성될 수 있다. 일반적으로, 컴파일링은 연산 집약적 프로세스일 수 있고, 최초로 패턴 서명의 대형 데이터베이스를 컴파일할 때 가장 자명할 수 있다. 런타임 동작 중, 상위 레벨의 병렬 기계(100)가 하위 레벨로 피드백을 하위 레벨 병렬 기계를 위한 점진적 프로그램 업데이트(incremental program update)의 형태로 제공할 수 있다. 따라서 하위 레벨 병렬 기계로의 피드백 정보는 훨씬 더 작아진 원 프로그램으로의 점진적 업데이트일 수 있으며, 상기 업데이트는 컴파일하기에 덜 연산 집약적이다.
도 7은 4개의 병렬 기계(702, 704, 706, 708)를 이용해 구현되는 4-레벨 계층구조(700)의 또 다른 예를 도시한다. 상기 4개의 병렬 기계(702, 704, 706, 708)는 각각, 데이터 입력 포트(702A, 704A, 706A, 708A), 프로그래밍 인터페이스(702B, 704B, 706C, 708B), 및 출력 포트(702C, 704C, 706C, 708C)를 가진다. 덧붙이자면, 일부 예에서, 4-레벨 계층구조(700)가 병렬 기계(702, 704, 및 706)에 대해 프로그램을 컴파일하기 위해 프로세싱 장치(710, 712, 714)를 포함할 수 있다. 4-레벨 계층구조(700)에서, 제 2, 제 3, 및 제 4 레벨 병렬 기계(704, 706, 708)가 하위 레벨 병렬 기계(702, 704, 706)의 출력으로부터의 입력 데이터뿐 아니라 원시 데이터 스트림으로부터의 입력 데이터까지 수신한다. 따라서 레벨 2, 3, 및 4가 하위 레벨로부터의 패턴들과 원시 데이터의 조합으로부터 패턴을 식별할 수 있다.
도 6 및 7에서 볼 수 있는 것처럼, 병렬 기계(100)는, 계층구조로의 원시 데이터 입력뿐 아니라 병렬 기계(100)로부터의 출력까지, 자신을 포함해 그 밖의 다른 임의의 병렬 기계(100)로 전송될 수 있도록 하는 거의 모든 방식으로 캐스케이딩될 수 있다. 덧붙이자면, 특정 병렬 기계(100)로부터의 출력이, 데이터 입력 포트(110)로의 입력 데이터로서 및/또는 병렬 기계(100)에 대해 프로그램을 업데이트하기 위한 피드백으로서, 또 다른 병렬 기계(100)로 전송될 수 있다.
병렬 기계(100)가 입력 데이터의 하나의 데이터 사이클(가령, 1비트, 1워드)을 프로세싱하기 위한 시간 때문에, 병렬 기계(100)를 직렬로 캐스케이딩하는 것은 모든 병렬 기계(100)를 통해 입력 데이터 스트림을 완전히 프로세싱하여 계층구조의 총체적 출력을 생성하기 위한 시간을 증가시킬 수 있다. 계층구조의 하위 레벨이 하위 레벨(최정밀)의 입력을 수신할 수 있기 때문에, 하위 레벨은 상위 레벨의 출력보다 더 활성일 것으로 예상되어야 한다. 즉, 계층구조 내 각각의 연속하는 레벨이 상위 레벨 객체를 어셈블할 수 있다. 예를 들어, 병렬 기계(100)는 입력 데이터가 병렬 기계(100)로 얼마나 빨리 피드될 수 있는지를 제한하는 최대 입력 속도(maximum input rate)를 가진다. 이러한 입력 속도는 단일 데이터 사이클로서 고려될 수 있다. 각각의 연속하는 데이터 사이클에서, 병렬 기계(100)가 많은 말단 노드를 활성화시킬 가능성을 가진다. 이로써, 병렬 기계(100)(특히, 계층구조의 하위 레벨에 있는 병렬 기계)는 상당한 양의 출력 데이터를 생성할 수 있다. 예를 들어, 입력이 최하위 레벨의 병렬 기계(100)로 바이트의 스트림으로서 제공되는 경우, 임의의 특정 데이터 사이클에서, 병렬 기계(100)가 결과 정보의 복수 바이트를 생성하는 것이 가능할 수 있다. 정보의 1 바이트가 정보의 복수 바이트를 생성할 수 있는 경우, 정보가 계층구조를 통과하도록 병렬 기계(100)의 전체 계층구조는 동기화되어야 한다. 일부 예에서, 피드백은 동기화될 필요가 없다. 하위 레벨에서 피드백이 빨리 수신될수록, 하위 레벨은 빨리 적응화하고, 분석은 더 효율적일 수 있다.
예를 들어, (단일 병렬 기계(100)에 의해 구현되는) 계층구조의 각각의 레벨에 대한 최대 크기 출력은 1024 바이트일 수 있고, 계층구조의 심도(depth)는 4 레벨일 수 있다. 병렬 기계(100)에 대한 입력 데이터 스트림 데이터 속도는 128MB/초일 수 있다. 이들 조건 하에서, 계층구조의 각각의 레벨은 7.63마이크로초로 횡단될 수 있다. 4 레벨 계층구조의 경우, 병렬 기계(100)의 전체 스택의 총 정착 시간(settling time)은 4 곱하기 7.63마이크로초, 즉, 30.5마이크로초일 것이다. 30.5마이크로초의 정착 시간의 경우, 입력 데이터 주파수는 32KB/s로 제한되어야 함을 암시한다.
특히, 이는 병렬 기계(100)의 구성에 크게 의존한다. 병렬 기계(100)는 입력 데이터 속도 vs. 상태 기계 크기의 균형을 유지하도록(tradeoff) 구성될 수 있다. 덧붙이자면, 병렬 기계(100)로 로딩되는 개별 이미지를 생성한 컴파일러에 해당 수정이 가해진 경우, 병렬 기계로의 입력 워드 크기는 조절될 수 있다.
예를 들어, 앞서 기재된 계층적 구조는 폰 노이만 아키텍처를 갖는 기계상의 소프트웨어를 이용해 구현될 수 있다. 따라서 소프트웨어 명령이 프로세서로 하여금 원시 데이터에 대한 제 1 레벨 분석 FSM을 수행하도록 할 수 있다. 그 후, 제 1 레벨 FSM으로부터의 출력이, 프로세서에 의해 제 2 레벨 분석을 이용하여 프로세싱될 수 있는 등이다. 덧붙이자면, 제 1 레벨 분석이 예를 들어 제 2 레벨 분석의 출력을 기초로 수정되도록 앞서 설명된 피드백 루프가 구현될 수 있다.
도 8-11은 본원에서 "FSM 엔진(800)"이라고 일컬어지는 병렬 기계의 일례를 도시한다. 예를 들어, FSM 엔진(800)은 유한 상태 기계의 하드웨어 구현을 포함한다. 따라서 FSM 엔진(800)은 FSM 내 복수의 상태에 대응하는 복수의 선택적으로 연결 가능한 하드웨어 요소(가령, 프로그램 가능 요소)를 구현한다. FSM 내 상태와 유사하게, 하드웨어 요소는 입력 스트림을 분석하고, 상기 입력 스트림을 기초로 하여 하류 하드웨어 요소를 활성화할 수 있다.
FSM 엔진(800)은 범용 요소와 특수 목적 요소를 포함하는 복수의 프로그램 가능 요소를 포함한다. 범용 요소는 여러 가지 함수를 구현하도록 프로그램될 수 있다. 이들 범용 요소는 계층적으로 로우(row)(806)(도 9 및 10에 도시됨)와 블록(block)(802)(도 8 및 9에 도시됨)으로 조직된 SME(804, 805)(도 11에 도시됨)를 포함한다. 계층적으로 조직된 SME(804, 805) 사이에 신호를 라우팅하기 위해, 블록간 스위치(inter-block switch)(803)(도 8 및 9에 도시됨), 블록내 스위치(intra-block switch)(808)(도 9 및 10에 도시됨), 및 로우내 스위치(intra-row switch)(812)(도 10에 도시됨)를 포함하는 프로그램 가능 스위치의 계층구조가 사용된다. SME(804, 805)는 FSM 엔진(800)에 의해 구현되는 FSM의 상태에 대응할 수 있다. 이하에서 설명될 것처럼 프로그램 가능 스위치를 이용함으로써, 상기 SME(804, 805)는 서로 연결될 수 있다. 따라서 상태의 함수에 대응하도록 SME(804, 805)를 프로그램하고, FSM 내 상태들간 전이에 대응하도록 SME(804, 805)를 서로 선택적으로 연결함으로써, FSM이 FSM 엔진(800)상에서 구현될 수 있다.
도 8은 예시적 FSM 엔진(800)을 전체적으로 도시한다. FSM 엔진(800)은 프로그램 가능 블록간 스위치(803)에 의해 선택적으로 서로 연결될 수 있는 복수의 블록(802)을 포함한다. 덧붙이자면, 신호(가령, 데이터)를 수신하고 데이터를 블록(802)으로 제공하기 위해 블록(802)이 입력 블록(809)(가령, 데이터 입력 포트)으로 선택적으로 연결될 수 있다. 또한 블록(802)으로부터 외부 장치(가령, 또 다른 FSM 엔진(800))로 신호를 제공하기 위해 블록(802)이 출력 블록(813)(가령, 출력 포트)으로 선택적으로 연결될 수 있다. 또한 FSM 엔진(800)은 프로그램(가령, 이미지)를 FSM 엔진(800)으로 로딩하기 위해 프로그래밍 인터페이스(811)를 포함할 수 있다. 이미지는 SME(804, 805)의 상태를 프로그램(가령, 설정)할 수 있다. 즉, 이미지는 SME(804, 805)를 입력 블록(809)에서의 특정 입력에 대해 특정 방식으로 반응하도록 구성할 수 있다. 예를 들어, 입력 블록(809)에서 문자 'a'가 수신될 때 SME(804)는 하이 신호를 출력하도록 설정될 수 있다.
예를 들어, 입력 블록(809), 출력 블록(813), 및/또는 프로그래밍 인터페이스(811)가 레지스터로서 구현되어, 레지스터로의 쓰기가 각각의 요소로, 또는 각각의 요소로부터 데이터를 제공하도록 할 수 있다. 따라서 프로그래밍 인터페이스(811)에 대응하는 레지스터에 저장된 이미지로부터의 비트들이 SME(804, 805)에 로딩될 수 있다. 도 8은 블록(802), 입력 블록(809), 출력 블록(813), 및 블록간 스위치(803) 간의 특정 개수의 전도체(가령, 도선, 트레이스(trace))를 도시하지만, 또 다른 예에서, 더 적거나, 더 많은 개수의 전도체가 사용될 수 있음을 이해해야 한다.
도 9는 블록(802)의 일례를 도시한다. 블록(802)은 프로그램 가능 블록내 스위치(808)에 의해 선택적으로 서로 연결될 수 있는 복수의 로우(806)를 포함할 수 있다. 덧붙여, 블록간 스위치(803)에 의해, 로우(806)는 또 다른 블록(802) 내 또 다른 로우(806)로 선택적으로 연결될 수 있다. 예를 들어, 블록간 스위치(803)로/로부터의 신호의 타이밍을 제어하기 위해 버퍼(801)가 포함된다. 로우(806)는 본원에서 2원 그룹(GOT: group of two)(810)이라고 지칭되는 요소들의 쌍으로 조직된 복수의 SME(804, 805)를 포함한다. 예를 들어, 블록(802)은 16개의 로우(806)를 포함한다.
도 10은 로우(806)의 일례를 도시한다. 프로그램 가능 로우내 스위치(812)에 의해, GOT(810)는 로우(806) 내 다른 GOT(810) 및 그 밖의 다른 임의의 요소(824)로 선택적으로 연결될 수 있다. 또한 GOT(810)는 블록내 스위치(808)에 의해 다른 로우(806) 내 다른 GOT(810)로 연결되거나, 블록간 스위치(803)에 의해 다른 블록(802) 내 다른 GOT(810)로 연결될 수 있다. 예를 들어, GOT(810)는 제 1 및 제 2 입력(814, 816)과 출력(818)을 가진다. 제 1 입력(814)은 GOT(810)의 제 1 SME(804)로 연결되고, 제 2 입력(814)은 GOT(810)의 제 2 SME(804)로 연결된다.
예를 들어, 로우(806)는 제 1 및 제 2 복수의 로우 인터커넥션 전도체(820, 822)를 포함한다. 예를 들어, GOT(810)의 입력(814, 816)이 하나 이상의 로우 인터커넥션 전도체(820, 822)로 연결될 수 있고, 출력(818)이 하나의 로우 인터커넥션 전도체(820, 822)로 연결될 수 있다. 예를 들어, 제 1 복수의 로우 인터커넥션 전도체(820)가 로우(806) 내 각각의 GOT(810)의 각각의 SME(804)로 연결될 수 있다. 제 2 복수의 로우 인터커넥션 전도체(822)는 로우(806) 내 각각의 GOT(810)의 하나의 SME(804)로 연결될 수 있지만, GOT(810)의 나머지 SME(804)로 연결될 수 없다. 예를 들어, 제 2 복수의 로우 인터커넥션 전도체(822)의 제 1 절반이 로우(806) 내 SME(804)의 제 1 절반(각각의 GOT(810)에서의 하나씩의 SME(804))으로 연결될 수 있고, 제 2 복수의 로우 인터커넥션 전도체(822)의 제 2 절반이 로우(806) 내 SME(804)의 제 2 절반(각각의 GOT(810)에서의 나머지 SME(804))으로 연결될 수 있다. 제 2 복수의 로우 인터커넥션 전도체(822)와 SME(804, 805) 간의 제한된 연결성이 본원에서 "패리티(parity)"라고 지칭된다. 예를 들어, 로우(806)가 특수 목적 요소(824), 가령, 카운터, 프로그램 가능 부울 로직 요소, 필드 프로그램 가능 게이트 어레이(FPGA), 응용 주문형 집적 회로(ASIC), 프로그램 가능 프로세서(가령, 마이크로프로세서), 및 그 밖의 다른 요소를 포함할 수 있다.
예를 들어, 특수 목적 요소(824)는 카운터(본원에서 카운터(824)라고도 지칭됨)를 포함한다. 예를 들어, 카운터(824)는 12-비트 프로그램 가능 다운 카운터(programmable down counter)를 포함한다. 12-비트 프로그램 가능 카운터(824)는 카운팅 입력, 리세트 입력, 및 제로-카운트 출력을 가진다. 카운팅 입력은 표명(assert)될 때 카운터(824)의 값을 1만큼 감분시킨다. 리세트 입력은 표명될 때 카운터(824)가 연계된 레지스터로부터 초기 값을 로딩하도록 할 수 있다. 12-비트 카운터(824)의 경우, 최대 12-비트 숫자가 초기 값으로서 로딩될 수 있다. 카운터(824)의 값이 0으로 감분될 때, 제로-카운트 출력이 표명된다. 카운터(824)는 적어도 2개의 모드, 펄스(pulse) 및 홀드(hold)를 더 가진다. 카운터(824)가 펄스 모드로 설정될 때, 카운터(824)가 0으로 감분되는 클록 사이클 동안 제로-카운트 출력이 표명되고, 다음 클록 사이클에서 제로-카운트 출력은 더 이상 표명되지 않는다. 카운터(824)가 홀드 모드로 설정될 때, 카운터(824)가 0으로 감분되는 클록 사이클 동안 제로-카운트 출력이 표명되고, 리세트 입력이 표명됨으로써 카운터(824)가 리세트될 때까지 표명 상태를 유지한다. 예를 들어, 특수 목적 요소(824)는 부울 로직을 포함한다. 일부 예에서, 이 부울 로직은 FSM 엔진(800) 내 말단 상태 SME로부터 정보를 추출하도록 사용될 수 있다. 추출된 정보는 다른 FSM 엔진(800)으로 상태 정보를 전송하기 위해, 및/또는 FSM 엔진(800)을 재프로그램하거나 또 다른 FSM 엔진(800)을 재프로그램하기 위해 사용되는 프로그래밍 정보를 전송하기 위해, 사용될 수 있다.
도 11은 GOT(810)의 일례를 도시한다. GOT(810)는 입력(814, 816)을 갖고 OR 게이트(830) 및 3-투-1 멀티플렉서(842)로 연결된 출력(826, 828)을 갖는 제 1 SME(804)와 제 2 SME(805)를 포함한다. 상기 3-투-1 멀티플렉서(842)는 GOT(810)의 출력(818)을 제 1 SME(804), 제 2 SME(805), 또는 OR 게이트(830)로 연결하도록 설정될 수 있다. OR 게이트(830)는 두 출력(826, 828) 모두를 서로 연결하여 GOT(810)의 공통 출력(818)을 형성하도록 사용될 수 있다. 예를 들어, 제 1 및 제 2 SME(804, 805)는 앞서 설명한 바와 같이 패리티를 보여주며, 여기서 제 1 SME(804)의 입력(814)이 로우 인터커넥션 전도체(822)의 일부로 연결될 수 있고, 제 2 SME(805)의 입력(816)이 또 다른 로우 인터커넥션 전도체(822)로 연결될 수 있다. 예를 들어, 스위치(840)들 중 하나 또는 둘 모두를 설정함으로써, GOT(810) 내 2개의 SME(804, 805)는 캐스케이딩되거나, 및/또는 스스로에게로 루프 백(loop back)될 수 있다. SME(804, 805)는 SME(804, 805)의 출력(826, 828)을 나머지 SME(804, 805)의 입력(814, 816)으로 연결함으로써, 캐스케이딩될 수 있다. SME(804, 805)는, 출력(826, 828)을 그들 고유의 입력(814, 816)으로 연결함으로써, 스스로에게로 루프 백될 수 있다. 따라서 제 1 SME(804)의 출력(826)은 제 1 SME(804)의 입력과 제 2 SME(805)의 입력(816) 중 하나, 또는 둘 모두에 연결되거나, 둘 모두에 연결되지 않을 수 있다.
예를 들어, 상태 기계 요소(804, 805)는 검출 라인(detect line)(834)에 병렬로 연결된 복수의 메모리 셀(832), 가령, 동적 랜덤 액세스 메모리(DRAM)에서 종종 사용되는 메모리 셀을 포함한다. 한 가지 이러한 메모리 셀(832)은 데이터 상태, 가령, 하이 또는 로우 값(가령, 1 또는 0)에 대응하는 데이터 상태로 설정될 수 있는 메모리 셀을 포함한다. 메모리 셀(832)의 출력이 검출 라인(834)으로 연결되고, 메모리 셀(832)의 입력은 데이터 스트림 라인(836) 상의 데이터를 기초로 신호를 수신한다. 예를 들어, 데이터 스트림 라인(836) 상의 입력이 메모리 셀(832)중 하나를 선택하도록 디코딩된다. 선택된 메모리 셀(832)은 자신의 저장된 데이터 상태를 출력으로서 검출 라인(834)으로 제공한다. 예를 들어, 데이터 입력 포트(809)에서 수신된 데이터가 디코더(도시되지 않음)에게 제공될 수 있으며, 디코더는 데이터 스트림 라인(836) 중 하나를 선택할 수 있다. 예를 들어, 디코더는 하나의 ACSII 문자를 256비트 중 1비트로 변환할 수 있다.
따라서 메모리 셀(832)이 하이 값으로 설정되고 데이터 스트림 라인(836)상의 데이터가 메모리 셀(832)에 대응할 때 메모리 셀(832)은 하이 신호를 검출 라인(834)으로 출력한다. 데이터 스트림 라인(836)상의 데이터가 메모리 셀(832)에 대응하고, 메모리 셀(832)이 로우 값으로 설정될 때, 메모리 셀(832)은 검출 라인(834)으로 로우 신호를 출력한다. 검출 라인(834)상의 메모리 셀(832)로부터의 출력이 검출 회로(838)에 의해 감지된다. 예를 들어, 입력 라인(814, 816)상의 신호가 각각의 검출 회로(838)를 활성 또는 비활성 상태로 설정한다. 비활성 상태로 설정될 때, 검출 회로(838)는 각각의 검출 라인(834)상의 신호에 무관하게 각각의 출력(826, 828)상에 로우 신호를 출력한다. 활성 상태로 설정될 때, 검출 회로(838)는 각각의 SME(804, 805)의 메모리 셀(834) 중 하나로부터 하이 신호가 검출될 때 각각의 출력 라인(826, 828)상에 하이 신호를 출력한다. 활성 상태인 경우, 검출 회로(838)는 각각의 SME(804, 805)의 모든 메모리 셀(834)로부터의 신호가 로우일 때 각각의 출력 라인(826, 828)상에 로우 신호를 출력한다.
예를 들어, SME(804, 805)은 256 메모리 셀(832)을 포함하고, 각각의 메모리 셀(832)은 서로 다른 데이터 스트림 라인(836)으로 연결된다. 따라서 선택된 하나 이상의 데이터 스트림 라인(836)이 하이 신호를 가질 때 SME(804, 805)은 하이 신호를 출력하도록 프로그램될 수 있다. 예를 들어, SME(804)은 제 1 메모리 셀(832)(가령, 비트 0)이 하이로 설정되고, 나머지 모든 메모리 셀(832)(가령, 비트 1-255)이 로우로 설정되게 할 수 있다. 각각의 검출 회로(838)가 비활성 상태일 때, SME(804)는 비트 0에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 출력(826)에서 하이 신호를 출력한다. 또 다른 예를 들면, 적절한 메모리 셀(832)을 하이 값으로 설정함으로써 복수의 데이터 스트림 라인(836)의 하나가 하이 신호를 가질 때 SME(804)는 하이 신호를 출력하도록 설정될 수 있다.
예를 들어, 연계된 레지스터로부터 비트를 판독함으로써, 메모리 셀(832)은 하이 또는 로우 값으로 설정될 수 있다. 따라서 컴파일러에 의해 생성된 이미지를 레지스터에 저장하고 레지스터 내 비트를 연계된 메모리 셀(832)로 로딩함으로써 SME(804)가 프로그램될 수 있다. 예를 들어, 컴파일러에 의해 생성된 이미지가 하이 및 로우(가령, 1 및 0) 비트의 이진 이미지를 포함한다. 이미지는 SME(804, 805)를 캐스케이딩함으로써 FSM 엔진(800)을 FSM으로서 동작하도록 프로그램할 수 있다. 예를 들어, 검출 회로(838)를 활성 상태로 설정함으로써, 제 1 SME(804)가 활성 상태로 설정될 수 있다. 비트 0에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 제 1 SME(804)는 하이 신호를 출력하도록 설정될 수 있다. 제 2 SME(805)는 초기에 비활성 상태로 설정될 수 있지만, 활성일 때, 비트 1에 대응하는 데이터 스트림 라인(836)이 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다. 제 1 SME(804)의 출력(826)을 제 2 SME(805)의 입력(816)으로 연결하도록 설정함으로써, 제 1 SME(804)와 제 2 SME(805)가 캐스케이딩될 수 있다. 따라서 하이 신호가 비트 0에 대응하는 데이터 스트림 라인(836)상에서 감지될 때, 제 1 SME(804)는 출력(826)상에 하이 신호를 출력하고, 제 2 SME(805)의 검출 회로(838)를 활성 상태로 설정한다. 비트 1에 대응하는 데이터 스트림 라인(836)상에서 하이 신호가 감지될 때, 제 2 SME(805)는 또 다른 SME(805)를 활성화하거나 FSM 엔진(800)으로부터의 출력을 위해 출력(828)상에 하이 신호를 출력한다.
도 10은 컴파일러가 소스 코드를 병렬 기계를 프로그램하도록 구성된 이미지로 변환하기 위한 방법(1000)의 일례를 도시한다. 상기 방법(1000)은 소스 코드를 구문 트리(syntax tree)로 파싱(parsing)하는 단계(블록(1002)), 구문 트리를 오토마타(automaton)로 변환하는 단계(블록(1004)), 상기 오토마타를 최적화하는 단계(블록(1006)), 상기 오토마타를 넷리스트(netlist)로 변환하는 단계(블록(1008)), 넷리스트를 하드웨어에 위치시키는 단계(블록(1010)), 넷리스트를 라우팅하는 단계(블록(1012)), 및 결과 이미지를 퍼블리싱하는 단계(블록(1014))를 포함한다.
예를 들어, 컴파일러는 소프트웨어 개발자가 FSM 엔진(800)상에 FSM을 구현하기 위한 이미지를 생성할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스(API)를 포함한다. 컴파일러는 소스 코드 내 정규 표현식의 입력 세트를 FSM 엔진(800)을 프로그램하도록 구성된 이미지로 변환하기 위한 방법을 제공한다. 상기 컴파일러는 폰 노이만 아키텍처를 갖는 컴퓨터를 위한 명령에 의해 구현될 수 있다. 이들 명령은 컴퓨터상의 프로세서가 컴파일러의 함수를 구현하도록 할 수 있다. 예를 들어, 명령은, 프로세서에 의해 실행될 때, 프로세서로 하여금, 프로세서에 의해 액세스 가능한 소스 코드에 대해 블록(1002, 1004, 1006, 1008, 1010, 1012, 및 1014)에 기재된 동작을 수행하도록 할 수 있다. 폰 노이만 아키텍처를 갖는 예시적 컴퓨터가 도 13에 도시되며, 이하에서 기재된다.
예를 들어, 소스 코드가 심볼 그룹 내 심볼들의 패턴을 식별하기 위한 검색 스트링(search string)을 기술한다. 검색 스트링을 기술하기 위해, 소스 코드는 복수의 정규 표현식(regex)을 포함할 수 있다. regex는 심볼 검색 패턴을 기술하기 위한 스트링일 수 있다. regex는 다양한 컴퓨터 영역, 가령, 프로그래밍 언어, 텍스트 편집기, 네트워크 보안, 및 그 밖의 다른 것에서 널리 사용된다. 예를 들어, 컴파일러에 의해 지원되는 정규 표현식은 비구조화된 데이터(unstructured data)의 검색을 위한 검색 기준을 포함한다. 비구조화된 데이터는 자유 형태이며 데이터 내 워드에 적용되는 어떠한 인덱싱도 갖지 않는 데이터를 포함할 수 있다. 워드는 데이터 내에서 출력형(printable) 및 비출력형(non-printable) 바이트의 임의의 조합을 포함할 수 있다. 예를 들어, 컴파일러는 regex를 구현하기 위한 복수의 여러 다른 소스 코드 언어, Perl, (가령, PCRE(Perl compatible regular expressions)), PHP, Java, 및 .NET 언어를 지원할 수 있다.
블록(1002)에서, 컴파일러는 소스 코드를 파싱(parsing)하여 상관 연결된 연산자들의 배열을 형성할 수 있으며, 여기서 서로 다른 유형의 연산자가 소스 코드에 의해 구현되는 서로 다른 함수(가령, 소스 코드 내 regex에 의해 구현되는 서로 다른 함수)에 대응한다. 소스 코드를 파싱함으로써 소스 코드의 범용 표현(generic representation)이 생성될 수 있다. 예를 들어, 범용 표현은 구문 트리라고 알려진 트리 그래프의 형태로 된, 소스 코드 내 regex들의 인코딩된 표현을 포함한다. 본원에 기재된 예시는 구문 트리(또한 "추상 구문 트리"라고도 알려짐)로서의 배열을 참조하지만, 또 다른 예에서, 구체적 구문 트리 또는 또 다른 배열이 사용될 수 있다.
앞서 언급된 바와 같이, 컴파일러가 소스 코드의 복수의 언어를 지원할 수 있기 때문에, 파싱은 언어와 무관하게 소스 코드를 비-언어 특정 표현(non-language specific representation), 가령, 구문 트리로 변환한다. 따라서 컴파일러에 의한 추가 프로세싱(블록(1004, 1006, 1008, 1010))은 소스 코드의 언어와 무관하게 공통 입력 구조로부터 작동할 수 있다.
앞서 언급된 바와 같이, 구문 트리는 상관 연결된 복수의 연산자를 포함한다. 구문 트리는 복수의 서로 다른 유형의 연산자를 포함할 수 있다. 즉, 서로 다른 연산자는 소스 코드 내 regex들에 의해 구현되는 서로 다른 함수에 대응할 수 있다.
블록(1004)에서, 구문 트리가 오토마타로 변환된다. 오토마타는 FSM의 소프트웨어 모델을 포함하며, 적절하게 결정론적 또는 비결정론적으로 분류될 수 있다. 결정론적 오토마타는 단일 실행 경로(single path of execution)를 가지며, 반면에 비결정론적 오토마타는 복수의 동시적 실행 경로를 가진다. 오토마타는 복수의 상태를 포함한다. 구문 트리를 오토마타로 변환하기 위해, 구문 트리 내 연산자들 및 연산자들 간 관계가 상태들 간의 전이를 갖는 상태로 변환된다. 예를 들어, 오토마타는 부분적으로 FSM 엔진(800)의 하드웨어를 기초로 하여 변환될 수 있다.
예를 들어, 오토마타에 대한 입력 심볼은 알파벳, 숫자 0-9, 및 그 밖의 다른 출력 가능한 문자(printable character)의 심볼을 포함한다. 예를 들어, 바이트 값 0 내지 255에 의해 입력 심볼이 표현된다. 예를 들어, 오토마타는, 그래프의 노드들이 상태의 세트에 대응하는 방향성 그래프(directed graph)로서 표현될 수 있다. 예를 들어, 입력 심볼 α에 대한 상태 p에서 상태 q로의 전이, 즉, δ(p,α)가 노드 p에서 노드 q로의 방향성 연결에 의해 나타난다. 예를 들어, 오토마타의 역이 새로운 오토마타를 생성하며, 여기서 어떤 심볼 α에 대한 각각의 전이 p→q가 동일한 심볼 α에 대한 역 q→p이다. 역에서, 시작 상태가 최종 상태가 되고, 최종 상태가 시작 상태가 된다. 예를 들어, 오토마타에 의해 허용된(가령, 매칭된) 언어는, 오토마타로 순차적으로 입력될 때 최종 상태에 도달할 모든 가능한 문자 스트링의 세트이다. 오토마타에 의해 허용된 언어 내 각각의 스트링이 시작 상태로부터 하나 이상의 최종 상태로의 경로를 추적한다.
블록(1006)에서, 오토마타가 구축된 후, 오토마타는, 무엇보다도, 자신의 복잡도와 크기를 감소시키도록 최적화된다. 예비 상태(redundant state)들을 조합함으로써, 오토마타가 최적화될 수 있다.
블록(1008)에서, 최적화된 오토마타는 넷리스트로 변환된다. 오토마타를 넷리스트로 변환하는 것은 오토마타의 각각의 상태를 FSM 엔진(800)의 하드웨어 요소(가령, SME(804, 805), 또 다른 요소(824))에 사상(map)하며, 하드웨어 요소들 간의 연결을 결정한다.
블록(1010)에서, 넷리스트는 넷리스트의 각각의 노드에 대응하는 표적 장치의 특정 하드웨어 요소(가령, SME(804, 805), 특수 목적 요소(824))를 선택하도록 배치된다. 예를 들어, 배치는 FSM 엔진(800)의 일반적인 입력 및 출력 제약을 기초로 하여 각각의 특정 하드웨어 요소를 선택한다.
블록(1012)에서, 선택된 하드웨어 요소들을 서로 연결하여 넷리스트에 의해 기술되는 연결을 이루도록, 프로그램 가능 스위치(가령, 블록간 스위치(803), 블록내 스위치(808), 및 로우내 스위치(812))를 위한 설정을 결정하기 위해, 배치된 넷리스트가 라우팅된다. 예를 들어, 선택된 하드웨어 요소들을 연결하기 위해 사용될 FSM 엔진(800)의 특정 전도체, 및 프로그램 가능 스위치의 설정을 결정함으로써, 프로그램 가능 스위치를 위한 설정이 결정된다. 라우팅은 블록(1010)에서 배치된 하드웨어 요소들 간 연결의 더 특정적인 제한사항을 고려할 수 있다. 따라서 라우팅은, FSM 엔진(800)상에 전도체의 실제 제한사항이 있을 때 적절한 연결을 만들기 위해 전역 배치(global placement)에 의해 결정되는 하드웨어 요소들 중 일부의 위치를 조절할 수 있다.
넷리스트가 배치되고 라우팅되면, 배치되고 라우팅된 넷리스트가 FSM 엔진(800)의 프로그래밍을 위한 복수의 비트로 변환될 수 있다. 복수의 비트가 본원에서 이미지라고 일컬어진다.
블록(1014)에서 이미지가 컴파일러에 의해 퍼블리싱된다. 상기 이미지는 특정 하드웨어 요소 및/또는 FSM 엔진(800)의 프로그램 가능 스위치를 프로그램하기 위한 복수의 비트를 포함한다. 이미지가 복수의 비트(가령, 0 및 1)를 포함하는 실시예에서, 이미지는 2진 이미지라고 일컬어질 수 있다. 프로그램된 FSM 엔진(800)이 소스 코드에 의해 기술되는 기능을 갖는 FSM을 구현하도록 SME(804, 805), 특수 목적 요소(824), 및 프로그램 가능 스위치를 프로그램하기 위해 비트가 FSM 엔진(800)으로 로딩될 수 있다. 배치(블록(1010)) 및 라우팅(블록(1012))이 FSM 엔진(800) 내 특정 위치의 특정 하드웨어 요소를 오토마타 내 특정 상태로 사상할 수 있다. 따라서 이미지 내 비트는 원하는 함수를 구현하기 위해 특정 하드웨어 요소 및/또는 프로그램 가능 스위치를 프로그램할 수 있다. 예를 들어, 기계 코드를 컴퓨터 판독형 매체에 저장함으로써 이미지가 퍼블리싱될 수 있다. 또 다른 예를 들면, 이미지를 디스플레이 장치에 디스플레이함으로써, 이미지가 퍼블리싱될 수 있다. 또 다른 예를 들면, 이미지를 또 다른 장치, 가령, 이미지를 FSM 엔진(800)으로 로딩하기 위한 프로그래밍 장치로 전송함으로써, 이미지가 퍼블리싱될 수 있다. 또 다른 예를 들면, 이미지를 병렬 기계(가령, FSM 엔진(800))로 로딩함으로써 이미지가 퍼블리싱될 수 있다.
예를 들어, 이미지로부터 SME(804, 805) 및 그 밖의 다른 하드웨어 요소(824)로 비트 값을 직접 로딩함으로써, 또는 이미지를 하나 이상의 레지스터로 로딩하고 그 후 비트 값을 레지스터로부터 SME(804, 805) 및 그 박의 다른 하드웨어 요소(824)로 쓰기함으로써, 이미지가 FSM 엔진(800)으로 로딩될 수 있다. 예를 들어, 프로그램 가능 스위치(가령, 블록간 스위치(803), 블록내 스위치(808), 및 로우내 스위치(812))의 상태. 예를 들어, 이미지를 하나 이상의 메모리 주소로 쓰기함으로써 프로그래밍 장치 및/또는 컴퓨터가 이미지를 FSM 엔진(800)으로 로딩할 수 있도록, FSM 엔진(800)의 하드웨어 요소(가령, SME(804, 805), 그 밖의 다른 요소(824), 프로그램 가능 스위치(803, 808, 812))는 메모리 사상된다.
본원에 기재된 방법 예시는 적어도 부분적으로 기계 또는 컴퓨터-구현될 수 있다. 일부 예시는 상기의 예시들에서 기재된 방법들을 수행하도록 전자 장치를 구성하도록 동작될 수 있는 명령으로 인코딩된 컴퓨터 판독형 매체 또는 기계 판독형 매체를 포함할 수 있다. 이러한 방법의 구현은, 코드, 가령, 마이크로코드, 어셈블리어 코드, 더 하이 레벨의 코드, 또는 이와 유사한 코드를 포함할 수 있다. 이러한 코드는 다양한 방법을 수행하기 위한 컴퓨터 판독형 명령을 포함할 수 있다. 상기 코드는 컴퓨터 프로그램 프로덕트의 일부분을 형성할 수 있다. 덧붙이자면, 코드는 실행 동안 또는 그 밖의 다른 때에 하나 이상의 휘발성 또는 비휘발성 컴퓨터 판독형 매체에 유형 저장(tangibly store)될 수 있다. 이들 컴퓨터 판독형 매체는 하드 디스크, 탈착식 자기 디스크, 탈착식 광학 디스크(가령, 컴팩트 디스크 및 디지털 비디오 디스크), 자기 카세트, 메모리 카드 또는 스틱, 랜덤 액세스 메모리(RAM), 리드 온리 메모리(ROM), 등을 포함할 수 있다.
도 13은 폰 노이만 아키텍처를 갖는 컴퓨터(1500)의 일례를 일반적으로 도시한다. 본원의 내용을 읽고 이해하면, 해당업계 종사자라면 소프트웨어 프로그램에서 정의된 함수들을 실행하기 위해 소프트웨어 프로그램이 컴퓨터 기반 시스템 내 컴퓨터 판독형 매체로부터 런칭될 수 있는 방식을 이해할 것이다. 해당업계 종사자라면 본원에 개시된 방법을 구현하고 수행하기 위해 설계된 하나 이상의 소프트웨어 프로그램을 만들기 위해 사용될 수 있는 다양한 프로그래밍 언어를 이해할 것이다. 상기 프로그램은 객체 지향 언어, 가령, Java, C++, 또는 하나 이상의 그 밖의 다른 언어를 이용해 객체 지향 포맷으로 구축될 수 있다. 또는 프로그램은 절차형 언어, 가령, 어셈블리, C 등을 이용해 절차 지향 포맷으로 구축될 수 있다. 소프트웨어 구성요소는 해당업계 종사자에게 잘 알려진 복수의 메커니즘 중 임의의 것, 가령, 원격 절차 호출 또는 그 밖의 다른 것을 포함해 애플리케이션 프로그램 인터페이스 또는 인터프로세스 통신 기법을 이용해 통신할 수 있다. 다양한 실시예에 대한 설명은 어떠한 특정 프로그래밍 언어 또는 환경에도 한정되지 않는다.
따라서 또 다른 실시예가 구현될 수 있다. 예를 들어, 제조 물품, 가령, 컴퓨터, 메모리 시스템, 자기 또는 광학 디스크, 또 다른 일부 저장 장치, 또는 임의의 유형의 전자 장치 또는 시스템이, 명령(1524)(가령, 컴퓨터 프로그램 명령)이 저장된 컴퓨터 판독형 매체(1522), 가령 메모리(가령, 탈착식 저장 매체뿐 아니라, 전기, 광학, 또는 전자기 전도체를 포함하는 임의의 메모리)로 연결되는 하나 이상의 프로세서(1502)를 포함할 수 있으며, 상기 명령은 하나 이상의 프로세서(1502)에 의해 실행될 때 앞서 언급된 방법과 관련해 기재된 동작들 중 임의의 동작이 수행되도록 한다.
컴퓨터(1500)는 복수의 구성요소로 직접, 및/또는 버스(1508)를 이용해 연결된 프로세서(1502)를 갖는 컴퓨터 시스템의 형태를 취할 수 있다. 이러한 구성요소는 메인 메모리(1504), 정적 또는 비휘발성 메모리(1506), 및 대용량 저장장치(mass storage)(1516)를 포함할 수 있다. 프로세서(1502)로 연결된 그 밖의 다른 구성요소는 비디오 디스플레이 같은 출력 장치(1510), 키보드 같은 입력 장치(1512), 및 마우스 같은 커서 제어 장치(1514)를 포함할 수 있다. 또한, 프로세서(1502) 및 그 밖의 다른 구성요소를 네트워크(1526)로 연결하기 위한 네트워크 인터페이스 장치(1520)가 버스(1508)로 연결될 수 있다. 명령(1524)은 잘 알려진 많은 전송 프로토콜(가령, HTTP) 중 임의의 하나를 이용하는 네트워크 인터페이스 장치(1520)를 통해 네트워크(1526)를 통해 더 전송될 수 있다. 버스(1508)로 연결된 이들 요소 중 임의의 요소가, 구현될 특정 실시예에 따라, 없거나, 단수로 존재하거나, 복수로 존재할 수 있다.
예를 들어, 프로세스(1502), 메모리(1504, 1506), 또는 저장 장치(1516) 중 하나 이상은 각각 명령(1524)을 포함할 수 있고, 상기 명령은 실행될 때 컴퓨터(1500)로 하여금 본원에 기재된 방법 중 하나 이상을 수행하도록 할 수 있다. 대안적 실시예에서, 컴퓨터(1500)는 자립형 장치로 동작하거나, 또 다른 장치로 연결(가령, 네트워킹 연결)될 수 있다. 네트워킹 연결된 환경에서, 컴퓨터(1500)는 서브-클라이언트 네트워크 환경에서 서버 또는 클라이언트 장치로서, 또는 피어-투-피어(또는 분산) 네트워크 환경에서 피어 장치로서 동작할 수 있다. 컴퓨터(1500)는 개인 컴퓨터(PC), 태블릿 PC, 셋-톱 박스(STB), PDA(Personal Digital Assistant), 셀룰러 전화기, 웹 어플라이언스, 네트워크 라우터, 스위치 또는 브리지, 또는 해당 장치에 의해 수행될 동작들을 특정하는 명령들의 세트를 (순차적으로 또는 그 밖의 다른 방식으로) 실행할 수 있는 임의의 장치를 포함할 수 있다. 덧붙이자면, 단 하나의 컴퓨터(1500)만 도시되지만, 용어 "컴퓨터"는, 본원에 기재된 방법들 중 임의의 하나 이상을 수행하기 위해 개별적으로 또는 공동으로 명령들의 세트를 실행하는 장치들의 임의의 집합을 포함하는 것으로 이해되어야 한다.
또한 컴퓨터(1500)는 하나 이상의 통신 프로토콜(가령, USB(universal serial bus), IEEE 1394 등)을 이용해 주변 장치와 통신하기 위한 출력 제어기(1528)를 포함할 수 있다. 출력 제어기(1528)는, 예를 들어, 컴퓨터(1500)로 통신가능하게 연결된 프로그래밍 장치(1530)로 이미지를 제공할 수 있다. 프로그래밍 장치(1530)는 병렬 기계(가령, 병렬 기계(100), FSM 엔진(800)을 프로그램하도록 구성될 수 있다. 또 다른 예를 들면, 프로그래밍 장치(1530)는 컴퓨터(1500)와 일체 구성되고 버스(1508)로 연결되거나, 네트워크 인터페이스 장치(1520) 또는 또 다른 장치를 통해 컴퓨터(1500)와 통신할 수 있다.
컴퓨터 판독형 매체(1524)가 단일 매체로 나타나지만, 용어 "컴퓨터 판독형 매체"는 명령들(1524)의 하나 이상의 세트를 저장하는 단일 매체 또는 복수의 매체(가령, 중앙집중형 또는 분산형 데이터베이스, 또는 이와 연계된 캐시 및 서버, 및 또는 다양한 저장 매체, 가령, 프로세서(1502) 레지스터, 메모리(1504, 1506), 및 저장 장치(1516)를 포함하는 것으로 이해되어야 한다. 용어 "컴퓨터 판독형 매체"는, 컴퓨터에 의해 실행되며 컴퓨터로 하여금 본 발명의 방법들 중 임의의 하나 이상을 수행하도록 하는 명령들의 세트를 저장, 인코딩, 또는 지닐 수 있거나, 이러한 명령들의 세트에 의해 또는 상기 명령들의 세트와 연계된 데이터 구조를 저장, 인코딩, 또는 지닐 수 있는 임의의 매체를 포함하는 것으로 이해되어야 한다. 따라서 용어 "컴퓨터 판독형 매체"는 유형 매체, 가령, 솔리드 스테이트 메모리, 광학 및 자기 매체를 포함하나 이에 국한되지 않는 것으로 이해되어야 한다.
독자가 기술 내용의 속성과 요점을 확인할 수 있도록 할 요약서를 요구하는 37 C.F.R. 섹션 1.72(b)에 부합하도록 요약서가 제공된다. 요약서는 청구항의 범위나 의미를 제한하거나 해석하도록 사용되지 않을 것임을 알고 제출된다. 다음의 청구항은 상세한 설명에 포함되며, 각각의 청구항은 개별 실시예로서 독립적이다.

Claims (56)

  1. 데이터를 분석하기 위한 방법에 있어서, 상기 방법은
    제 1 데이터가 제 1 패턴과 매칭하는지를 결정하기 위해 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들을 이용해 상기 제 1 데이터를 분석하는 단계 - 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 제 1 세트의 상태 기계 요소들(state machine elements; SMEs)을 포함함 - ,
    상기 제 1 병렬 기계로부터 제 2 데이터를 출력하는 단계 - 상기 제 2 데이터는 상기 프로그램 가능 하드웨어 요소들에 의한 상기 제 1 데이터를 분석하는 것으로부터 생성되고, 상기 제 1 데이터를 분석한 결과의 지시자(indication)를 제공함 - ,
    상기 제 2 데이터가 제 2 패턴과 매칭하는지를 결정하기 위해 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들을 이용해 상기 제 2 데이터를 분석하는 단계 - 상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들은 제 2 상태로 구성된 제 2 세트의 SMEs를 포함함 - ,
    상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들에 의한 상기 제 2 데이터를 분석한 결과를 포함하는 제 3 데이터를 상기 제 2 병렬 기계로부터 출력하는 단계, 및
    상기 제 2 데이터를 분석한 결과에 기초하여 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들을 후속 동작들에 대한 제 3 상태로 구성(configure)하는 단계 - 상기 결과는 상기 제 2 패턴이 상기 제 2 병렬 기계의 프로그래밍 가능 하드웨어 요소들에 의해 상기 제 2 데이터에서 인식되는지 여부에 대한 지시자를 제공함 -
    를 포함하는, 데이터를 분석하기 위한 방법.
  2. 청구항 1에 있어서, 상기 제 2 데이터는 상기 제 1 데이터가 상기 제 1 패턴과 매칭하는지 여부에 대한 지시자를 제공하는, 데이터를 분석하기 위한 방법.
  3. 삭제
  4. 청구항 1에 있어서, 상기 제 2 데이터는 상기 제 1 패턴과의 매칭을 나타내는 단일 비트를 포함하는, 데이터를 분석하기 위한 방법.
  5. 청구항 1에 있어서, 상기 제 2 데이터는 복수의 패턴에 대한 매칭 및 비-매칭을 나타내는 복수의 비트를 포함하는 워드를 포함하며, 상기 복수의 패턴은 상기 제 1 패턴을 포함하는, 데이터를 분석하기 위한 방법.
  6. 청구항 1에 있어서, 상기 제 2 데이터는 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들의 상태에 대응하는 상태 벡터를 포함하는, 데이터를 분석하기 위한 방법.
  7. 청구항 1에 있어서, 상기 제 1 데이터를 분석하는 단계는 상기 제 1 데이터가 관심 시퀀스를 포함하는지 여부를 결정하는 단계를 포함하는, 데이터를 분석하기 위한 방법.
  8. 청구항 1에 있어서, 상기 제 1 병렬 기계로부터 제 2 데이터를 출력하는 단계는 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들의 상기 제 1 데이터에 대한 반응을 기초로 하여 제 2 데이터를 출력하는 단계를 포함하는, 데이터를 분석하기 위한 방법.
  9. 청구항 1에 있어서, 제 1 데이터를 분석하는 단계는 상기 제 1 데이터에서 데이터 시퀀스가 인식되는지 여부를 결정하는 단계를 포함하는, 데이터를 분석하기 위한 방법.
  10. 청구항 1에 있어서, 상기 제 1 데이터는 원시 데이터(raw data)를 포함하는, 데이터를 분석하기 위한 방법.
  11. 청구항 1에 있어서, 상기 제 2 데이터를 분석하는 단계는 상기 제 2 병렬 기계를 이용해 상기 제 1 데이터를 분석하는 단계도 포함하는, 데이터를 분석하기 위한 방법.
  12. 청구항 1에 있어서, 상기 제 2 데이터는 상기 제 1 병렬 기계의 검출 상태의 지시자를 제공하는, 데이터를 분석하기 위한 방법.
  13. 삭제
  14. 청구항 1에 있어서, 상기 제 2 데이터를 분석한 결과를 상기 제 2 병렬 기계로 피드백하는 단계를 더 포함하며, 상기 제 2 병렬 기계를 이용해 제 2 데이터를 분석하는 단계는 상기 제 2 데이터를 분석한 결과를 분석하는 단계를 더 포함하는, 데이터를 분석하기 위한 방법.
  15. 청구항 1에 있어서, 상기 제 2 패턴은 상기 제 1 데이터에서 인식된 패턴들 중 하나의 패턴을 포함하는, 데이터를 분석하기 위한 방법.
  16. 청구항 1에 있어서, 상기 제 1 병렬 기계를 구성하는 단계는
    상기 제 2 데이터에서 인식된 상기 제 2 패턴을 분석하는 단계와 상기 제 2 데이터에서 인식된 상기 제 2 패턴을 기초로 하여 상기 제 1 병렬 기계에 대한 프로그램을 컴파일하는 단계
    를 포함하는, 데이터를 분석하기 위한 방법.
  17. 청구항 16에 있어서, 상기 프로그램은 업데이트된 프로그램을 포함하는, 데이터를 분석하기 위한 방법.
  18. 데이터를 분석하기 위한 방법에 있어서, 상기 방법은
    제 1 데이터가 제 1 패턴과 매칭하는지를 결정하기 위해 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들을 이용해 상기 제 1 데이터를 분석하는 단계 - 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 제 1 세트의 상태 기계 요소들(SMEs)을 포함함 - ,
    상기 제 1 병렬 기계로부터 제 2 데이터를 출력하는 단계 - 상기 제 2 데이터는 상기 프로그램 가능 하드웨어 요소들에 의한 상기 제 1 데이터를 분석한 결과의 지시자를 제공함 - ,
    상기 제 2 데이터가 제 2 패턴과 매칭하는지를 결정하고 상기 제 2 데이터가 하나 이상의 제 2 복수의 패턴과 매칭하는지를 결정하기 위해 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들을 이용해 상기 제 2 데이터를 분석하는 단계 - 상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들은 제 2 상태로 구성된 제 2 세트의 SMEs를 포함함 - ,
    상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들에 의한 상기 제 2 데이터를 분석한 결과를 포함하는 제 3 데이터를 상기 제 2 병렬 기계로부터 출력하는 단계 - 상기 제 3 데이터는 상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들에 의해 상기 제 2 데이터에서 상기 제 2 복수의 패턴 중 하나 이상이 인식되었는지 여부의 지시자를 제공함 -
    제 3 병렬 기계의 프로그램 가능 하드웨어 요소들을 이용해 상기 제 3 데이터가 제 3 복수의 패턴 중 하나 이상과 매칭하는지 여부를 결정하는 단계 - 상기 제 3 병렬 기계의 프로그램 가능 하드웨어 요소들은 상기 제 3 데이터에서 제공된 지시자에 기초하여 구성되고, 상기 제 3 병렬 기계의 프로그램 가능 하드웨어 요소들은 제 3 상태로 구성된 제 3 세트의 SMEs를 포함함 - , 및
    상기 제 3 병렬 기계의 프로그램 가능 하드웨어 요소들에 의해 상기 제 3 데이터에서 상기 제 3 복수의 패턴 중 하나 이상이 인식되었는지 여부의 지시자를 포함하는 제 4 데이터를 상기 제 3 병렬 기계로부터 출력하는 단계
    를 포함하는, 데이터를 분석하기 위한 방법.
  19. 청구항 18에 있어서,
    제 3 병렬 기계로부터의 상기 제 4 데이터의 출력을 기초로 하여 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들과 상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들 중 적어도 하나를 구성(configure)하는 단계
    를 더 포함하는, 데이터를 분석하기 위한 방법.
  20. 데이터를 프로세싱하기 위한 장치에 있어서, 상기 장치는
    복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 1 병렬 기계 - 상기 복수의 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 상태 기계 요소들(SMEs)을 포함하고, 상기 제 1 병렬 기계는 제 1 데이터 입력 포트와 제 1 출력 포트를 가짐 - ; 및
    상기 복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 2 병렬 기계 - 상기 복수의 프로그램 가능 하드웨어 요소들은 제 2 상태로 구성된 SMEs를 포함하고, 상기 제 2 병렬 기계는 제 2 데이터 입력 포트와 제 2 출력 포트를 가지며, 상기 제 2 데이터 입력 포트는 상기 제 1 병렬 기계의 제 1 출력 포트에 연결됨 -
    를 포함하며,
    상기 제 1 병렬 기계는
    상기 제 1 데이터 입력 포트에서 제 1 데이터를 수신하고,
    상기 제 1 데이터의 처리를 위해 상기 복수의 프로그램 가능 하드웨어 요소들을 구성하고,
    상기 복수의 프로그램 가능 하드웨어 요소들을 이용하여 상기 제 1 데이터에서 제 1 패턴이 인식되는지 여부의 지시자를 제공하는 제 2 데이터를 상기 제 1 출력 포트에서 출력하도록 구성되고,
    상기 제 2 병렬 기계는
    상기 제 2 데이터 입력 포트에서 상기 제 1 병렬 기계로부터 상기 제 2 데이터를 수신하고,
    상기 제 2 데이터를 처리하기 위해 상기 복수의 프로그램 가능 하드웨어 요소들을 구성하고,
    상기 제 2 데이터에서 제 2 패턴이 인식되는지 여부의 지시자를 제공하는 제 3 데이터를 상기 제 2 출력 포트에서 출력하도록 구성되고,
    상기 제 1 병렬 기계는 상기 제 3 데이터를 기초로 하는 프로그램을 수신하도록 구성된 프로그래밍 인터페이스를 포함하고, 상기 프로그램은 상기 복수의 프로그램 가능 하드웨어 요소들을 재프로그램(reprogram)하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  21. 청구항 20에 있어서,
    상기 복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 3 병렬 기계 - 상기 복수의 프로그램 가능 하드웨어 요소들은 제 3 상태로 구성되고, 상기 제 3 병렬 기계는 제 3 데이터 입력 포트와 제 3 출력 포트를 갖고, 상기 제 3 출력 포트는 상기 제 2 병렬 기계의 제 2 데이터 입력 포트에 연결됨 - 를 더 포함하는, 데이터를 프로세싱하기 위한 장치.
  22. 청구항 20에 있어서, 상기 제 2 병렬 기계는
    상기 제 2 데이터 입력 포트에서 상기 제 1 데이터를 수신하도록 더 구성되고, 상기 제 2 데이터와 상기 제 1 데이터의 조합에서 상기 제 2 패턴을 인식하도록 더 구성되는, 데이터를 프로세싱하기 위한 장치.
  23. 청구항 20에 있어서, 상기 프로그램은 업데이트된 프로그램을 포함하며, 상기 업데이트된 프로그램은 상기 프로그램 가능 하드웨어 요소들의 구성을 위해 사용되는 프로그램을 업데이트하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  24. 청구항 20에 있어서, 상기 프로그램은 상기 제 1 병렬 기계에 대한 원 프로그램(original program)을 포함하는, 데이터를 프로세싱하기 위한 장치.
  25. 청구항 20에 있어서,
    상기 제 2 병렬 기계의 제 2 출력 포트에 연결되며, 상기 제 2 병렬 기계의 제 2 출력 포트를 분석하고 상기 제 2 병렬 기계로부터의 상기 제 2 데이터 출력의 함수로서 상기 프로그램 가능 하드웨어 요소들에 대한 업데이트 프로그램을 컴파일하도록 구성된 프로세싱 장치
    를 더 포함하며, 상기 프로그램 가능 하드웨어 요소들은 상기 프로세싱 장치로부터 업데이트된 프로그램을 수신하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  26. 청구항 25에 있어서,
    상기 복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 3 병렬 기계 - 상기 복수의 프로그램 가능 하드웨어 요소들은 제 3 상태로 구성되고, 상기 제 3 병렬 기계는 제 3 데이터 입력 포트와 제 3 출력 포트를 가짐 -
    를 포함하고, 상기 제 3 병렬 기계는
    상기 제 2 병렬 기계로부터 지시자를 수신하고,
    상기 지시자에 제 3 패턴이 있는지 여부를 결정하며,
    출력을 생성하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  27. 데이터를 분석하기 위한 방법에 있어서, 상기 방법은
    복수의 프로그램 가능 하드웨어 요소들로부터 구현되는 제 1 병렬 기계에서 제 1 데이터를 수신하는 단계 - 상기 제1 병렬 기계를 구현하는 상기 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 상태 기계 요소들(SMEs)을 포함함 - ,
    상기 프로그램 가능 하드웨어 요소들에 의해 상기 제 1 데이터의 분석으로부터 생성된 제 2 데이터를 상기 제 1 병렬 기계로부터 출력하는 단계,
    상기 복수의 프로그램 가능 하드웨어 요소들로부터 구현되는 제 2 병렬 기계에서 상기 제 2 데이터를 수신하는 단계 - 상기 제 2 병렬 기계를 구현하는 상기 프로그램 가능 하드웨어 요소들은 제 2 상태로 구현된 SMEs를 포함함 - ,
    상기 프로그램 가능 하드웨어 요소들에 의해 상기 제 2 데이터의 분석으로부터 생성된 제 3 데이터를 상기 제 2 병렬 기계로부터 출력하는 단계, 및
    상기 제 1 병렬 기계에 의한 후속 동작들에 대해 상기 제 2 병렬 기계로부터 출력된 상기 제 3 데이터를 기초로 하여 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들을 구성하는 단계 - 상기 제 1 병렬 기계의 재구성을 구현하는 상기 프로그램 가능 하드웨어 요소들은 제 3 상태로 구성된 SMEs를 포함함 -
    를 포함하고,
    상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들은 상기 제 1 데이터에서 제 1 패턴들을 식별하도록 구성되고, 상기 제 2 병렬 기계의 프로그램 가능 하드웨어 요소들은 상기 제 2 데이터에서 제 2 패턴들을 식별하도록 구성되는, 데이터를 분석하기 위한 방법.
  28. 청구항 27에 있어서, 상기 구성하는 단계는 재프로그램(reprogram)하는 단계를 포함하는, 데이터를 분석하기 위한 방법.
  29. 청구항 27에 있어서, 상기 제 1 병렬 기계를 구성하는 단계는,
    상기 제 3 데이터를 기초로 하여 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들에 대한 업데이트된 프로그램을 컴파일하는 단계, 및
    상기 업데이트된 프로그램을 상기 제 1 병렬 기계의 프로그램 가능 하드웨어 요소들로 로딩하는 단계
    를 포함하는, 데이터를 분석하기 위한 방법.
  30. 청구항 27에 있어서,
    상기 제 2 병렬 기계에서 상기 제 1 데이터를 수신하는 단계
    를 더 포함하고,
    상기 제 3 데이터를 상기 제 2 병렬 기계로부터 출력하는 단계는 상기 제 1 데이터 및 제 2 데이터의 분석으로부터 생성된 제 3 데이터를 출력하는 단계를 포함하는, 데이터를 분석하기 위한 방법.
  31. 방법으로서,
    복수의 프로그램 가능 하드웨어 요소들 상에서 실행되는 계층적 구조의 제 1 계층에서 제 1 병렬 기계를 사용하여, 입력 데이터에 대한 하위 레벨의 패턴 인식 분석을 수행하는 단계 - 상기 제 1 병렬 기계에 의해 사용되는 상기 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 제 1 세트의 상태 기계 요소들(SMEs)을 포함함 - ;
    상기 제 1 계층에 의해, 상기 하위 레벨의 패턴 인식 분석에 기초하여 제 1 출력을 제공하는 단계,
    상기 복수의 프로그램 가능 하드웨어 요소들 상에서 실행되는 계층적 구조의 제 2 계층에서 제 2 병렬 기계를 사용하여, 상기 제 1 출력에 대한 상위 레벨의 패턴 인식 분석을 수행하는 단계 - 상기 제 2 병렬 기계에 의해 사용되는 상기 프로그램 가능 하드웨어 요소들은 제 2 상태로 구성된 제 2 세트의 SMEs를 포함함 -,
    상기 제 2 계층에 의해, 상기 상위 레벨의 패턴 인식 분석에 기초하여 제 2 출력을 제공하는 단계; 및
    상기 제 1 계층 또는 상기 제 2 계층의 후속 패턴 인식 분석을 변경하도록, 상기 제 1 출력 또는 상기 제 2 출력에 기초하여 상기 제 1 계층 또는 상기 제 2 계층 각각 중 적어도 하나에 대한 복수의 프로그램 가능 하드웨어 요소들을 재구성하는 단계
    를 포함하는, 방법.
  32. 청구항 31에 있어서, 상기 제 1 병렬 기계와 상기 제 2 병렬 기계는 캐스케이딩(cascading) 방식으로 서로 연결되는, 방법.
  33. 청구항 31에 있어서, 상기 제 1 병렬 기계와 상기 제 2 병렬 기계는 직렬 연결되는, 방법.
  34. 청구항 31에 있어서, 상기 계층적 구조의 제 2 계층으로부터 상기 계층적 구조의 제 1 계층으로 피드백 정보를 제공하는 단계를 더 포함하는, 방법.
  35. 청구항 34에 있어서, 상기 피드백 정보가 상기 하위 레벨의 패턴 인식 분석을 업데이트하도록 사용되는, 방법.
  36. 청구항 35에 있어서, 상기 피드백 정보는 상기 하위 레벨의 패턴 인식 분석을 수행하도록 사용되는 프로그램을 업데이트하기 위해 사용되는, 방법.
  37. 청구항 35에 있어서, 상기 피드백 정보는 상기 입력 데이터에 대응하는 식별 정보를 포함하는, 방법.
  38. 청구항 31에 있어서, 상기 계층적 구조는 제 3 병렬 기계인, 방법.
  39. 청구항 31에 있어서, 상기 상위 레벨의 패턴 인식 분석을 기초로 하여 상기 하위 레벨의 패턴 인식 분석을 구성하는 단계를 더 포함하는, 방법.
  40. 청구항 31에 있어서, 상기 하위 레벨의 패턴 인식 분석을 기초로 하여 상기 상위 레벨의 패턴 인식 분석을 구성하는 단계를 더 포함하는, 방법.
  41. 청구항 31에 있어서, 상기 제 1 계층 및 상기 제 2 계층 모두는 폰 노이만(von Neumann) 아키텍처를 갖는 기계상의 소프트웨어를 이용하는 상기 복수의 프로그램 가능 하드웨어 요소들에 의해 구현되는, 방법.
  42. 청구항 31에 있어서, 상기 제 1 출력은 검출 상태 정보를 포함하는, 방법.
  43. 데이터를 프로세싱하기 위한 장치에 있어서, 상기 장치는
    제 1 복수의 프로그램 가능 하드웨어 요소들 이용하여 데이터를 분석하도록 구성된 제 1 병렬 기계 - 상기 제 1 병렬 기계에 의해 사용되는 상기 제 1 복수의 프로그램 가능 하드웨어 요소들은 제 1 상태로 구성된 제 1 세트의 상태 기계 요소들(SMEs)을 포함하고, 상기 제 1 병렬 기계는 제 1 데이터 입력 포트와 제 1 출력 포트를 가짐 - ;
    제 2 복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 2 병렬 기계 - 상기 제 2 병렬 기계에 의해 사용되는 상기 제 2 복수의 프로그램 가능 하드웨어 요소들은 제 2 상태로 구성된 제 2 세트의 SMEs를 포함하고, 상기 제 2 병렬 기계는 제 2 데이터 입력 포트와 제 2 출력 포트를 가지며, 상기 제 2 데이터 입력 포트는 상기 제 1 병렬 기계의 제 1 출력 포트에 연결됨 - ; 및
    상기 제 2 병렬 기계의 상기 제 2 출력 포트에 연결되며, 상기 제 2 병렬 기계의 상기 제 2 출력 포트를 분석하고, 상기 제 2 병렬 기계로부터의 제 2 데이터 출력의 함수로서 상기 제 1 병렬 기계의 상기 제 1 복수의 프로그램 가능 하드웨어 요소들에 대한 업데이트 프로그램을 컴파일하도록 구성된 프로세싱 장치
    를 포함하며,
    상기 제 1 병렬 기계는
    상기 제 1 데이터 입력 포트에서 제 1 데이터를 수신하고,
    상기 제 1 데이터를 처리하도록 상기 제 1 복수의 프로그램 가능 하드웨어 요소들을 구성하고,
    상기 제 1 복수의 프로그램 가능 하드웨어 요소들을 이용하여 상기 제 1 데이터에서 제 1 패턴이 인식되는지 여부에 기초하여 제 2 데이터를 상기 제 1 출력 포트에서 출력하도록 구성되고,
    상기 제 2 병렬 기계는
    상기 제 2 데이터 입력 포트에서 상기 제 2 데이터를 수신하고,
    상기 제 2 데이터를 처리하도록 상기 제 2 복수의 프로그램 가능 하드웨어 요소들을 구성하고,
    상기 제 2 데이터에서 제 2 패턴이 인식되는지 여부의 지시자를 상기 제 2 출력 포트에서 출력하도록 구성되고,
    상기 제 1 병렬 기계는 상기 프로세싱 장치로부터 업데이트된 프로그램을 수신하고, 상기 제 1 병렬 기계에 사용되는 상기 제 1 복수의 프로그램 가능 하드웨어 요소들을 구성하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  44. 청구항 43에 있어서,
    제 3 복수의 프로그램 가능 하드웨어 요소들을 이용하여 데이터를 분석하도록 구성된 제 3 병렬 기계를 포함하고,
    상기 제 3 병렬 기계에 의해 사용되는 상기 제 3 복수의 프로그램 가능 하드웨어 요소들은 제 3 상태로 구성된 제 3 세트의 SMEs를 포함하고,
    상기 제 3 병렬 기계는 제 3 데이터 입력 포트와 제 3 출력 포트를 가지며,
    상기 제 3 병렬 기계는
    상기 제 2 병렬 기계로부터 지시자를 수신하고,
    상기 지시자에 제 3 패턴이 있는지 여부를 결정하며,
    출력을 생성하도록 구성되는, 데이터를 프로세싱하기 위한 장치.
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
KR1020137000570A 2010-06-10 2011-06-09 계층적 구조를 이용한 데이터 분석 KR101698237B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US35354610P 2010-06-10 2010-06-10
US61/353,546 2010-06-10
US12/943,551 2010-11-10
US12/943,551 US8601013B2 (en) 2010-06-10 2010-11-10 Analyzing data using a hierarchical structure
PCT/US2011/039849 WO2011156634A2 (en) 2010-06-10 2011-06-09 Analyzing data using a hierarchical structure

Publications (2)

Publication Number Publication Date
KR20130120441A KR20130120441A (ko) 2013-11-04
KR101698237B1 true KR101698237B1 (ko) 2017-02-01

Family

ID=45097097

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137000570A KR101698237B1 (ko) 2010-06-10 2011-06-09 계층적 구조를 이용한 데이터 분석

Country Status (7)

Country Link
US (4) US8601013B2 (ko)
EP (1) EP2580659B1 (ko)
JP (1) JP5736042B2 (ko)
KR (1) KR101698237B1 (ko)
CN (2) CN105912992B (ko)
TW (1) TWI584198B (ko)
WO (1) WO2011156634A2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792097B2 (en) 2011-01-25 2017-10-17 Micron Technology, Inc. Method and apparatus for compiling regular expressions
US9916145B2 (en) 2011-01-25 2018-03-13 Micron Technology, Inc. Utilizing special purpose elements to implement a FSM
US11488378B2 (en) 2010-06-10 2022-11-01 Micron Technology, Inc. Analyzing data using a hierarchical structure

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8209521B2 (en) 2008-10-18 2012-06-26 Micron Technology, Inc. Methods of indirect register access including automatic modification of a directly accessible address register
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US7970964B2 (en) 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US8402188B2 (en) 2008-11-10 2013-03-19 Micron Technology, Inc. Methods and systems for devices with a self-selecting bus decoder
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8214672B2 (en) 2009-01-07 2012-07-03 Micron Technology, Inc. Method and systems for power consumption management of a pattern-recognition processor
US9836555B2 (en) 2009-06-26 2017-12-05 Micron Technology, Inc. Methods and devices for saving and/or restoring a state of a pattern-recognition processor
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US9323994B2 (en) * 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8766666B2 (en) * 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
CN103443767B (zh) 2011-01-25 2016-01-20 美光科技公司 展开量化以控制自动机的入度和/或出度
WO2012103151A2 (en) 2011-01-25 2012-08-02 Micron Technology, Inc. State grouping for element utilization
US9047559B2 (en) 2011-07-22 2015-06-02 Sas Institute Inc. Computer-implemented systems and methods for testing large scale automatic forecast combinations
US8782624B2 (en) * 2011-12-15 2014-07-15 Micron Technology, Inc. Methods and systems for detection in a state machine
US8680888B2 (en) 2011-12-15 2014-03-25 Micron Technologies, Inc. Methods and systems for routing in a state machine
US9443156B2 (en) 2011-12-15 2016-09-13 Micron Technology, Inc. Methods and systems for data analysis in a state machine
US8593175B2 (en) 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic in a state machine lattice
US8648621B2 (en) 2011-12-15 2014-02-11 Micron Technology, Inc. Counter operation in a state machine lattice
US9430735B1 (en) 2012-02-23 2016-08-30 Micron Technology, Inc. Neural network in a memory device
US20130275709A1 (en) 2012-04-12 2013-10-17 Micron Technology, Inc. Methods for reading data from a storage buffer including delaying activation of a column select
US9336774B1 (en) * 2012-04-20 2016-05-10 Google Inc. Pattern recognizing engine
US9087306B2 (en) 2012-07-13 2015-07-21 Sas Institute Inc. Computer-implemented systems and methods for time series exploration
US9244887B2 (en) * 2012-07-13 2016-01-26 Sas Institute Inc. Computer-implemented systems and methods for efficient structuring of time series data
US9235798B2 (en) 2012-07-18 2016-01-12 Micron Technology, Inc. Methods and systems for handling data received by a state machine engine
US9389841B2 (en) * 2012-07-18 2016-07-12 Micron Technology, Inc. Methods and systems for using state vector data in a state machine engine
US9304968B2 (en) 2012-07-18 2016-04-05 Micron Technology, Inc. Methods and devices for programming a state machine engine
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
US9824121B2 (en) * 2012-08-10 2017-11-21 Arris Enterprises Llc Aggregate data streams in relational database systems
US9501131B2 (en) 2012-08-31 2016-11-22 Micron Technology, Inc. Methods and systems for power management in a pattern recognition processing system
US9075428B2 (en) 2012-08-31 2015-07-07 Micron Technology, Inc. Results generation for state machine engines
US9063532B2 (en) 2012-08-31 2015-06-23 Micron Technology, Inc. Instruction insertion in state machine engines
US9190057B2 (en) * 2012-12-12 2015-11-17 Amazon Technologies, Inc. Speech model retrieval in distributed speech recognition systems
US9147218B2 (en) 2013-03-06 2015-09-29 Sas Institute Inc. Devices for forecasting ratios in hierarchies
US9448965B2 (en) 2013-03-15 2016-09-20 Micron Technology, Inc. Receiving data streams in parallel and providing a first portion of data to a first state machine engine and a second portion to a second state machine
US9703574B2 (en) 2013-03-15 2017-07-11 Micron Technology, Inc. Overflow detection and correction in state machine engines
US10089043B2 (en) 2013-03-15 2018-10-02 Micron Technology, Inc. Apparatus and methods for a distributed memory system including memory nodes
US9934259B2 (en) 2013-08-15 2018-04-03 Sas Institute Inc. In-memory time series database and processing in a distributed environment
US10169720B2 (en) 2014-04-17 2019-01-01 Sas Institute Inc. Systems and methods for machine learning using classifying, clustering, and grouping time series data
US9892370B2 (en) 2014-06-12 2018-02-13 Sas Institute Inc. Systems and methods for resolving over multiple hierarchies
US9208209B1 (en) 2014-10-02 2015-12-08 Sas Institute Inc. Techniques for monitoring transformation techniques using control charts
US11366675B2 (en) 2014-12-30 2022-06-21 Micron Technology, Inc. Systems and devices for accessing a state machine
WO2016109571A1 (en) 2014-12-30 2016-07-07 Micron Technology, Inc Devices for time division multiplexing of state machine engine signals
US10430210B2 (en) 2014-12-30 2019-10-01 Micron Technology, Inc. Systems and devices for accessing a state machine
US9418339B1 (en) 2015-01-26 2016-08-16 Sas Institute, Inc. Systems and methods for time series analysis techniques utilizing count data sets
CN104866831B (zh) * 2015-05-29 2018-06-05 福建省智慧物联网研究院有限责任公司 特征加权的人脸识别算法
US10983682B2 (en) 2015-08-27 2021-04-20 Sas Institute Inc. Interactive graphical user-interface for analyzing and manipulating time-series projections
US10977309B2 (en) 2015-10-06 2021-04-13 Micron Technology, Inc. Methods and systems for creating networks
US10691964B2 (en) 2015-10-06 2020-06-23 Micron Technology, Inc. Methods and systems for event reporting
US10846103B2 (en) 2015-10-06 2020-11-24 Micron Technology, Inc. Methods and systems for representing processing resources
US10146555B2 (en) 2016-07-21 2018-12-04 Micron Technology, Inc. Adaptive routing to avoid non-repairable memory and logic defects on automata processor
US10268602B2 (en) 2016-09-29 2019-04-23 Micron Technology, Inc. System and method for individual addressing
US10019311B2 (en) 2016-09-29 2018-07-10 Micron Technology, Inc. Validation of a symbol response memory
US10592450B2 (en) 2016-10-20 2020-03-17 Micron Technology, Inc. Custom compute cores in integrated circuit devices
US10929764B2 (en) 2016-10-20 2021-02-23 Micron Technology, Inc. Boolean satisfiability
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
US9996328B1 (en) * 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
EP3682353A4 (en) * 2017-09-13 2021-12-08 Next Silicon Ltd DIRECTED AND INTERCONNECTED GRID DATA FLOW ARCHITECTURE
US10331490B2 (en) 2017-11-16 2019-06-25 Sas Institute Inc. Scalable cloud-based time series analysis
CN108234452B (zh) * 2017-12-12 2020-11-24 上海天旦网络科技发展有限公司 一种网络数据包多层协议识别的系统和方法
US10338994B1 (en) 2018-02-22 2019-07-02 Sas Institute Inc. Predicting and adjusting computer functionality to avoid failures
US10255085B1 (en) 2018-03-13 2019-04-09 Sas Institute Inc. Interactive graphical user interface with override guidance
US10678956B2 (en) * 2018-06-25 2020-06-09 Dell Products, L.P. Keyboard for provisioning security credentials
US10560313B2 (en) 2018-06-26 2020-02-11 Sas Institute Inc. Pipeline system for time-series data forecasting
US10685283B2 (en) 2018-06-26 2020-06-16 Sas Institute Inc. Demand classification based pipeline system for time-series data forecasting
US10861551B2 (en) 2018-12-28 2020-12-08 Micron Technology, Inc. Memory cells configured to generate weighted inputs for neural networks
JP7193623B2 (ja) * 2019-04-23 2022-12-20 日立Astemo株式会社 車両制御装置及びコンピュータプログラム
US11269526B2 (en) 2020-04-23 2022-03-08 Next Silicon Ltd Interconnected memory grid with bypassable units

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005122466A (ja) * 2003-10-16 2005-05-12 Canon Inc 積和演算回路及びその方法

Family Cites Families (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5081608A (en) * 1988-04-18 1992-01-14 Matsushita Electric Industrial Co., Ltd. Apparatus for processing record-structured data by inserting replacement data of arbitrary length into selected data fields
JP3130326B2 (ja) * 1991-03-20 2001-01-31 富士通株式会社 階層ネットワーク構成演算素子
US5586266A (en) 1993-10-15 1996-12-17 International Business Machines Corporation System and method for adaptive, active monitoring of a serial data stream having a characteristic pattern
US5537580A (en) 1994-12-21 1996-07-16 Vlsi Technology, Inc. Integrated circuit fabrication using state machine extraction from behavioral hardware description language
US5831853A (en) 1995-06-07 1998-11-03 Xerox Corporation Automatic construction of digital controllers/device drivers for electro-mechanical systems using component models
US5729678A (en) * 1996-03-04 1998-03-17 Ag Communication Systems Corporation Bus monitor system
AU5355098A (en) 1996-11-14 1998-06-03 Alcatel Usa Sourcing, L.P. Generic software state machine and method of constructing dynamic objects for an application program
US5966534A (en) 1997-06-27 1999-10-12 Cooke; Laurence H. Method for compiling high level programming languages into an integrated processor with reconfigurable logic
US6748588B1 (en) 1999-03-31 2004-06-08 Microsoft Corporation One-pass greedy-pattern-matching finite-state-machine code generation
US6262594B1 (en) 1999-11-05 2001-07-17 Ati International, Srl Apparatus and method for configurable use of groups of pads of a system on chip
US6564336B1 (en) * 1999-12-29 2003-05-13 General Electric Company Fault tolerant database for picture archiving and communication systems
US6832378B1 (en) 2000-06-20 2004-12-14 International Business Machines Corporation Parallel software processing system
US7140018B1 (en) 2000-06-20 2006-11-21 International Business Machines Corporation Method of using a distinct flow of computational control as a reusable abstract data object
US6507903B1 (en) 2000-06-20 2003-01-14 International Business Machines Corporation High performance non-blocking parallel storage manager for parallel software executing on coordinates
GB2367917A (en) * 2000-10-12 2002-04-17 Qas Systems Ltd Retrieving data representing a postal address from a database of postal addresses using a trie structure
US7020850B2 (en) 2001-05-02 2006-03-28 The Mathworks, Inc. Event-based temporal logic
JP4846924B2 (ja) * 2001-05-31 2011-12-28 キヤノン株式会社 パターン認識装置
US7546354B1 (en) * 2001-07-06 2009-06-09 Emc Corporation Dynamic network based storage with high availability
JP2003044184A (ja) * 2001-08-01 2003-02-14 Canon Inc データ処理装置及び電力制御方法
US7170891B2 (en) * 2001-08-30 2007-01-30 Messenger Terabit Networks, Inc. High speed data classification system
US20030066050A1 (en) 2001-09-26 2003-04-03 Wang Douglas W. Method and system for programming devices using finite state machine descriptions
US6957371B2 (en) 2001-12-04 2005-10-18 Intellitech Corporation Method and apparatus for embedded built-in self-test (BIST) of electronic circuits and systems
US6785872B2 (en) 2002-01-22 2004-08-31 Hewlett-Packard Development Company, L.P. Algorithm-to-hardware system and method for creating a digital circuit
US20040127207A1 (en) 2002-09-25 2004-07-01 Interdigital Technology Corporation Programmable radio interface
US7124392B2 (en) 2002-09-27 2006-10-17 Stmicroelectronics, Pvt. Ltd. Mapping of programmable logic devices
US7171561B2 (en) * 2002-10-17 2007-01-30 The United States Of America As Represented By The Secretary Of The Air Force Method and apparatus for detecting and extracting fileprints
US7464254B2 (en) 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
CN1894559A (zh) 2003-03-17 2007-01-10 索尼电子有限公司 执行使命引擎的方法和装置
US7390958B2 (en) * 2003-06-25 2008-06-24 Yamaha Corporation Method for teaching music
ATE542176T1 (de) 2003-10-16 2012-02-15 Canon Kk Betriebsschaltung und betriebssteuerverfahren dafür
US7487542B2 (en) 2004-01-14 2009-02-03 International Business Machines Corporation Intrusion detection using a network processor and a parallel pattern detection engine
WO2005119531A2 (en) 2004-06-01 2005-12-15 Tera Systems, Inc. Rule-based design consultant and method for integrated circuit design
US20050283743A1 (en) 2004-06-07 2005-12-22 Mulholland Philip J Method for generating hardware information
WO2006013428A1 (en) * 2004-07-26 2006-02-09 Nokia Corporation, System and method for searching for content stored by one or more media servers
US8135652B2 (en) 2004-10-29 2012-03-13 Nec Laboratories America, Inc. Parallel support vector method and apparatus
US7392229B2 (en) 2005-02-12 2008-06-24 Curtis L. Harris General purpose set theoretic processor
US7761851B2 (en) * 2005-05-31 2010-07-20 International Business Machines Corporation Computer method and system for integrating software development and deployment
US7805301B2 (en) 2005-07-01 2010-09-28 Microsoft Corporation Covariance estimation for pattern recognition
US20070112701A1 (en) * 2005-08-15 2007-05-17 Microsoft Corporation Optimization of cascaded classifiers
CN101099147B (zh) * 2005-11-11 2010-05-19 松下电器产业株式会社 对话支持装置
JP4528728B2 (ja) 2006-01-31 2010-08-18 株式会社東芝 デジタル回路の自動設計装置、自動設計方法、および自動設計プログラム
US7427871B2 (en) 2006-06-21 2008-09-23 Element Cxi, Llc Fault tolerant integrated circuit architecture
US7809723B2 (en) * 2006-06-26 2010-10-05 Microsoft Corporation Distributed hierarchical text classification framework
CN1877531A (zh) 2006-06-30 2006-12-13 浙江大学 一种嵌入式编译体系扫描器的实现方法
WO2008010636A1 (en) 2006-07-20 2008-01-24 M.I.Tech Co., Ltd. Stent
US8065249B1 (en) 2006-10-13 2011-11-22 Harris Curtis L GPSTP with enhanced aggregation functionality
US7774286B1 (en) 2006-10-24 2010-08-10 Harris Curtis L GPSTP with multiple thread functionality
US7962428B2 (en) * 2006-11-30 2011-06-14 Siemens Medical Solutions Usa, Inc. System and method for joint optimization of cascaded classifiers for computer aided detection
US20080168013A1 (en) 2006-12-05 2008-07-10 Paul Cadaret Scalable pattern recognition system
US8656381B2 (en) 2006-12-07 2014-02-18 International Business Machines Corporation Presenting machine instructions in a machine-independent tree form suitable for post-link optimizations
US7899977B2 (en) * 2006-12-08 2011-03-01 Pandya Ashish A Programmable intelligent search memory
CN101013452A (zh) 2007-02-05 2007-08-08 江苏大学 一种符号化的模型检测方法
US7693806B2 (en) * 2007-06-21 2010-04-06 Microsoft Corporation Classification using a cascade approach
CN101360088B (zh) 2007-07-30 2011-09-14 华为技术有限公司 正则表达式编译、匹配系统及编译、匹配方法
US8561037B2 (en) 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
CN101201836B (zh) 2007-09-04 2010-04-14 浙江大学 基于带记忆确定有限自动机的正则表达式匹配加速方法
JP4957500B2 (ja) 2007-10-12 2012-06-20 日本電気株式会社 文字列照合回路
CN101499065B (zh) 2008-02-01 2011-11-02 华为技术有限公司 基于fa的表项压缩方法及装置、表项匹配方法及装置
US8782613B2 (en) * 2008-08-12 2014-07-15 Hewlett-Packard Development Company, L.P. Optimizing applications using source code patterns and performance analysis
CN101339501B (zh) 2008-08-12 2012-07-18 北京航空航天大学 基于有向图的ws-bpel控制环路检测方法
WO2010018710A1 (ja) 2008-08-13 2010-02-18 日本電気株式会社 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
US8095494B2 (en) 2008-10-16 2012-01-10 International Business Machines Corporation Rules-based cross-FSM transition triggering
US8209521B2 (en) 2008-10-18 2012-06-26 Micron Technology, Inc. Methods of indirect register access including automatic modification of a directly accessible address register
US8938590B2 (en) 2008-10-18 2015-01-20 Micron Technology, Inc. Indirect register access method and system
WO2010051542A2 (en) * 2008-10-31 2010-05-06 Melodis Corporation Melodis crystal decoder method and device
US9639493B2 (en) 2008-11-05 2017-05-02 Micron Technology, Inc. Pattern-recognition processor with results buffer
US7970964B2 (en) 2008-11-05 2011-06-28 Micron Technology, Inc. Methods and systems to accomplish variable width data input
US7917684B2 (en) 2008-11-05 2011-03-29 Micron Technology, Inc. Bus translator
US20100118425A1 (en) 2008-11-11 2010-05-13 Menachem Rafaelof Disturbance rejection in a servo control loop using pressure-based disc mode sensor
US20100138575A1 (en) 2008-12-01 2010-06-03 Micron Technology, Inc. Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices
US9164945B2 (en) 2008-12-01 2015-10-20 Micron Technology, Inc. Devices, systems, and methods to synchronize parallel processing of a single data stream
US9348784B2 (en) 2008-12-01 2016-05-24 Micron Technology, Inc. Systems and methods for managing endian mode of a device
US10007486B2 (en) 2008-12-01 2018-06-26 Micron Technology, Inc. Systems and methods to enable identification of different data sets
US8140780B2 (en) 2008-12-31 2012-03-20 Micron Technology, Inc. Systems, methods, and devices for configuring a device
TWI395103B (zh) 2008-12-31 2013-05-01 C Media Electronics Inc 自動執行訊號處理方法與具有該自動執行功能之裝置
US8281395B2 (en) 2009-01-07 2012-10-02 Micron Technology, Inc. Pattern-recognition processor with matching-data reporting module
US20100174887A1 (en) 2009-01-07 2010-07-08 Micron Technology Inc. Buses for Pattern-Recognition Processors
US8214672B2 (en) 2009-01-07 2012-07-03 Micron Technology, Inc. Method and systems for power consumption management of a pattern-recognition processor
US8843523B2 (en) 2009-01-12 2014-09-23 Micron Technology, Inc. Devices, systems, and methods for communicating pattern matching results of a parallel pattern search engine
JP4892022B2 (ja) * 2009-03-03 2012-03-07 株式会社東芝 コンパイル装置およびコンパイルプログラム
US20100325633A1 (en) 2009-06-19 2010-12-23 Microsoft Corporation Searching Regular Expressions With Virtualized Massively Parallel Programmable Hardware
US9836555B2 (en) 2009-06-26 2017-12-05 Micron Technology, Inc. Methods and devices for saving and/or restoring a state of a pattern-recognition processor
KR101645035B1 (ko) * 2009-09-22 2016-08-16 삼성전자주식회사 병렬 프로그래밍 조절 장치 및 방법
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US9323994B2 (en) 2009-12-15 2016-04-26 Micron Technology, Inc. Multi-level hierarchical routing matrices for pattern-recognition processors
US8489534B2 (en) 2009-12-15 2013-07-16 Paul D. Dlugosch Adaptive content inspection
US8601013B2 (en) 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
US8766666B2 (en) 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
WO2012103151A2 (en) 2011-01-25 2012-08-02 Micron Technology, Inc. State grouping for element utilization
EP2668574B1 (en) 2011-01-25 2021-11-24 Micron Technology, INC. Utilizing special purpose elements to implement a fsm
JP5763783B2 (ja) 2011-01-25 2015-08-12 マイクロン テクノロジー, インク. 正規表現をコンパイルするための方法および装置
CN103443767B (zh) 2011-01-25 2016-01-20 美光科技公司 展开量化以控制自动机的入度和/或出度

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005122466A (ja) * 2003-10-16 2005-05-12 Canon Inc 積和演算回路及びその方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11488378B2 (en) 2010-06-10 2022-11-01 Micron Technology, Inc. Analyzing data using a hierarchical structure
US9792097B2 (en) 2011-01-25 2017-10-17 Micron Technology, Inc. Method and apparatus for compiling regular expressions
US9916145B2 (en) 2011-01-25 2018-03-13 Micron Technology, Inc. Utilizing special purpose elements to implement a FSM
US10089086B2 (en) 2011-01-25 2018-10-02 Micron Technologies, Inc. Method and apparatus for compiling regular expressions

Also Published As

Publication number Publication date
US8601013B2 (en) 2013-12-03
WO2011156634A2 (en) 2011-12-15
US20140082009A1 (en) 2014-03-20
US20110307503A1 (en) 2011-12-15
US11488378B2 (en) 2022-11-01
CN105912992A (zh) 2016-08-31
CN103003792A (zh) 2013-03-27
TWI584198B (zh) 2017-05-21
EP2580659A2 (en) 2013-04-17
EP2580659B1 (en) 2018-12-26
JP2013533542A (ja) 2013-08-22
KR20130120441A (ko) 2013-11-04
JP5736042B2 (ja) 2015-06-17
US20230154176A1 (en) 2023-05-18
EP2580659A4 (en) 2015-08-05
WO2011156634A3 (en) 2012-04-05
TW201209717A (en) 2012-03-01
US20180096213A1 (en) 2018-04-05
CN105912992B (zh) 2019-12-10
US9785847B2 (en) 2017-10-10
CN103003792B (zh) 2016-05-04

Similar Documents

Publication Publication Date Title
KR101698237B1 (ko) 계층적 구조를 이용한 데이터 분석
US11604687B2 (en) Programmable device, hierarchical parallel machines, and methods for providing state information
US10733508B2 (en) Methods and systems for data analysis in a state machine
KR101920956B1 (ko) 상태 기계에서의 검출을 위한 방법들 및 시스템들
US8680888B2 (en) Methods and systems for routing in a state machine
EP2891053B1 (en) Results generation for state machine engines

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
FPAY Annual fee payment

Payment date: 20200103

Year of fee payment: 4