KR20140039038A - 프로그래밍 가능한 확률 프로세싱 - Google Patents

프로그래밍 가능한 확률 프로세싱 Download PDF

Info

Publication number
KR20140039038A
KR20140039038A KR1020147000431A KR20147000431A KR20140039038A KR 20140039038 A KR20140039038 A KR 20140039038A KR 1020147000431 A KR1020147000431 A KR 1020147000431A KR 20147000431 A KR20147000431 A KR 20147000431A KR 20140039038 A KR20140039038 A KR 20140039038A
Authority
KR
South Korea
Prior art keywords
factor
storage
calculations
factors
processing
Prior art date
Application number
KR1020147000431A
Other languages
English (en)
Other versions
KR101629111B1 (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 KR20140039038A publication Critical patent/KR20140039038A/ko
Application granted granted Critical
Publication of KR101629111B1 publication Critical patent/KR101629111B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • G06N3/065Analogue means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

양상에 있어서, 일반적으로 프로그래밍 가능한 계산 장치는 복수의 변수들 및 복수의 팩터들(각각의 팩터는 상기 변수들의 서브세트와 연관됨)에 의해 특정되는 추론 태스크의 계산들을 수행한다. 상기 장치는 하나 이상의 프로세싱 구성요소들을 포함한다. 각각의 프로세싱 구성요소는 팩터의 정의를 위한 제 1 스토리지, 상기 계산들 중 적어도 일부의 입력들 및/또는 출력들과 연관된 데이터를 위한 제 2 스토리지, 및 팩터와 연관된 계산들 중 상기 적어도 일부의 연속된 부분들(연속된 부분들은 상기 팩터의 정의를 위한 스토리지 내의 데이터에 의해 정의됨)을 수행하기 위한, 제 1 스토리지 및 제 2 스토리지와 결합된 하나 이상의 계산 유닛들을 포함한다.

Description

프로그래밍 가능한 확률 프로세싱{PROGRAMMABLE PROBABILITY PROCESSING}
본 출원은 2011년 6월 7일에 출원된 "추론 계산 가속(ACCELERATING INFERENCE COMPUTATION)이란 제목의 미 가출원 번호 61/494,311에 우선권 주장의 이익을 청구하고 있다. 본 출원은 또한, 2011년 7월 20일 출원된 미 특허 출원 13/187,466의 이익을 청구하고, 미국 목적의 출원은 미 부분 계속 출원(continuation-in-part)의 이익을 청구한다. 이 출원은 참조로서 여기 추가된다.
본 발명은 프로그래밍 가능한 확률 프로세싱에 관한 것이다.
추론 기반 계산(예컨대, 신뢰 전파(Beleif Propagation, BP))으로의 하나의 접근은 예컨대, 2004년 1월에 IEEE 신호 프로세싱 매거진(Magazine)에, 롤리거(Loeliger)의 "팩터 그래프들로의 소개(Introduction to Factor Graphs)"에서 설명된 바와 같이, 팩터 그래프들을 사용하는 것이다. 하나의 그래프 기반 추론 접근은 상기 참조된 논문에 설명된 바와 같이, 합-프로덕트(Sum-Product: SP) 접근이다. 다른 접근은 SP 접근의 근사화와 같이 간주될 수 있는 최소-합(Min-Sum: MS) 접근이다(또한 최대-합(Max-Sum) 또는 최대-프로덕트(Max-Product)와 같이 나타내어질 수 있음). 이러한 알고리즘들의 설명은 2007년 캠브리지의, 캠브리지 대학교 간행물의, 반복 수신기 디자인의 H. Wymeersch에서 찾을 수 있다.
도 1을 참조하면, 팩터(Factor) 그래프(100)의 일부의 실시예는 팩터 노드들(110-111) 및 변수 노드들(121-123)을 포함한다. 팩터 노드(110)는 변수 노드들(121-123) 각각과 연관된 변수들 A, B, 및 C에 종속되는 팩터(예컨대, 상수)를 실행한다. SP 접근에 있어서, 팩터 노드(110)는 근접한 변수 노드들로부터 메시지를 수신하고, 상기 변수 노드들로 출력 메시지를 되돌려 계산하고 생략하기 위해 이러한 메시지들을 사용한다. SP 접근에 있어서, 우리는 표기
Figure pct00001
(또는 보다 명시적으로
Figure pct00002
)를 변수 A와 연관된 변수 노드(121)로부터 팩터 F와 연관된 팩터 노드(110)로의 메시지를 나타내기 위해 사용한다. 유사하게, 변수 노드로 되돌아 통과시키는 메시지는
Figure pct00003
(또는 보다 명시적으로
Figure pct00004
)로서 나타내어진다. 도 1에 도시된 팩터 그래프에 있어서, 팩터 노드(110)으로의 메시지는 다음과 같이 계산된다:
Figure pct00005
가중치들 w(a,b,c)는 표소, 예컨대, 1.0까지 합쳐지는 모든 값들을 갖는 확률 분포처럼, 또는 분포의 다른 형태처럼, 또는 0/1 지시 값과 같이, 팩터를 나타낸다.
최대-프로덕트(Max-Product) 접근에 있어서, 합산(summations)은 최대값 연산들로 효과적으로 대체된다. 최소-합(Min-Sum) 접근은 효과적으로 최대-프로덕트 접근의 대수적인(logarithm) 버전이다. 메시지들은 예컨대,
Figure pct00006
(대수 구성요소 방식을 취하면)로서 정의되는 대수의 메시지들이다. 유사하게, 가중치들은
Figure pct00007
로서 정의된다. MS 접근을 위해, 메시지들은 다음과 같이 계산된다.
Figure pct00008
아래의 논의에 있어서, 우리는 변수 A가 나타내는 값들의 숫자를 나타내기 위해 표식
Figure pct00009
을 사용한다. 이 표식에 있어서,
Figure pct00010
에 대한 합계 내의 항들(terms)의 숫자는
Figure pct00011
이다. 예컨대, 만약 각각의 변수가64 변수들 중 하나를 나타낼 수 있다면, 합(sum) 또는 최소값(min) 내에 64 출력 값들의 각각에 대해 계산되어질, 3개의 출력 메시지들을 계산하기 위해 0.78 밀리언 항들 이상의 합계(total)에 대한 4096 항들이 존재한다.
예컨대, 팩터 그래프들에 기반하여 추론 계산을 가속화하기 위해, 메시지들의 계산을 가속화할 필요가 있다.
양상에 있어서, 일반적으로, 프로그래밍 가능한 계산 장치는 복수의 변수들 및 복수의 팩터들(각각의 팩터는 상기 변수들의 서브세트와 연관됨)에 의해 특정되는 추론 태스크의 계산들을 수행한다. 상기 장치는 하나 이상의 프로세싱 구성요소들을 포함한다. 각각의 프로세싱 구성요소는 팩터의 정의를 위한 제 1 스토리지, 상기 계산들 중 적어도 일부의 입력들 및/또는 출력들과 연관된 데이터를 위한 제 2 스토리지, 및 팩터와 연관된 계산들 중 상기 적어도 일부의 연속된 부분들(연속된 부분들은 상기 팩터의 정의를 위한 스토리지 내의 데이터에 의해 정의됨)을 수행하기 위한, 제 1 스토리지 및 제 2 스토리지와 결합된 하나 이상의 계산 유닛들을 포함한다.
양상들은 다음의 특징들 중 하나 이상을 포함한다.
각각의 계산 유닛은 제 2 스토리지로부터 액세스되는 값들을 조합하기 위한 조합 유닛을 포함할 수 있다. 상기 조합 유닛은 수치 계산 로직(numeric computation logic)을 포함할 수 있다. 상기 조합 유닛은 아날로그 계산 회로를 포함한다. 각각의 계산 유닛은 상기 제 2 스토리지 내의 값들로의 상기 조합 유닛의 출력을 누적시키기 위한 누적 유닛을 포함할 수 있다. 각각의 프로세싱 구성요소는 복수의 상기 계산 유닛들을 포함할 수 있다. 상기 계산 유닛들 각각은 상기 제 2 스토리지의 개별적인(separate) 부분을 가질 수 있다. 제 1 스토리지는 상기 계산 유닛들에 의해 공유될 수 있다.
상기 장치는 병렬적으로 동작 가능한 복수의 프로세싱 구성요소들, 상기 프로세싱 구성요소들 각각과 결합된 연결 시스템(connectivity system), 상기 추론 태스크의 적어도 일부의 상세(specefication)를 수용하기 위한 호스트 시스템에 대한 인터페이스를 가지며, 상기 연결 시스템을 매개로 상기 프로세싱 구성요소들과 결합된 콘트롤러를 포함할 수 있다. 상기 프로세싱 구성요소들 각각은, 상기 팩터들 중 다른 것들(different ones)과 연관된 계산을 수행하는 상기 프로세싱 구성요소들 중 다른 것(other)과 함께, 상기 팩터들 중 하나와 연관된 계산을 동시에 수행하도록 상기 콘트롤러에 의해 구성가능할 수 있다. 상기 복수의 프로세싱 구성요소들 각각은 상기 연결 시스템을 매개로 메시지들을 교환하기 위해 상기 연결 시스템과 결합될 수 있고, 상기 메시지들은 상기 추론 태스크의 상기 적어도 일부의 수행 결과를 상기 콘트롤러로 제공하고 상기 팩터들과 연관된 계산들로의 입력들 및/또는 출력들을 제공할 수 있다.
상기 추론 태스트의 상세(specefication)는 그래프 기반(graph-based) 추론 태스크의 상세(specefication)를 포함할 수 있고, 각 팩터는 그래프의 구성요소와 연관될 수 있다. 상기 연결 시스템은 상기 그래프에 따라 프로세싱 구성요소들 사이에서 연결(connectivity)을 제공하도록 구성가능할 수 있다. 상기 연결 시스템은 상기 프로세싱 구성요소들 사이에 그리드(grid), 트리(tree), 및 체인(chain) 연결 중 적어도 하나를 제공할 수 있다.
다른 양상에 있어서, 일반적으로, 추론 태스크(task)의 계산들을 수행하기 위한 방법은 복수의 구성요소들을 갖는 계산 장치의 프로세싱 구성요소를 사용한다. 상기 추론 태스크는 복수의 변수들과 복수의 팩터들에 의해 특정되고, 각 팩터는 상기 변수들의 서브 세트와 연관된다. 상기 방법은 팩터의 정의를 상기 프로세싱 구성요소의 제 1 스토리지(storage)에 저장하는 단계, 상기 계산들 중 적어도 일부의 입력들 및/또는 출력들과 연관된 데이터를 제 2 스토리지에 저장하는 단계; 및 팩터들과 연관된 상기 계산들 중 상기 적어도 일부의 연속된 부분들(상기 연속된 부분들은 상기 제 1 스토리지 내의 데이터에 의해 정의됨)을 상기 프로세싱 구성요소의 하나 이상의 조합 유닛들에서 수행하는 단계를 포함한다. 상기 하나 이상의 계산 유닛들은 상기 제 1 스토리지 및 상기 제 2 스토리지와 결합된다.
양상들은 다음의 특징들 중 하나 이상을 포함할 수 있다.
각각의 계산 유닛은 조합 유닛을 포함할 수 있고, 팩터와 연관된 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 상기 제 2 스토리지로부터 액세스된 값들을 조합하는 단계를 포함할 수 있다. 상기 조합 유닛은 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는데 사용되는 수치(numeric) 계산 로직을 포함할 수 있다. 상기 조합 유닛은 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는데 사용되는 아날로그 계산 회로를 포함할 수 있다. 각각의 계산 유닛은 누적 유닛을 포함할 수 있고, 팩터와 연관된 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 상기 제 2 스토리지 내의 값들로의 상기 조합 유닛의 출력을 누적시키는 단계를 포함할 수 있다. 각각의 프로세싱 구성요소는 복수의 상기 계산 유닛들을 포함할 수 있고, 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 다수의 계산 유닛들에서 동시에 상기 부분들을 수행하는 단계를 포함할 수 있다.
상기 방법은 또한, 상기 추론 태스크의 상세(specefication)를 수락하는 단계를 포함할 수 있다. 상세(specefication)는 변수들의 서브세트와 연관된 각각의 팩트들을 갖는 복수의 변수들 및 복수의 팩터들을 포함할 수 있다. 상기 방법은 또한, 상기 복수의 팩터들 중 하나 이상을 정의하는 데이터를 가지고 상기 프로세싱 구성요소들 각각을 구성하는 단계, 상기 프로세싱 구성요소들 중 각각에서, 상기 팩터들 중 서로 다른 것들과 연관된 계산을 수행하는 상기 프로세싱 구성요소들의 다른 것들과 함께 상기 팩터들 중 하나와 연관된 계산을 동시에 수행하는 단계, 및 상기 연결 시스템을 매개로 메시지들을 교환하는 단계를 포함할 수 있고, 상기 메시지들은 상기 추론 태스크의 상기 적어도 일부의 수행 결과를 제공하고 상기 팩터들과 연관된 상기 계산들에 대한 상기 프로세싱 구성요소들로 입력들 및/또는 출력들을 제공할 수 있다.
상기 추론 태스크 중 상기 적어도 일부의 상세(specefication)를 수용하는 단계는 상기 장치의 콘트롤러에서, 호스트로부터 상기 상세(specefication)를 수용하는 단계를 포함할 수 있고, 상기 방법은 콘트롤러를 매개로 상기 추론 태스크 중 상기 적어도 일부의 수행 결과를 상기 호스트로 통과시키는 단계를 더 포함할 수 있다. 상기 추론 태스크의 상세(specefication)는 그래프 기반 추론 태스크의 상세(specefication)를 포함할 수 있고, 각각의 팩터는 그래프의 구성요소와 연관된다. 상기 추론 태스크는 신뢰 전파(Belief Propagation) 태스크를 포함할 수 있다. 상기 메시지들은 상기 변수들의 확률 분포들을 나타낼 수 있다. 연결 시스템을 구성하는 단계는 상기 그래프에 따라 프로세싱 구성요소들 사이의 연결을 제공하기 위한 것일 수 있다. 연결 시스템을 구성하는 단계는 상기 장치를 사용하여 수행되는 계산의 결과에 따를 수 있다. 상기 연결 시스템을 매개로 상기 프로세싱 구성요소들 사이에 그리드, 트리 및 체인 연결 중 적어도 하나가 제공될 수 있다.
결론적으로, 본 출원 내에서 설명되는 타입의 프로그래밍 가능한 계산 장치들은 복수의 변수들 및 복수의 팩터들에 의해 특정되는 추론 태스크의 계산에서의 사용을 위한 것으로 제한되지 않는다는 것은 이해될 것이다. 다른 유사한 연산들의 가속이 동일, 또는 실질적으로 동일한 구조를 가지고 실행될 수 있다. 예컨대, 합-프로덕트 계산(즉, 확률 값들의 선형 도메인 프로세싱)은 사실상 텐서 곱셉(tersor multipliacation)(텐서 배 벡터들의 묶음(bunch))이다. 그러므로, 텐서 곱셉의 다른 응용들, 예컨대, 스파스 데이터 표현들(sparse data representations)이 마찬가지로 언급될 수 있다.
본 발명의 다른 특징들 및 지점들은 다음의 설명으로부터, 및 청구항들로부터 명백해질 것이다.
도 1은 팩터 그래프의 일부,
도 2는 프로그래밍 가능한 확률 엔진을 포함하는 시스템,
도 3은 단일 확률 프로세서 구성요소를 포함하는 시스템,
도 4는 슬라이스의 상세도,
도 5는 수도코드 리스팅(listing),
도 6은 계산 유닛의 블록도,
도 7은 ALU의 블록도,
도 8은 병렬적으로 다수의 ALU들을 보여주는 다이어그램,
도 9a는 팩터 구성요소당 다수의 레코드들(records)을 갖는 팩터 메모리의 다이어그램,
도 10은 다수의 확률 프로세서 구성요소들을 포함하는 시스템,
도 11은 캐시(cache) 유닛들을 갖는 계산 유닛의 블록도,
도 12는 변수 가속기를 포함하는 확률 프로세싱 구성요소를 포함하는 시스템,
도 13은 변수 가속기의 블록도이다.
1. 개요( overview )
도 2를 참조하면, 재구성 가능한 프로세싱 시스템(200)은 프로그래밍 가능한 확률 엔진(201)으로 데이터 버스(222)를 매개로 연결된 호스트 시스템(203)(예컨대, 전형적인 디지털 컴퓨터)을 포함한다. 프로그래밍 가능한 확률 엔진(201)은 프로세싱 유닛(210) 및 호스트 시스템(203)과 프로세싱 유닛(210) 사이에서 통신 수단을 제공하는, 버스(222)와 결합된 프론트 엔드(220)(예컨대, 필드 프로그래밍 가능한 게이트 어레이(FPGA) 상에서 실행되는 디지털 콘트롤러)를 포함한다.
확률 엔진(201)은 활률 기반 프로세싱의 다양한 타입들을 실행하기 위해 프로그래밍 가능하고 예컨대, 베이지안(Bayesian) 추론 문제들을 해결하기 위해, 추론 그래프들(예컨대, 팩터 그래프들)을 실행하기 위해 프로그래밍 가능하다. 이러한 사용의 예에서, 팩터 그래프(250)의 상세(specefication)는 호스트 시스템(203) 상에서 생성되고 그래프 상세(specefication)(250)의 모든 또는 일부는 호스트 시스템(203)으로부터 확률 엔진(201)으로 통과된다. 일부 예시들에 있어서, 그래프는 참조로서 추가된, 2011년 1월 1일에 출원된 미 출원 13/006,060 "팩터 그래프들의 디자인 및 실행(DESIGN AND IMPLEMENTATION OF FACTOR GRAPHS)"이란 제목의 동시 계속 출원 내에 설명된 접근법을 사용하여 특정된다.
일부 예시들에 잇어서, 확률 엔진(201)은 그래프(250)를 해결하기 위해 구성 가능한 아날로그 프로세싱 유닛(210)을 포함하나, 반면 다른 실시예들에 있어서, 디지털 수치(numeric) 프로세싱이 사용되거나 또는 아날로그와 수치 프로세싱의 조합이 사용된다. 그래프(250)이 반드시 프로세싱 유닛(210)에 의해 전부로서 작동되고 실행되지 않는 것은 이해될 것이다. 차라리, 프로세싱 유닛(210)의 구성에 의존하여, 그래프(250)의 다양한 부분들(예컨대, 부분(255))이 이후 섹션에서 설명되는 바와 같이 프로세싱 유닛(21)의 서로 다른 서브세트들 및/또는 서로 다른 시간들에서 프로세싱될 수 있다.
2. 단일 확률 프로세서 구성요소
도 3을 참조하면, 재구성 가능한 프로세싱 시스템(300)의 하나의 실시예는 단일 확률 프로세서 구성요소(311)를 포함하는 프로세싱 유닛(31)을 포함한다. 일반적으로, 확률 프로세서 구성요소(311)는 팩터 그래프 내에 개별 팩터들 상에서 최소-합 또는 합-프로덕트 알고리즘을 위한 계산을 수행하기 위해 구체적으로 디자인되는 특용(special purpose) 프로세서이다. 확률 프로세서 구성요소(311)는 이산 변수들을 넘는 임의의 팩터를 위한 이러한 계산을 수행할 수 있는 것 내에서 프로그래밍 가능하다.
확률 프로세서 구성요소(311)는 지시 메모리(316), 팩터 테이블 메모리(318), N 계산 유닛들(320)(여기에서는 슬라이스들로 불리는), 및 N 슬라이스들(320) 중 하나와 각각 대응하는 마이크로-지시 큐들(322)을 포함하는 시퀀서(314)를 포함한다.
일반적으로, 호스트 시스템(303)은 문제 그래프(도 1에 도시된 바와 같이, 구성요소(250))를 분석하고 필요한 팩터 테이블 레코드들과 마찬가지로 문제 그래프를 계산하기에 필요한 계산들의 시퀀스를 결정한다. 분석은 예컨대 API(application programming interface) 및 프로그래밍 가능한 확률 엔진(301)을 위해 특별히 디자인된 컴파일러를 사용하여 달성될 수 있다. 상기 결정된 계산들의 시퀀스에 기반하여, 호스트 시스템(303)은 (예컨대, 다른 선행 구성으로부터 또는 먼저의 계산으로부터)만약 미리 상주(resident)하지 않는다면, 필요한 팩터 테이블 레코드들과 함께 RAM(326)으로 하이 레벨 지시어들을 전송한다. 프로트 엔드(324)는 DMA(direct memory access)를 사용하여 RAM(326)으로부터의 하이 레벨 지시어들을 판독하고 호스트 인터페이스(312)를 매개로 프로세싱 유닛(310)으로 그들을 제공한다. 프로트 엔드(324)는 또한 RAM(326)으로부터의 팩터 테이블 레코들들을 판독하고 호스트 인터페이스(312)를 매개로 프로세싱 유닛(310)으로 그들을 제공한다.
호스트 인터페이스(312)로부터 수락된 팩터 테이블 레코드들은 팩터 테이블 메모리(381)로 제공된다. 호스트 인터페이스(312)로부터 수락된 하이 레벨 지시어들은 시퀀서(314) 내의 지시어 메모리(316)로 제공된다. 시퀀서(314)는 지시어 메모리(316)로부터의 하이 레벨 지시어들을 인출하고 N 슬라이스들(320)의 각각과 연관된 로컬 지시어 시퀀서로 제공되는 마이트로-지시어들로 그들을 분석한다. 일부 실시예들에 있어서, 로컬 시퀀서는 또한 팩터 메모리(318)로 레코드들의 메모리 어드레스들을 제공한다. 제공된 메모리 어드레스들에서의 레코드들은 팩터 메모리(318)로부터 인출되고 적합한 슬라이스(320)에 제공된다.
선택적으로, 슬라이스(320)는 최소-합, 합-프로덕트, 및 평균-필드(Mean-Field) 알고리즘들과 같은 메시지 패싱(passing) 알고리즘들을 수행함으로써 팩터 그래프의 하나의 팩터를 위한 신뢰 전파를 수행한다. 일부 예시들에 있어서, 단일 공유 지시어 시퀀서(314)는 슬라이스들(320)이, 디스팅트(distinct) 데이터 상에서 각 슬라이스(320)과 함께 서로 잠금(lock) 단계내에서 동작하는 동안 메시지 패싱 알고리즘들을 수행한다. 다른 예시들에 잇어서, 각 슬라이스(320)는 그것의 고유의 지시어 메모리(316)를 따라 그것의 고유 지시어 시퀀서(314)를 갖는다. 이러한 경우에 있어서, 슬라이스들(320)은 예컨대, 슬라이스간 통신들을 위해 서로 동기화를 하는 것처러, 서로로부터 보다 독립적으로 동작할 수 있다. 단일 슬라이스(320)가 어떻게 메시지 패싱 알고리즘을 수행하는지에 대한 상세한 설명은 이하 설명된다. 슬라이스들(320)에 의해 생산된 결과들은, 프로트 엔드(324)를 미개로 호스트 시스템(203)으로 상기 결과들을 차례로 제공하는 호스트 인터페이스(312)로 제공된다.
소정 예시들에 있어서, 팩터 테이블 메모리(318)는 미리 사용된 레코드들이 호스트 시스템(303)으로부터 재로딩되어질 것을 필요로 하지 않는 그러한 레코드들의 캐시(cache)를 유지한다. 레코드들의 캐시는 팩터 테이블 메모리(318)내에서 존재하는 적당한 공간만큼 유지될 수 있다.
2.1 슬라이스 아키텍처
도 4를 참조하면, 단일 슬라이스(420)의 아키텍처의 하나의 예는 메시지 계산들의 항들(terms)을 계산하도록 디자인된다. 슬라이스(420)는 어드레스 생성기(428), 입력 메시지 메모리(430), ALU(432), 및 출력 메시지 메모리(434)를 포함한다.
일반적으로, 슬라이스(420)는 팩터 테이블 메모리(도 3에 도시된, 구성요소(318))로부터의 레코드를 따라 FIF 마이크로 지시어 큐(도 3에 도시된, 구성요소(322))로부터 지시어를 수신한다. 어드레스 생성기(428)는 입력 및 출력 메시지 메모리들(430, 434) 내에 위치들 및 팩터 메모리(318) 내의 값들 사이에서의 매핑을 제공한다.
입력 및 출력 메시지 메모리들(430, 434)은 신뢰-전파들 메시지들의 계산의 입력들, 매개 값들, 및 출력을 저장한다. 입력 메시지 메모리(430) 내에 저장된 메시지들은 출력 메시지 메모리(434) 내에 저장된 메시지들을 따라 ALU(432)로 통과된다. ALU(432)는 메시지들으로 알고리즘(예컨대, 최소-합 알고리즘)을 적용하고, 출력 메시지 메모리(434) 내에 저장된 결과를 생산한다. 메시지 패싱 알고리즘의 많은 반복들을 수행한 후에, 출력 메시지 메모리(434) 내에 저장된 결과들은 호스트 인터페이스(도 3에서 구성요소(312)로 도시된)를 통해 호스트 시스템(도 3에서 구성요소(303)으로 도시된) 되돌아 통과된다.
소정 예시들에 있어서, 입력 및 출력 메시지 메모리들(430, 434)은 디지털 로직을 사용한다. 다른 예시들에 있어서, 메모리들(430, 434)은 아날로그 형태로 값들을 사용하고 저장한다.
도 5를 참조하면, 수도코드는 도 1에 도시된 팩터 F를 해결하는 반복 메시지 패싱 알고리즘을 실행하는 것으로 나타난다. 수도코드는 도 6에 도시된 상세한 슬라이스 아키텍처에 의해 실행될 수 있다.
2.2 상세한 슬라이스 아키텍처
도 6을 참조하면, 도 4에 도시된 슬라이스 아키텍처의 상세 버전은 팩터 테이블 APFAHFL(618)를 따라 도시된다. 슬라이스 아키텍처는 입력 및 출력 메시지 메모리들(630, 634), 및 ALU(632)를 포함한다. 어드레스 유닛(628)은 메시지 메모리들(630, 634) 내의 위치들 및 팩터 테이블 메모리(618) 내의 값들 사이의 매핑을 제공한다. 일반적으로 팩터 테이블 메모리(618)는 레코드(636)들의 세트를 포함한다. 각각의 레코드(636)는 수도코드 내에서 라인 104-112에서 i 이하의 루프의 반복에 대응한다. 시퀀서 또는 콘트롤러(도 6에 미도시)는 연속된 레코드들(636)이 팩터 테이블 메모리(618)로부터 액세스 되어질 것을 야기한다. 각각의 레코드(636)에 대하여, ALU(632)의 조합 유닛(638)은 수도 코드의 라인 106-108의 계산들을 수행하고, 누적 유닛(640)은 수도 코드의 109-111 라인의 계산들을 수행한다. 어드레스 유닛(628)은 메시지 메모리 내의 두 개의 대응하는 메모리 위치들로 각각의 인덱스를 매핑한다: 입력 메시지 위치 출력 메시지 위치. 예컨대, 도 1에 도시된 팩터 에 대해서, 어드레스 유닛(628)은 출력 메시지를 위한
Figure pct00012
및 입력 메시지를 위한 어드레스
Figure pct00013
로 인덱스
Figure pct00014
를 매핑시킨다(여기서, addr()은 해당 메시지 값을 위한 저장 위치의 어드레스를 의미하는 것으로 이해됨). 메시지 메모리(629) 및 조합 유닛(638) 사이의 신호 통로들이 메모리로부터 조합 유닛(638)으로 단일 방향성(unidirectional)이고, 반면 메모리(629) 및 누적 유닛(640) 사이의 신호 통로들이 양방향성(bidirectional)을 가짐에 따라, 팩터 테이블 메모리(618)의 각각의 레코드(636)에 대해서, 출력 메시지들의 현재 값들이 읽혀 지고, 독출 값의 최소값 및 새롭게 계산되는 값이 되돌려 기록된다는 사실을 주목해야 한다. 팩터의 모든 구성요소들
Figure pct00015
을 넘어서 반복함에 따라 세 개의 출력 메시지들이 계산된다.
2.2.1 수학적(Arithmetic) 로직 유닛
도 7을 참조하면, ALU의 실행은 입력 메시지 값들 및 가중치를 수락하고 그것의 입력들의 합을 출력하는 합산 유닛(744)을 포함한다. 가중치들 각각이 대응하는 가산기(742) 내에서 감산됨에 따라 조합 유닛의 세 개의 출력들 각각은 대응하는 메시지 입력을 제외한다. 누적 유닛은, 각각이 세 개의 메모리 값을 수락하고 대응하는 새롭게 계산된 값 및 메모리 값의 최소값을 제공하는 세 개의 최소 유닛들(746)을 사용한다.
도 8을 참조하면, 소정 실시예들에 있어서, 다수의 ALU들은 병렬적으로 실행되고(implemented) 수행된다(executed). 예컨데, ALUS들(831a-831z)(즉, 둘 이상의 ALU들) 각각은 팩터를 위한 값들
Figure pct00016
의 일부(즉, 따로 떨어진 완전한(exhaustive) 서브세트)를 수신한다. 입력 메시지 값들은 메모리(829a-829z)의 각각의 카피(copy) 내에 복사되고, 따라서 각각의 ALU는 입력 메시지 값의 로컬 독출을 수행할 수 있다. 팩터의 모든 구성요소들이 검토되고 나면, 출력 메시지들은 전형적으로, 전부 계산되지 않는다. 예컨대, 특정 입력
Figure pct00017
에 대해서, 출력 메시지
Figure pct00018
는 메시지 메모리들(829a-z) 내에 존재한다. 일 실시예에 있어서, 더 많은 데이터 통로들(미도시)이 메시지 메모리로 누적 유닛들을 링크함으로써 (예컨대, log2(n), 여기서, n은 ALU들의 수)반복들의 시퀀스 내에서 절대 최대값은 ALU들을 가로질러 계산된다.
소정 실시예들에 있어서, 호스트 시스템은, 팩터 메모리(818)를 로딩하는 단계, ALU들 및 어드레스 유닛들의 협력 동작을 위해 시퀀서를 구성하는 단계, 및 메시지 메모리로부터, 로딩되지 않은 메시지 값들을 로딩하는 단계를 포함하면서, 시스템의 동작을 제어한다.
소정 예시들에 있어서, 팩터 메모리(818)는 튜플들(tuples)
Figure pct00019
의 완전한 세트를 반드시 보유하지 않는다. 예컨대, 고정된 알려진 가중치(예컨대, 0.0)가 인코딩되기 위한 튜플들
Figure pct00020
의 세트 및 시퀀서는
Figure pct00021
튜플들의 시퀀스로의 인코딩을 변환하기 위해 구성된다. 팩터들의 압축된 표현의 다른 형태들이 또한, 사용될 수 있다.
소정 예시들에 있어서, 서로 다른 입력들이 가능한 값들의 서로 다른 수들을 갖고, 따라서, 비트들의 서로 다른 수들이 인덱스들을 나타내기 위해 요구될 수 있다. 예컨대, 단지 16 값들을 나타낼 수 있는 변수들이 각각의 인덱스를 나타내기 위해 많게는 4 비트들 요구하지만, 1024 값들을 나타낼 수 있는 변수는 10 비트들을 취(take)할 수 있다. 그러므로, 심지어 팩터 메모리 내의 레코드 당 세 개의 변수들 중 최대값을 가지고서도, 비트들의 서로 다른 수들이 각각의 인덱스를 위해 배치될 수 있다.
상기한 예시에 있어서, 팩터는 세 개의 입력들 및 하나의 가중치를 예상하는 ALU들의 하드웨어 아키텍처에 대응하는 세 개의 입력들을 갖도록 가정된다. 단지 두 개의 입력들을 갖는 팩터에 대해서, 하나의 접근은 조합 유닛이 입력들 중 하나를 무시하도록 구성하는 것이고, 또는 선택적으로 메시지 메모리가 조합에 영향을 미치지 않는 입력(예컨대, 0.0)을 제공하는 것이다.
그러나, 팩터가 ALU가 구성되는 수보다 더 많은 입력들을 가질 때, 하나의 접근은 반복 및 파이프 라인드(pipelined) 접근을 사용하는 것이다. 예컨대, 6개의 변수들을 갖는 팩터를 고려하면, 팩터의 각각의 구성요소는 튜플
Figure pct00022
에 의해 정의된다. 도 9a를 참조하면, 하나의 접근은 팩터 메모리(918) 내의 연속된 레코드들(936, 937) 내에서 그러한 구성요소를 인코딩하는 것이다. 도 9b를 촘조하면, 조합 유닛(938)의 동작은
Figure pct00023
이 메시지 메모리로부터 독출되는 제 1 사이클을 고려함으로써 이해될 수 있다. 이러한 값들은 가중치 wi와 함께 함산되고 임시 레지스터 내에 저장된다(즉, 0의 값으로 가산되는). 입력 메시지 값들은 FIFO로 가산된다. 제 2 사이클 상에서, 값들
Figure pct00024
은 메시지 메모리로부터 독출된다. 그리고는, 값들은 단일 사이클의 케이스에서 정의된 바와 같이, 값
Figure pct00025
을 가져오기 위해 임시 레지스터 내의 값으로 더해진다. 값들
Figure pct00026
은 FIFO(943)으로 밀어내어진다. 제 2 사이클에 있어서, 값들
Figure pct00027
은 FIFO의 출력으로부터 독출되고
Figure pct00028
를 생산하기 위해
Figure pct00029
로부터 감산된다. 제 3 사이클 상에서, 값들
Figure pct00030
은 FIFO로부터 독출되고, 값들
Figure pct00031
는 조합 유닛으로부터 출력된다. 제 3 사이클에 있어서, 값들
Figure pct00032
은 출력들
Figure pct00033
에 영향을 미치지 않고 파이프라인드 방식으로 프로세싱될 수 있다.
누적 유닛의 동작은 지연되고 따라서, 제 2 사이클에서,
Figure pct00034
를 위한 출력 메시지들은 업데이트되고, 제 3 사이클에서,
Figure pct00035
를 위한 출력 메시지들이 업데이트된다.
이 동일한 접근은 팩터 구성요소당 두 레코드들 이상인 상황들을 위해 사용될 수 있다는 점을 주목해야 한다. 일반적으로 구성요소단 M 레코드들에 대해서는, 누적 유닛이 파이프 라인드 방식으로 M-1 사이클에 의해 지연된다.
3. 다수의 확률 프로세서 구성요소들
소정 예시들에 있어서, 제어 그래프(280)는 추론 그래프(250)가 어떻게 프로세싱 유닛(210)에 의해 계산되는지를 최적으로 결정하는데 사용되는 또 다른 추론 그래프의 상세(specification)일 수 있다.
도 10을 참조하면, 재구성 가능한 프로세싱 시스템(1000)의 다른 실시예에 있어서, 프로세싱 유닛(1010)의 아키텍처는 병렬적으로 동작하는 각각의 확률 프로세서 구성요소(1011)을 가지고, 다수의 확률 프로세서 구성요소들(1011)을 추가하기 위해 의도된다. 확률 프로세서 구성요소들(1011)은 메시지들이 개별 확률 프로세서 구성요소들(1011)의 데이터 메모리들 사이에서 통과되는 재구성 가능한 연결 구조(fabric)(1080)를 매개로 연결된다. 그래픽 모델을 계산하는 때, 확률 프로세서 구성요소들(1011)의 세트는 한꺼번에 모델의 부분 상에서 동작한다(거대한(large) 모델을 가정하면). 주어진 시간에서, 각각의 확률 프로세서 구성요소(1011)는 그래프 내의 하나의 노드와 연관된 계산을 수행한다. 각각의 확률 프로세서 구성요소(1011)는 모델의 서로 다른 부분들이 프로그래밍 가능한 확률 엔진(1001)으로 로딩되는 것과 같이 수많은 서로 다른 노드들에 대한 계산을 수행하기 위해 사용될 수 있다.
3.1 연결( Interconnect )
연결 구조(1080)는 그래픽 모델의 구조와 직접 대응하기 위해 (예컨대, 프로그래밍 가능한 확률 엔진(1001) 상에 위치한 콘트롤러(1005) 또는 호스트 시스템(1003)에 의해) 구성된다. 예컨대, 이미지 프로세싱 애플리케이션에 잇어서, 그래픽 모델들은 전형적으로 2차원 그리드에 대응하거나 또는 아마 그러한 그리드들의 계층에 대응한다. 이러한 타입의 프로세싱을 위해, 연결 구조(1080)는 이러한 구조를 흉내내기(mimic) 위해 구성되고 따라서, 확률 프로세서 구성요소들(1011) 간의 통신은 메시지 패싱 기반 추론 알고리즘들을 위해 요구되는 그래픽 모델 내의 노드를 간 통신과 직접적으로 대응한다. 이러한 구성은 병목 현상 없이 확률 프로세서 구성요소들(1011) 간의 고-대역 병렬 통신을 허용한다.
주어진 연결 구조에 대해서, 실행될 수 있는 많은 디스팅트 추론 문제들이 존재한다는 점을 주목해야 한다. 예컨대, 선형 체인 구조는 시간-시퀀스드(time-sequenced) 마르코프(Markov) 모델의 형태로 엄청나게 많은 모델들 상의 추론을 수행하는데 사용될 수 있다. 또는, 두 차원 그리드들의 계층이 매우 다양한 이미지 프로세싱 모델들을 위한 추론을 수행하는데 사용될 수 있다.
연결 구조(1080)의 소정의 공통(common) 구성들은: 나비 네트워크, 전부 연결된, 그리드들, 체인들, 트리들, 살찐 트리들(fat trees) 등등이다. 소정 실시예들에 있어서, 구성 가능한 연결 플레인(1080)은 매개 아날로그 또는 디지털 값들을 위한 스토리지를 포함한다.
소정 타입들의 그래픽 모델들에 대해서, 연결 구조는 그래프의 서로 다른 부분들 상에서 동작하는 때 빈번하게 변화할 수 있다. 다른 타입들의 그래픽 모델에 대해서, 이미지 픽셀들의 이렇게 나타낸 어레이들 또는 히든 마르코프 모델들과 같이, 연결은 그래프의 서로 다른 부분들 상에서 동작하는 때 변화될 필요가 없을 수 있다.
소정 예시들에 있어서, 연결이 변화하는 노드들과 연관된 프로세서들은 그들의 프로세싱 태스크를 완성해야만 하고 연결의 재구성 전에 그들의 데이터를 동기화해야만 한다.
소정 예시들에 있어서, 연결 구조(980)를 구성하는 오버헤드에 기인하여, 새로운 구성과 신속한 스위칭을 허용하면서, 이전 계산들이 여전히 진행중인 동안, 미리 로딩되어질 연결 내에서 변화들을 허용하는 것은 필요할 수 있다.
소정 예시들에 있어서, 병렬 확률 프로세서 구성요소들(1011)의 동작은 비동기 및 동기화 동작의 혼합이다. 따라서, 연결 구조(1080)의 재구성은 동기화되어질 필요가 있다. 특히, 변경되어질 연결 구조(1080)의 부분들과 관련된 모든 프로세싱 구성요소들(1011)은 재구성이 발생하기 전에 적합한 동기화 포인트에 도달할 필요가 있다.
3.2 타일드 ( Tiled ) 확률 프로세서 구성요소 아키텍처
일반적으로, 프로세싱 유닛(101)은 확률 프로세서 구성요소들(1011)의 서로 다른 세트를 가질 수 있고, 서로 다른 특성들을 갖는 각각은 팩터 그래프들의 서로 다른 타입들 또는 토폴로지들에 최적화된다. 예컨대, 확률 프로세서 구성요소(1011)의 하나의 타입은 일반적으로 그리드와 같은(grid-like) 그래프들에 가장 적합할 수 있으나, 반면 확률 프로세서 구성요소(1011)의 다른 타입은 트리와 같은(tree-like) 그래프들에 대해 가장 적합할 수 있다. 소정 예시들에 있어서, 확률 프로세서 구성요소들(1011) 중 일부는 특정 타입의 문제들에 특히 적합할 수 있다. 이러한 특정 문제의 예시는 동시 계속 출원 국제 출원 번호 PCT/US11/20794 "신로 전파 프로세서(Belief Propagation Processor)"에 설명된 바와 같이 디코딩하는 LDPC와 관련된 것이다. 소정 예시들에 있어서, 확률 프로세서 구성요소들(1011)은 로그 기반 표현들을 사용하고 팩터 그래프 메시지 패싱을 실행한다. 소정 예시들에 있어서, 확률 프로세서 구성요소들(1011) 중 일부는 디지털 로직을 사용하여 실행될 수 있고, 그에 반해, 확률 프로세서 구성요소들(1011) 중 다른 것들은 아날로그 로직을 사용하여 실행될 수 있다.
3.3 실행 제어
많은 병렬 시스템들에서 일번적으로 그랬던 것과 같이, 프로세싱 구성요소들(1011) 각각은 최적으로 사용되는 것을 보장하는 것이 바람직하다. 스케쥴링, 로드 밸런싱(load balancing) 및 파이프라이닝(pipelining)에 의한 실행을 제어하는 것은 그러한 최적화가 완성될 수 있는 방식이다.
소정 예시들에 있어서, 전체 문제 그래프는 반드시 동시에 어드레싱되지 않는 서로 다른 부분들 또는 영역들을 가질 수 있다. 그러한 소정 예시들에 있어서, 콘트롤러(1005) 또는 호스트 시스템(1003)은 예컨대, 그래프의 제 1 부분을 사용하여 계산을 수행하면서, 그리고 매개 결과를 얻은 후에 단지 그래프의 다른 부ㅜㄴ으로 진행하면서, 미리 설정된 계획(plan) 또는 스케줄을 따라한다. 반복들의 시퀀스는 문제의 전체 해결로의 수렴을 야기한다. 예컨대, 그래프의 일 부분은 LDPC 코드의 상수들을 디코딩함을 나타내고, 반면, 그래프의 다른 부분은 예컨대, 코드에 으해 어드레싱되지 않는 심볼간 추론에 기반하여 다른 형태 또는 상수를 나타내며, 그래프의 또 다른 부분은 신호 획득 단계에서 사용되어질 채널 모델의 적응과 관련될 수 있다. 그리고는, 계획 또는 스케줄은 상기 부분들의 협력 동작에 사용된다. 소정 예시들에 있어서, 제어는 수치 계산들과 관련될 수 있는 프로그래밍 가능한 로직(예컨대, 소프트웨어 프로그램)을 사용하여 실행된다.
스케줄의 타입은 사용자에 의해 선택되고 그래픽 모델을 특정하는 소스 코드 내에서 정의된다(또는 디폴트 스케줄이 사용됨). 디자인 소프트웨어(예컨대, DMPL 소프트웨어 및 컴파일러)는 프로세싱의 특정 오더를 지칭하기 위해 스케줄의 선택과 그래픽 모델 연결을 조합한다. 프로세싱 유닛(1010)이 병렬 프로세싱을 허용하기 때문에, 그래프의 많은 노드들은 단일 차수의 시퀀스를 생성하는 대신에 한번 업데이트될 수 있고, DMPL 컴파일러는 병렬로 행해지는 것이 가능한 것과 같이 많은 업데이트를 허용하면서, 업데이트들의 부분 차수 시퀀스를 정의할 수 있다. 사용자의 선택에 따른 스케줄 타입의 선택은 얼마나 많은 병렬 계산(parallelism)가 이용될 수 있는지에 영향을 미친다.
주어진 스케줄을 위해, 각각의 프로세싱 동작은 주어진 시간에 주어진 확률 프로세서 구성요소(1011)로 매핑될 수 있다. 이러한 매핑은 또한 DMPL 컴파일러의 함수이다. 컴파일러는 확률 프로세서 구성요소들(1011)의 수, 연결 플레인의 이용가능한 구성들, 로컬 및 공유 스토리지의 양, 및 다른 팩터들의 지식을 매핑을 선택하기 위해 통합한다. 매핑은 각각의 확률 프로세서 구성요소(1011)로 제공된 지시어들의 시퀀스를 결정하고, 콤보(combo) 테이블들이 확률 프로세서 구성요소들(1011), 필요한 연결 플레인 구성 변화, 및 데이터가 확률 프로세서 구성요소들(1011)로 및 확률 프로세서 구성요소들(1011)로부터 전송되는 시퀀스 상에서 미리 로딩되는 것과 마찬가지로 이러한 지시어들의 시퀀스를 결정한다. 매핑은 데이터의 불필요한 전송을 피하면서, 수행될 수 잇는 캐싱(caching)을 명시적으로 인식한다.
소정 예시들에 있어서, 효율은 동적으로 업데이트하는 스케줄들을 이용함으로써 개선될 수 있다. 예컨대, 호스트 시스템(1003) 또는 콘트롤러(1005)는 서로 다른 확률 프로세서 구성요소들(1011)로 할당하기 위해 그래프의 부분들을 최적으로 선택할 수 있다. 그래프의일 부분에 대해 계산된 매개 값들은 그래프의 부분들이 다음에 해결되어질 지시어들로서 사용될 수 있고, 따라서 최적 진행(optimal progress)은 전체 해결을 향해 형성된다. 다른 예시들에 있어서, 그래프의 부분들이 실행의 코스 동안 어드레스를 하기 위한 것과 관련된 런타임 결정을 하는 것은 프로그래밍 가능한 확률 엔진(1001) 상에 위치한 콘트롤러(1005)에 듸해 수행되는 그래프 기반 계산을 더 사용하여 완성된다. 예컨대, 어드레스를 위해 그래프 중 어느 일부데 대한 결정은 콘트롤러(1005)의 제어 아래 확률 프로세서 구성요소들(1011)로 할당된 베이지안 추론 제어 문제(1081) 자체로서 나타내어질 수 있다.
확률 프로세서 구성요소들(1011)를 최적으로 이용하기 위한 다른 방법은 각각의 확률 프로세서 구성요소(1011) 상에 계산적인 로드에 대한 밸런스를 맞추는 것이다. 예컨대, 임의의 팩터 그래프에 있어서, 다양한 노드들 사이의 계산 복자도 내의 큰 디스패리티(disparity)가 존재할 수 있다. 결과로서, 소정 확률 프로세서 구성요소들(1011)은 요구되는 작은 계산을 가지고 많은 팩터들로 주어질 수 있지만, 다른 팩터들은 큰 게산을 요구하는 단일 팩터로 주어질 수 있다. 호스트 시스템은 가능한 많은 로드의 밸런싱을 맞출 필요를 고려하여 계산 구성요소들로 팩터들을 최적으로 할당할 수 있다.
확률 프로세서 구성요소들(1011)을 최적으로 이용하기 위한 또 다른 방법은 호스트 시스템(1003)이 파이프라인과 같은 프로세싱을 처리하도록 허용하는 것이고, 여기서, 어느 주어진 시간 태스트들이 확률 프로세서 구성요소들(1011)로 공급되는 기한보다 일찍 인출되고, 다른 태스트들은 실행되어지며, 이미 실행된 태스크들의 결과는 읽혀져 나온다.
3.4 프로그래밍 언어/컴파일러
소정 예시들에 있어서, 추론 그래프들은 DMPL로 불려지는 API(application progaramming interface)를 이용하여 특정된다. DMPL은 모델의 변수들 및 변수들과 관련된 팩터들을 특정함으로써 임시적인 그래픽 모델들은 디자인하는데 사용된다.
DMPL은 미리 결정된 스케줄(예컨대, 합-프로덕트, 최소-합, Gibbs 샘플링 등등) 또는 커스텀, 사용자 정의 스케줄일 수 있는 해결자 스케줄(solver schedule)의 상세(specification)를 허용한다.
소정 미리 결정된 스케줄들은 추론 그래프의 토폴로지 상에서 조건부이다. 예컨대, 트리/시퀀셜(tree/sequencial) 스케줄은 그것을 위해 사용되도록 스케줄링하도록 결정하기 위해 각각의 그래프 및 서브-그래프를 검사한다. 그래프 또는 서브 그래프가 트리이면, 트리 스케줄이 그래프의 그 부분에 사용되고(트리를 위한 최적 스케줄), 그러지 않으면 시퀀셜 스케줄은 그래프의 그 부분에 사용된다.
추론 그래프가 특정되면, DMPL은 팩터 그래프를 컴파일링하고 따라서, 프로그래밍 가능한 확률 엔진(1001)이 그들을 실행한다. 컴파일러의 출력은 호스트 시스템(1003)에 대한 제어 소프트웨어 및 프로그래밍 가능한 확률 엔진(1001)에 대한 데이터/시퀀싱 지시어들을 포함한다.
4. 대안들( alternatives )
앞서 설명된 수많은 실시예들이 네가티브 알고리즘 표현이 효율적으로 계산 프로덕트들을 합으로써 허용하는 프로최소-합 접근을 이용함에도 불구하고, 효율적으로 동일한 접근은, 선형 확률 표현이 합보다는 실행 프로덕트들, 및 최소값들보다는 합들에 의해 사용되는 합-프로덕트 접근을 실행할 수 있다. 더욱이, 다양한 유사 접근들이 이 아키텍처를 가지고 어드레싱될 수 있다.
더욱이, 많은 특징들이 앞서 설명한 접근들을 따르는 실시예들 내의 대응하는 특징들로 대치되도록 선택적으로 부가될 수 있다.
4.1 팩터 테이블 조직 및 압축
앞서 설명한 아키텍처들에 있어서, 팩터 그래프 내의 각 팩터는 계산을 조종하는 관련 팩터 테이블을 갖는다. 앞서 설명한바와 같이, 팩터 테이블의 다양한 인코딩 포맷들이 팩터 메모리 내에서 사용될 수 있고, 각각은 출력 메시지의 입력들을 계산하는데 필요한 팩터 가중치들 및 메모리 어드레스들의 적합한 시퀀스의 생성을 가능케한다. 시스템의 실시예들은 서로 다른 인코딩 포맷들을 액세스하도록 구성될 수 있고, 또는 특정 포맷으로 동작하도록 구성될 수 있다. 이러한 포캣들은 다음에 설명된다.
설명을 목적으로, 팩터로의 K개의 입력들이 존재하는 것을 가정하면, 팩터를 위한 인젝스는 1부터
Figure pct00036
까지의 가능한 값들을 갖는 그것의 j번째 입력을 갖는 K 차원 벡터가 되어지는 것이 고려될 수 있다. 그러므로,
Figure pct00037
유니크(unique) 벡터들이 존재한다. 각각의 인덱스 벡터
Figure pct00038
는 가중치
Figure pct00039
와 연관된다.
앞서 설명한 바와 같이, 팩터 메모리를 위한 제 1 포맷은 레코드의 시퀀스로서, 각각의 인코딩
Figure pct00040
이다. 우리는 명시적으로 인덱싱된 팩터 테이블로서 이러한 포맷을 참조한다. N 보다 더 적은 레코드들이 본질적으로 제로 가중치(선형 도메인에서)를 갖는 분실된 인덱스 값들을 가지고, 팩터 테이블 내에 나타날 수 있다는 것을 주목해야 한다. 소정 예시들에 있어서, 인덱스 벡터의 인코딩은 예컨대, 인덱스 벡터의 j번째 입력을 위한
Figure pct00041
를 할당하는 고정-길이 포맷을 사용한다.
팩터 테이블을 위한 다른 포맷은 모든 가능한 인덱스 값들을 위한 가중치를 포함한다. 우리는 완전한 팩터 테이블로서 이러한 테이블을 참조한다. 단지 팩터 테이블 내에서 나타나는 가중치들을 가지고, 인덱스 값들과 대응하는 어드레스들은 예컨대, 가중치의 정규 순서에 따라 어드레스 생성기에 의해 생성된다.
가중치들의 하나의 정규 순서는 차례로 입력들을 증가시키면서
Figure pct00042
,
Figure pct00043
로 시작한다. 이러한 순서는, 예컨대,
Figure pct00044
부터
Figure pct00045
까지 또는
Figure pct00046
부터
Figure pct00047
까지, 정시에 다수의 인덱스 값들의 추이를 야기한다.
가중치들의 대체 정규 순서는 인덱스 벡터들의 시퀀스가 정시에 단일 입력을 변화시키도록 보장된 그레이 코드(Grey Code)의 일반화에 기반한다. 예컨대, 이러한 시퀀스는 (1,1,1), (2,1,1), ..., (n1,2,1), (n1,2,1), (n1-1,2,1), ..., (1,2,1), (1,3,1), (2,3,1) 등을 진행할 수 있다. 이러한 정규 순서를 사용하여, 단지 하나의 새로운 입력 및 하나의 새로운 출력 메시지는 각각 새로운 가중치에 대해 참조된다.
도 11을 참조하면, 그레이 코드, 캐싱 메카니즘과 같은 가중치들의 대체 정규 순서를 실행하는 것이 도 6의 슬라이스 아키텍처에 부가될 수 있다. 이러한 캐싱 메카니즘은 하나의 슬라이스 반복에서 다음으로 메시지 메모리들(629, 630)로부터 독출된 입력 및 출력 메시지 값들을 저장하는데 도움이 된다. 이러한 방식에 있어서, 입력 또는 출력 메시지 값들 중 어느 것의 어드레시가 하나의 반복으로부터 다음으로 반복된다면, 그 값은 쓸데없이 메시지 메모리로부터 재독출되지 않는다.
캐싱 메카니즘을 실행하기 위해, 입력 메시지 메모리 캐시(1180) 및 출력 메시지 메모리 캐시(1182)는 슬라이스 아키텍처에 부가된다. 입력 메시지 메모리 캐시(1180)는 입력 메시지 메모리(630) 및 ALU(632)의 조합 유닛(638) 사이에 위치되고, 출력 메시지 메모리 캐시(1182)는 출력 메시지 메모리(629) 및 ALU(632)의 누적 유닛(640) 사이에 위치된다.
도 6의 경우에서와 같이, 어드레스 유닛(1128)은 팩터 F, 및 많은 에지 인덱스들 A, B, 및 C를 입력으로 수신한다. 어드레스 유닛(1128)은 각각의 에지 인덱스에 대한 입력 메모리 어드레스 및 출력 메모리 어드레스를 생성하기 위해 그것은 입력들을 사용한다. 도 11의 어드레스 유닛(1128)은 또한 각각의 에지 인덱스에 대한 어드레스 변경된 지시자(1186)를 생성하고, 각각의 어드레스 변경된 지시자(1186)는 주어진 에디 인덱스와 연관된 메모리 어드레스가 이전 슬라이스 반복까지 변경되었는지를 지시한다. 어드레스 변경된 지시자들(1186)은 입력 및 출력 메시지 캐시들(1180, 1182)에 제공된다.
일반적으로, 주어진 에지 인덱스에 대한 어드레스 변경된 지시자(1186)가 폴스(false)이면, 에지 인덱스와 연관된 메시지 메모리 어드레스로부터 메시지 값을 재독출할 필요가 없다. 따라서, 도 11에서, 그것의 대응하는 어드레스 변경된 지시자(1186)가 폴스인 때 주어진 에지 인덱스에 대해 어떠한 메모리 독출도 일어나지 않음은 당연한 것일 수 있다.
입력 메시지 메모리 캐시(1180)는 각각 단일 에지 인덱스(즉, A, B, 또는 C)에 대응하는 수많은 입력 메시지 캐싱 구성요소들(1184)을 포함한다.
하나의 입력 메시지 캐싱 구성요소(1184)의 상세 도(1190)을 참조하면, 입력 메시지 메모리 캐싱 구성요소(1184)는 그것의 대응하는 에지 인덱스와 연관된 어드레스 변경된 지시자(1186)을 수신하고, 입력 메시지 값(1196)을 출력한다. 앞서 기재된바와 같이, 어드레스 변경된 지시자(1186)이 주어진 입력 메시지 캐싱 구성요소(1184)에 대해 트루(true)인 경우, 입력 메시지 캐싱 구성요소(1184)는 또한 입력 메시지 메모리(630)으로부터 새롭게 독출된 입력 메시지 값(1188)을 수신한다. 반면, 어드레스 변경된 지시자(1186)가 주어진 입력 메시지 캐싱 구성요소(1184)에 대해 폴스라면, 입력 메시지 캐싱 구성요소(1184)는 입력 메시지 메모리(630)으로부터 새롭게 독출된 입력 메시지를 수신하지 않는다.
입력 메시지 캐싱 구성요소(1184)는 레지스터(1192) 및 멀티플렉서(1194)를 포함한다. 멀티플렉서(1194)는 (어드레스 변경된 지시자(1184)의 값 상에서 조건부인) 입력 메모리(630) 새롭게 독출된 입력 메시지 값(1188)과 레지스터(1192)로부터 입력 메시지 값을 수신하고, 어드레스 변경된 지시자(1186)에 의해 제어된다.
동작 중에, 어드레스 변경된 지시자(1186)이 트루이면, 입력 메시지 캐싱 구성요소(1184)는 레지스터(1192) 내에 새롭게 독출된 입력 메시지 값(1188)을 저장한다. 멀티플레서(1194)는 어드레서 변경된 지시자(1186)에 의해 구성되고, 따라서 새롭게 독출된 메시지 값(1188)은 조합 유닛(638)으로 통과된다. 반면, 어드레서 변경된 지시자(1186)이 폴스이면, 멀티플렉서(1194)는 구성되고, 따라서 레지스터(1192)에 저장된 이전 슬라이스 반복으로부터의 입력 메시지 값은 조합 유닛(638)로 통과된다. 이러한 방식에 있어서, 입력 메시지 메모리 캐시(1180)는 입력 메시지 메모리(630)로의 불필요한 독출을 방지한다.
출력 메시지 메모리 캐시(1182)는 각각이 단일 에지 인덱스(즉, ai, bi, 또는 ci)에 대응하는 수많은 출력 메시지 캐싱 구성요소들(1185)를 포함한다.
하나의 출력 메시지 캐싱 구성요소(1185)의 상세도(1191)을 참조하면, 출력 메시지 메모리 캐싱 구성요소(1184)는 그것의 대응하는 에지 인덱스와 연관된 어드레스 변경된 지시자(1186), 및 누적 유닛(640)으로부터 누적 결과(1199)를 수신한다. 출력 메시지 캐싱 구성요소(1185)는 누적 유닛(640)으로 출력 메시지 값(1197)을 출력하고 출력 메시지 메모리(629)로 업데이트된 출력 메시지 값(1199)를 출력한다. 앞서 기재된 바와 같이, 어드레스 변경된 지시자(1186)이 주어진 출력 메시지 캐싱 구성요소(!185)에 대해 트루이면, 출력 메시지 캐싱 구성요소(1185)는 또한 출력 메시지 메모리(629)로부터 새롭게 독출된 출력 메시지 값(1189)를 수신한다. 반면, 어드레스 변경된 지시자(1186)이 주어진 출력 메시지 캐싱 구성요소(1185)에 대해 폴스이면, 출력 메시지 캐싱 구성요소(1185)는 출력 메시지 메모리(629)로부터 새롭게 독출된 입력 메시지 값을 수신하지 않는다.
출력 메시지 캐싱 구성요소(1185)는 레지스터(1193) 및 멀티플렉서(1195)를 포함한다. 멀티플렉서(1195)는 (어드레스 변경된 지시자(1186)의 값 상에서 조건부인) 출력 메모리(629) 새롭게 독출된 입력 메시지 값(1189)과 레지스터(1193)로부터 출력 메시지 값을 수신하고, 어드레스 변경된 지시자(1186)에 의해 제어된다.
동작 중에, 어드레스 변경된 지시자(1186)이 트루이면, 멀티플렉서(1195)는 어드레스 변경된 지시자(1186)에 의해 구성되고, 따라서, 새롭게 독출된 출력 메시지 값(1189)는 누적 유닛(640)으로 통과된다. 반면, 어드레서 변경된 지시자(1186)이 폴스이면, 멀티플렉서(1195)는 구성되고, 따라서 레지스터(1193)에 저장된 이전 슬라이스 반복으로부터의 누적 결과(1199)는 누적 유닛(640)으로 통과된다. 양 케이스에 있어서, 누적 유닛(640)은 레지스터(1193)내에 누적 결과(1199)를 차례로 저장하는 출력 메시지 캐싱 구성요소(1185)로 누적 결과(1199)를 반환하고 출력 메시지 메모리(629)로 상기 누적 결과(1199)를 되도록 기록한다. 이러한 방식에 있어서, 출력 메시지 메모리 캐시(1182)는 출력 메시지 메모리(629)로의 불필요한 독출을 방지한다.
캐싱이 명시적인 인덱싱 경우에 있어서도 장점을 가지며, 가중치들의 저장의 순서는 캐시의 사용에 영향을 미친다는 점을 주목해야 한다. 예컨대, 팩터 테이블의 입력들의 랜덤 순서는, 예컨대, 완전한 포맷 케잇에 대해 앞서 설명한 일반화된 그레이 코드의 서브 시퀀스로서, 캐어풀 순서(careful ordering)보다 더 많은 비-캐싱된 메모리 액세스들을 야기한다.
그러나 팩터 테이블을 인코딩하기 위한 다른 포맷들이 사용될 수 있다. 예컨대, 제로 가중치의 실행들(runs)이 존재하는 완전한 포맷 접근에 있어서, 실행-길이 코딩된 접근은 정규 순서 내에서 나타나는 비-제로 가중치들의 실행의 길이 및 시작 인덱스를 인코딩함으로써 사용될 수 있다. 선택적으로, 실행길이들은 반복에 의해 인코딩될 수 있다: 제로 실행 길이, 비-제로 실행길이, 순서에서 비-제로 가중치. 실행-길이 인코딩의 다른 형태들이 예컨대, 개별적으로 일련의 인덱스 벡터들의 각각의 입력을 실행 길이 인코딩함으로써 명시적인 인덱스 접근의 압축에 기반하여 사용될 수 있다. 이러한 접근들 중 어느 것에 있어서, 인덱스들 및 실행-길이들은 가변 길이 인코딩될 수 있고, 예컨대, 표현을 더 압축하기 위해, 엔트로피 코딩되어질 수 있다(예컨대, 호프만 코딩).
4.2 대체 아케텍처
도 12를 참조하면, 재구성 가능한 프로세싱 시스템(1200)의 다른 실시예는 버스(1203) 너머로 모두 연결된 호스트(303), RAM(326), 및 프로그래밍 가능한 확률 엔진(1201)을 포함한다. 프로그래밍 가능한 확률 엔진(1201)은 버스(1203) 및 프로세싱 유닛(1210) 사이에서 통신을 촉진하는 호스트 인터페이스(312)를 포함하는 프로트 엔드(324)를 포함한다. 프로세싱 유닛(1210)은 스크랫치 패드 메모리(1240), 변수 가속기(1242), 팩터 가속기(1244), 및 수많은 DMA 콘트롤러들(1246)을 포함한다. 시스템 버스(1248)는 서로에게 및 호스트 인테페이스(312)로 프로세싱 유닛(1210) 내의 구성요소들 모두를 연결시킨다.
일반적으로, 전체 시스템(1200)은 도 3의 시스템과 유사하게 기능한다. 그러나, 도 3에 도시된 확률 프로세서 구성요소(311) 내의 팩터 노드 계산들 및 변수 노드 계산들 모두를 핸들링하기 보다, 프로세싱 유닛은 변수 가속기(1242) 내의 변수 노드 계산들을 수행한다. 팩터 노드 계산들은 도 3에 도시된 확률 프로세서 구성요소(311)과 실질적으로 동이한 팩터 가속기(1244)에서 수행된다.
4.2.1 변수 가속기
도 13을 참조하면, 변수 가속기(1242)의 일 예시는 스크랫치 패드 메모리(도 12, 구성요소(1240))으로부터 데이터를 독출하고, 독출된 데이터를 프로세싱하며 스크랫치 패드 메모리(124)로 프로세싱된 독출 데이터를 되돌려 기록한다. 변수 가속기(1242)는 어드레스 생성기(1328), 지시어 시퀀서(1314), 및 ALU(1342)를 포함한다. 지시어 시퀀서(1314)는 변수 가속기(1242)에 의해 수행되어질 지시어들의 리스트를 포함하는 지시 명령어 리스트(1316)을 포함한다. 지시어 시퀀서(1314)는 지시 명령어 리스트(1316)로부터 지시어(1352)를 독출하고, 지시어(1352)에 기반하여 지시어(1352)에 대응하는 독출 및 기록 어드레스들을 생성하기 위해 어드레스 생성기(1328)을 명령한다. 지시어 시퀀서(1314)는 또한 ALU(1342)로 지시어(1352)를 제공한다.
ALU(1342)는 지시어 시퀀서(1314)로부터 지시어(1352)를 수신하고 스크랫치 패드 메모리(1240)로부터 지시어(1352)에 대응하는 입력 데이터(1352)를 수신한다. ALU는 스크랫치 패드 메모리(1240)로의 출력인 기록 데이터(1356)를 형성하기 위해 지시어(1352)에 따라 입력 데이터(1354)를 프로세싱한다. 소정 예시들에 있어서, ALU(1342)는 지시어들을 포함하는 지시어 세트에 따라 동작을 수행하도록 구성된다: UpdateVariable, UpdateVariableEdge, VariableBelief, Normalize, and ApplyDamping .
4.2.1.1 UpdateVariable 지시어
UpdateVariable 지시어는 ALU가 팩터 그래프의 변수에 대한 모든 출력 메시지들을 계산하도록 야기한다. 예컨대, 주어진 변수가 N 팩터들에 연결된다면, 변수는 연결된 팩터들로부터 N 입력 메시지들(즉, f0-fN -1)의 세트를 수신한다. 각각의 메시지는 변수의 도메인 길이와 동일한 수많은 구성요소들을 갖는 벡터를 포함한다(즉, 변수가 가능하게 취할 수 있는 값들의 수).
변수를 업데이트하는 것은 연결된 팩터들의 각각에 대한 다음의 함수를 계산하는 것을 포함한다:
Figure pct00048
여기서, vi는 변수에 연결된 i번째 팩터에 대해 의도된 출력 메시지이고 vi(x)로서 어드레싱된 각각의 구성요소를 가지고 X 구성요소들의 벡터를 포함한다. 상기 수학식은 i번째 입력 메시지 벡터를 제외하고, 입력 메시지 벡터들(f0-fN -1)의 모두의 벡터 구성요소-바이-벡터 구성요소(vector element-by-vector element) 합을 수행함으로써 변수를 업데이트한다.
도 13에 있어서, UpdateVariable 지시어는 ALU(1342)에 의해 수신되고, 출력 메시지들은 변수 노드에 연결된 모든 팩터 노드들에 대해 계산된다. N 연결된 팩터 노드들의 i번째 팩터 노드에 대해서, 누적기(1358)는 스크랫치 패드 메모리(1240)로부터 입력 메시지 벡터들(f0-fN -1)을 수신하고 입력 메시지 벡터들 모두의 벡터 구성요소-바이-벡터 구성요소(vector element-by-vector element) 합을 계산한다. 누적기(1350)의 결과, v는 합산 레지스터(1360)내에 저장되는 X 구성요소들의 벡터이다.
근사하게 같은 시간에, 입력 메시지 파이프라인(1364)은 i번째 팩터 노드와 연관된 입력 메시지(fi)를 수신한다. fi 및 v는 i번째 노드에 대한 출력 메시지 vi를 야기하면서, v로부터 fi의 벡터 구성요소-바이-벡터 구성요소(vector element-by-vector element) 감산을 수행하는 감산기(1366)로 통과된다. 그리고는, vi는 기록 데이터(1356)로서 ALU(1342)로부터 통과되어 나오고, 스크랫치 패드 메모리(1240)에 기록된다.
4.2.1.2 Normalize 지시어
Normalize 지시어는 ALU가 메시지 벡터의 모든 구성요소들로 상수 오프셋 값을 적용하도록 야기한다(즉, 네가티브 로가리즘 표현 내에서 부가하기 위해 또는 선형 표현에서 곱셉하기 위해). 소정 예시들에 있어서, 이러한 연산은 메시지 벡터 내에 포함된 값들이 로그 도메인에 있는 경우 유용하다. 특히, 정규화 연산은 팩터 그래프 진행의 계산으로서 특정 수치 범위(예컨대, 소정 수의 비트들을 이용하여 표현에 적합한 범위) 내에서 메시지 벡터 내에 포함된 값들을 유지할 수 있다.
일반적으로, 메시지 벡터 내에서 가장 작은 값(즉, 가장 큰 선형 표현에 대응하는 가장 작은 네가티브 로가리즘)은 변수의 최대 우도 구성(most likely configuration)을 표현한다. 따라서, 메시지는 메시지 벡터 내에서 최소 값을 식별하고 전체 벡터로 값을 가산함으로써 정규화될 수 있고, 따라서 최소 값은 미리 정의된 상수 값에 존재한다.
도 13에서, 최소값 누적기(1368)는 i번짹 팩터 노드와 연관된 입력 메시지 벡터(fi)의 최소값을 식별한다. 식별된 최소값이 미리 식별된 최소값보다 작으면, 식별된 최소값은 감산기(1366)로 통과된다. 그렇지 않으면, 미리 식별된 최소값이 감산기(1366)로 통과된다. 감산기(1366)는 그것의 결과 메시지 출력을 정규화하기 위해 최소 값을 적용한다.
4.2.1.3 UpdateVariableEdge
UpdateVariableEdge 지시어는 ALU(1342)가 변수와 연결된 단일 팩터에 대한 출력 메시지를 계산하도록 야기한다. 단일 팩터에 대한 계산은 UpdateVariable 명령어에 대해 앞서 설명한 바와 동일한 방식으로 수행된다. 그러나, UpdateVariableEdge 명령어에 대해, ALU(1342)는 단지 하나의 팩터를 위한 출력 메시지를 계산하고 모든 팩터에 대한 것은 아니다.
4.2.1.4 VariableBelief
VariableBelief 지시어는 ALU(1342)가 모든 입력 메시지 벡터들(f0-fN -1)에 기반하여 변수에 대한 신뢰를 계산하도록 야기한다. 소정 예시들에 있어서, 이는 평균-필드(mean-field) 업데이트 계산으로서 불릴 수 있다.
변수 신뢰를 계산하는 것은 연결된 팩터들의 각각에 대한 다음의 함수를 계산하는 단계를 포함한다:
Figure pct00049
여기서, vi는 변수에 연결된 i번째 팩터에 대해 의도된 출력 메시지이고 vi(x)로서 어드레싱된 각각의 구성요소를 가지고 X 구성요소들의 벡터를 포함한다. 상기 수학식은 모든 입력 메시지 벡터들(f0-fN)의 벡터 구성요소-바이-벡터 구성요소(vector element-by-vector element) 합을 수행함으로써 변수를 업데이트한다.
도 13에 있어서, VariableBelief 지시어는 ALU(1342)에 의해 수신되고, 출력 메시지들은 변수 노드에 연결된 모든 팩터 노드들에 대해 계산된다. N 연결된 팩터 노드들의 i번째 팩터 노드에 대해서, 누적기(1358)는 스크랫치 패드 메모리(1240)로부터 입력 메시지 벡터들(f0-fN)을 수신하고 모든 입력 메시지 벡터들의 벡터 구성요소-바이-벡터 구성요소(vector element-by-vector element) 합을 계산한다. 누적기(1350)의 결과, v는 합산 레지스터(1360)내에 저장되는 X 구성요소들의 벡터이다. 그리고는, v는 기록 데이터(1356)으로서 ALU(1342)로부터 통과되어 나오고 스크랫치 패드 메모리(1240)으로 기록된다.
4.2.1.5 ApplyDamping 지시어
ApplyDamping 지시어는 ALU(1342)가 그 메시지 벡터의 이전 값을 표현하는 제 2 메시지 벡터를 갖는 그 메시지 벡터의 조합을 이용하여 출력 메시지 벡터를 변형하도록 야기한다. 적용된 댐핑의 양은, 소정 예시에 있어서, 0과 1 사이의 값인 미리 결정된 댐핑 계수에 의해 제어될 수 있다.
도 13에 있어서, 댐핑 연산은 댐핑 모듈(1370)에 의해 수행된다.
4.3 단순화된 최소값 *( Min )
도 7을 참조하여 앞서 설명된 ALU에 있어서, 네가티브 로가리즘 표현들이 사용되고, 따라서 합계들이 선형 도메인에서 프로덕트들에 대응하고, min() 연산은 선형 도메인에서 max()에 대응한다.
소정 예시들에 있어서, min() 보다, 예컨대, 이러한 함수들의 효율적인 실행들을 제공하는 하드웨어 회로를 갖는 다른 함수들이 사용될 수 있다. 만약 두 입력들 x와 y가 두 선형 수량(quantities)의 네가티브 로그 표현들(예컨대, 기본 두 로가리즘들을 이용하여)이면, 그들의 합계의 네가티브 로그 표현인 s는 2-s = 2-x+2-y 또는
Figure pct00050
을 만족한다. 소정 예시들에 있어서, ALU는 min(x,y)를 사용하기 보다, 차라리 정확하게 또는 근사적으로 s를 계산한다. 수많은 이러한 근사화는 또한 ALU의 로직 내에서 실행될 수 있는 min*() 함수들로서 일반적으로 불릴 수 있다.
x 및 y가 매우 다른 경우,
Figure pct00051
임을 주목해야 한다. 여기서, x 및 y는 값에서 유사하고, 결과는 둘 중 최대값보다 작다.
소정 예시들에 있어서, min*() 연산은 상기한 수학식에서 누승법(exponentiation) 및 로그 함수들의 근사화 실행들을 수행함으로써 실행된다. 하나의 접근은 다음의 항등식을 사용하여, 및 제 2 항으로 테이블 룩업을 사용하여 min*()을 수행하는 것이다:
Figure pct00052
근사화 min*()을 계산하는 다른 접근에 있어서, 네가티브 로가리즘은, 부동 소수점 표현의 가수(mantissa)로서 취급 되어질 낮은 차수 비트들 및 지수로서 취급 되어질 높은 차수 비트들을 가지고, 두 부분들을 갖는 것처럼 취급됨에 따라,
Figure pct00053
(여기서, ∥는 비트 연결(concatenation)을 나태냄), 및
Figure pct00054
, 및 결과는
Figure pct00055
로서 표현된다. 이러한 근사화에 있어서,
Figure pct00056
이다. 만약 x = y-d이고 x < y라면,
Figure pct00057
이고, "가수"는
Figure pct00058
로서 본질적으로 계산되고, 여기서, 오버 바는 비트 보수(complement)를 나타내며, 소정 경우들에서, 부동 소수점 가산에서 사용되는 것과 유사한 방식으로, 합계에서 캐리(carry)가 존재하는 경우 더한(further) 재정규화(renormalizaion)가 존재한다. 유사하게, 만약 x = y+d이고 x > y라면,
Figure pct00059
이고, "가수"는
Figure pct00060
로서 본질적으로 계산된다. 실제로, 부동 소수점 가산에서 사용되는 것과 유사한 방식으로, 합계에서 캐리(carry)가 존재하는 경우 더한(further) 재정규화(renormalizaion)가 존재할 수 있다(즉, 하나만큼 se를 줄이고 sm을 오른쪽으로 쉬프팅함으로써).
4.4 컴파일러/동기화 메카니즘
앞서 설명한 재구성 가능한 프로세싱 시스템 아키텍처들은 수많은 연산하는 구성요소들 및 특히, 엑세싱 메모리를 비동기적으로 포함한다. 예컨대, DMA 콘트롤러들, 변수 가속기, 및 팩터 가속기는 반드시 서로 동기적으로 동작하지는 않는다. 따라서, 가능하게 메모리 커럽션(memory corruption)을 야기하는 메모리 액세스 충돌들(collisions)에 대한 가능성이 존재한다. 소정 예시들에 있어서, 동기화 메카니즘은 지시어들에 내장된 및/또는 메모리 액세스들을 동기화하기 위해 동기화 레지스터들에 상주하는 정보를 사용하고, 따라서 충돌 및 메모리 커럽션을 방지한다.
소정 예시들에 있어서, 동기화 메카니즘은 앞서 설명한 지시어 시퀀서들 내에 포함된다(즉, 도 3의 구성요소(314) 및 도 13의 구성요소(1314)). 지시어 시퀀서들은 일반적으로 지시어들을 독출하기 위해, 그들의 대응하는 구성 레지스터를 로딩하기 위해, 및 지시어 실행을 초기화 하기 위해 대기하는 연속적인 루프 내에서 운영된다. 동기화 메카니즘을 포함하는 지시어 시퀀서들은 지시어를 실행하기 전에 홀드(hold) 컨디션을 검출하기 위해 구성된다.
소정 예시들에 있어서, 로딩된 지시어의 실행을 시작하기 전에, 지시어 시퀀서는 홀드 컨디션이 충족되는지 결정한다. 만약 그렇지 않으면, 즉시 실행을 시작한다. 그러나, 홀드 컨디션이 충족되면, 지시어 시퀀서는 실행이 시작되도록 대기한다. 지시어 시퀀서는 홀드 컨디션을 계속 모니터링하고, 그것이 더이상 충족되지 않는 순간, 지시어의 실행은 시작된다.
소정 예시들에 있어서, 홀드 컨디션은 호스트에 의해 유지되는 홀드 지시 레지스터로 지시어들 내에 포함된 시퀀스 넘버를 비교한 결과에 기초하여 충족되는지 고려된다. 다른 예시들에 있어서, 지시어는 시스템 내에 다른 지시어 시퀀서들의 실행 상태와 관련된 정보를 포함한다. 정보는, 다른 지시어들 시퀀서들이 소정 실행 상태에에 있을 때까지 홀드 프로세싱에 사용될 수 있다(예컨대, 지시어 시퀀서들이 주어진 실행 상태에서 집결하도록 야기하면서).
일반적으로, 홀드 컨디션은 지시어들 위한 구성 레지스터들의 로딩으로의 부정 연산(not)을 지시어의 실행에 적용한다. 홀드 컨디션이 충족되었든 아니든 관련 없이, 지시어에 대한 구성 레지스터들의 로딩은 불연속적으로 진행한다.
4.5 다양한 주제(miscellaneous)
앞서 설명된 재구성 가능한 프로세싱 시스템 아키텍처가 외부 호스트 프로세서가 재구성 가능한 확률 엔지 계산을 조정하고, 현재 정의된 바와 같이 프로그래밍 가능한 확률 엔진의 능력들 아래서 어떠한 추가적인 프로세싱을 수행하도록 사용하는 한편, 더 많은 일반 아키텍처는 프로그래밍 가능한 확률 엔진에 지정된 하나 이상의 범용 프로세서들을 포함할 수 있었다. 더욱이, 프로그래밍 가능한 확률 엔진의 연산의 더 많은 로컨 조정을 수행하는 것 및 오프-칩 I/O(off-chip I/O)를 감소시키는 것을 단순화하기 위해, 로컬 범용 프로세서들은 추론 알고리즘들의 더 넓은 클래스를 위한 지원을 촉진할 수 있다. 소정 구체적인 알고리즘들, 및 범용 프로세서가 확률 프로세서 구성요소들에 의해 계산을 증강시킬 수 있는 수단들이 이하 설명된다.
앞서 설명한 예시들에 있어서, 호스트 시스템은 프로그래밍 가능한 확률 엔진의 외부에 존재한다. 그러나, 소정 예시들에 있어서, 하나 이상의 CPU들이, 온-칩(on-chip) 호스트 시스템으로 동작하는, 프로그래밍 가능한 엔진으로 추가될 수 있다. 더욱이, 소정 예시들에 있어서, 하나의 호스트 시스템이 다수의 프로그래밍 가능한 확률 엔진들을 호스트로서 도와줄 수 있다.
입자 신뢰 전파(particle belief propagation)은 매우 거대한 도메인들을 갖는 변수들 또는 연속된 변수들을 지원하는데 사용될 수 있는 신뢰 전파의 한 형태이다. 이 경우에 있어서, 메시지로서 전체 확률 분포를 통과시키는 대시, 메시지들은 변수의 도메인으로부터 랜덤하게 샘플링되는 포인트에서 중요도-가중치 부여된(importance-weighted) 메시지를 표현하는 일련의 값들이다. 신뢰 전파는, 적은 변화를 갖는 프로그래밍 가능한 프로세서 구성요소들을 이용하여 수행될 수 있는 통상의 신뢰 전파와 유사한, 이러한 메시지들을 이용하여 업데이트한다. 그러나, 범용 프로세서에 의한 지원에 의해 이익을 얻은 수 있다고 계산되어질 것의 부가적인 양상들이 존재한다. 특히, 계산의 그러한 두 개의 양상들이 존재한다. 첫번째는 각 변수를 위한, 랜덤하게 선택된 샘플 포인트들의 주기적인 재심플링이다. 이 계산은 그래프 내에서 팩터들을 정의하는 함수들의 반복되는 계산을 포함할 수 있다(예컨대, 메트로폴리스-하스팅스 알고리즘(Metropolis-Hastings algorithm)을 이용하여 재샘플링하는 때). 사용자-특정 팩터-그래프에 대해서, 이러한 함수들은 사용자 특정적일 수 있고 임의의 계산을 포함할 수 있다. 두번째는 이러한 재샘플링 이후 팩터 테이블의 재생성이다. 이것을 수행하는 하나의 방법은 새로운 샘플 포인트들에서 그것의 팩터 함수를 계산함으로써 주어진 팩터에 대한 팩터-테이블을 재계산하는 것이다. 이는 또한 임의의 사용자-특정 계산을 포함할 수 있다. 양 케이스에 있어서, 확률 프로세서 구성요소들을 증강하는 범용 프로세서는 이러한 계산들을 수행할 수 있다. 하나의 접근에 있어서, 이러한 프로세서들은 변수들의 재샘플링 및 팩터 테이블들의 재계산을 수행할 것이고, 그리고는 필요에 따라 적합한 확률 프로세서 구성요소의 팩터-테이블 메모리로 새로운 팩터 테이블 값들을 기록할 것이다. 하나의 접근에 있어서, 이러한 계산은 확률 프로세서 구성요소가 팩터 그래프의 부분들 상에서 프로세싱을 수행을 계속하는 동안 수행된다.
범용 계산으로부터 이익을 얻을 수 있는 알고리즘의 다른 클래스는 샘플링-기반 방법들이다. 통상적인 샘플링 방법들은 깁스(Gibbs) 샘플링 및 메트로폴리스-하스팅스 알고리즘이다. 샘플링 기반 알고리즘들은 팩터 그래프 상에서 추론을 수행하는데 사용될 수 있다. 전형적으로 깁스 샘플링은 이러한 경우에 사용된다(때때로 메트로폴리스-하스팅스 알고리즘과 함께 조합하여). 샘플링-기반 알고리즘들은 또한, 확률적이고(stochastic) 생성적인 프로그램에 의해 특정되는 모델들 상에서 추론을 수행하는데 사용될 수 있다. 이러한 경우에 있어서, 메트로폴리스-하스팅스 알고리즘은 추론 계산의 하나의 양상으로서 사용된다. 연속적이거나 거대한 도메인 변수들을 이용하는 팩터 그래프의 경우에 있어서, 추론 계산은 사용자-특정 프로그램에 기반하여 임의의 계산을 수행하는 것을 포함한다(전자의 경우에는 팩터 함수와 양자택일적이고 또는 후자의 경우에는 확률적이고 생성적인 프로그램 자체). 양 경우들에 있어서, 프로그래밍 가능한 확률 엔진의 일부로서의 범용 프로세서는 이러한 계산들을 수행하는데 사용될 수 있다. 소정 경우들에 있어서, 확률적이고 생성적인 프로그램들 상에서 추론을 수행하는 것과 같은 샘플링 기반 방법들은 현재 정의된 것처럼 확률 프로세서 구성요소들에 의해 수행되는 것과 같은 신뢰 전파와 조합될 수 있다. 생성적인 프로그램들 및 방향이 없는(undirected) 그래픽 모델들(팩터 그래프들) 둘 모두를 조합하는 모델들이 가능하고, 이러한 경우들에 있어서, 두 접근들을 조합하는 것이 적합하고, 이 경우, 프로그래밍 가능한 확률 엔진 신뢰 전파 계산들은 모델의 다른 부분들에 사용되는 다른 계산들과 동시에 동작할 수 있다.
샘플링 기반 방법들, 입자 신뢰 전파, 및 모수에 의하지 않은(non-parametric) 신뢰 전파의 다른 형태들(입자 신뢰-전파는 모수에 의하지 않은 신뢰 전파의 하나의 형태임)은 모두 계산의 적어도 일부에 대한 랜덤 샘플링을 포함한다. 랜덤 샘플링은 일반적으로, 분포들의 소정 세트에 따라 분포되는 랜덤 또는 수도-랜덤 넘버들을 생성하는 메카니즘들을 요구한다. 효율적으로 이러한 타입의 계산을 수행하기 위해, 확률 프로세서 엔진의 하나의 형태는 랜덤 넘버들의 생성을 위한 지정된 하드웨어를 가질 것이고, 더 일반적으로 이용가능한 분포들의 세트 사이에서 선택된 확률 분포에 따라 랜덤하게 분포된 값들을 생성하기 위한 지정된 하드웨어를 가질 것이다. 이를 위한 하드웨어 지원은 수도-랜덤 비트-시퀀스 생성기, (물리 랜덤니스(randomness)의 형태에 기반한) 랜덤 비트-시퀀스 생성기일 수 있고, 또는 분포로부터의 값들의 직접 생성을 포함할 수 있다. 균일한 분포들, 일반 분포들, 또는 지수적 분포들에 대한 하드웨어 지원은 이러한 알고리즘들의 효율적인 실행을 촉진시킬 것이다.
다수의 아날로그 프로세서 구성요소들를 포함하는 프로그래밍 가능한 확률 엔진을 위해, 대체적인 실시예는 (평균 및 분산[또는 등가물(equivalent], 또는 조인트 평균(joint mean) 및 공분산 매트릭스[또는 등가물]에 의해 파라미터로 표시되는) 가우시안 메시지들을 위한 직접 지원을 포함한다. 그것은 또한 가우시안들의 혼합물들에 기반한 메시지들을 지원할 수 있다(각각과 연관된 혼합 가중치와 조합되는 일련의 가우시안 메시지들에 의해 파라미터로 표시되는 메시지들). 그것은 또한 다른 파라미터로 표시되는 메시지 표현들을 지원할 수 있다. 가우시안 메시지들의 경우에 있어서, 그것은 변수 노드들을 위한 및 가우시안 또는 선형 팩터들을 위한 특용 프로세싱을 지원할 수 있다(선형 팩터들은 합 또는 다른 팩터들, 및 상수 스칼라(scalar) 또는 매트릭스에 의한 곱셈 연산(multiplication)을 포함함). 쉽게 계산되어질 것 같지 않는 더 일반적인 팩터들을 지원하기 위해, 프로그래밍 가능한 확률 엔진은 팩터 계산을 수행하기 위한 확률적인 방법들을 이용할 수 있다. 이러한 팩터들을 갖는 그래프들은 샘플링 기반 알고리즘들을 위해 앞서 설명한 것들과 유사한 메카니즐들을 이용할 것이고, 반면 가우시안 팩터들, 선형 팩터들, 및 변수들은 확률 프로세서 구성요소들 내에서 특용 하드웨어를 이용할 것이다.
앞서의 설명에 있어서, 확률 프로세서 구성요소들의 소정 예시들은 아날로그 및 디지털 로직의 조합 또는 아날로그 전자기기들을 이용하여 실행되어지는 것처럼 설명된다. 그러나, 소정 예시들에 있어서, 확률 프로세서 구성요소들은 디지털 전자기기들을 이용하여 실행될 수 있다. 프로그래밍 가능한 확률 엔진의 아날로그 로직 실행에 있어서, 최소-합 또는 각 확률 프로세서 구성요소에서 수행되는 합-프로덕트 계산들은 아날로그 로직 계산 구성요소들을 이용한다. 디지털 실행에 있어서, 이러한 프로세싱은 디지털 계산 구성요소들을 이용한다.
소정 예시들에 있어서, 프로그래밍 가능한 확률 엔진은 많은 수의 병렬 확률 프로세서 구성요소들 사이에 공유된 팩터 테이블들을 저장하기 위한 공유 메모리를 포함한다. 많은 경우들에 있어서, 그래픽 모델 내의 많은 노드들은 동일한 팩터 함수를 사용할 수 있다. 연관된 조합 테이블이 충분이 크다면, 각각의 확률 프로세서 구성요소의 로컬 메모리 내에 테이블의 복사본을 독립적으로 저장하는 것은 비효율적일 것이다. 이러한 경우, 공유 메모리가 이러한 테이블들을 보유하도록 이용가능하도록 할 것이 제안된다. 동작 중에, 공유 메모리 내에 주어진 테이블을 사용하는 모든 확률 프로세서 구성요소들은 이 테이블이 사용 중인 시간 동안 동시성(synchrony) 내에서 동작하도록 구성될 것이다. 이는 테이블로부터의 데이터가 그것의 값을 요구하는 모든 확률 프로세서 구성요소들에 의해 동시에 사용되고 공유 메모리 버스를 통해 읽혀질 것을 허용한다.
특정화된(specialized) 프로그래밍 가능한 확률 엔진 컴파일러는 공유 메모리가 콤보 테이블들을 저장하는데 사용되는 기준들을 결정하는데 책임이 잇다. 그것은 공유 메모리를 읽거나 확률 프로세서 구성요소들을 동기화하는 것과 연관된 어떠한 수행 성과 교환(performance tradeoff)을 갖는 전체 스토리지 요구사항에 대한 밸런싱을 맞춘다. 예컨대, 다수의 테이블이 확률 프로세서 구성요소들의 서로 다른 서브 세트들에 의해 동일한 시간에 사용되어질 공유 메모리 내에 저장된다면, 공유 메모리 버스를 위한 경쟁으로 인해 소정 성과 감소가 있을 수 있다.
확률 프로세싱 엔진의 적어도 일부가 아날로그 전자기기를 이용하여 실행되는 실시예들에 있어서, 데이터는 디지털과 아날로그 형태 간에 변환된다. 소정 예시들에 있어서, 프로트 엔드 내에 포함된 DMA 콘트롤러는 아날로그와 디지털 도메인들 사이에서 데이터를 변환할 수 있는 데이터 변환 유닛을 추가한다. 특히, DMA 콘트롤러는 디지털로부터 아날로그 도메인으로 데이터를 변환하기 위한 하나의 뱅크(bank)의 DAC들, 및 아날로그로부터 디지털 도메일으로 데이터를 변환하기 위한 하나의 뱅크의 ADC들을 추가할 수 있다.
소정 예시들에 있어서, 각각의 확률 프로세서 구성요소는 여러 레벨들에서 데이터의 저장을 허용하는 메모리 계층 스킴(scheme)에 의해 유지되는 로컬 동작 메모리를 포함한다.
메시지들의 내부 표현은 확률의 로가리즘적인 표현일 수 있다; 바이너리 변수들을 위한 로그-우도 비율(LLR: log-likelihood ratio) 또는 다중-값의 변수들을 위한 포텐셜(potential)(log p) 중 어느 하나. 디폴트(default)에 의해, 외부 스토리지에 대한 이러한 데이터의 대응하는 표현은 동일한 포맷으로 존재한다. 또한 표현 변환 단계가 다른 포맷들에서 표현을 허용하기 위해 포함될 수 있다.
앞서 말한 설명은 첨부한 청구범뒤들의 범위에 의해 정의되는 본 발명의 범위를 제한하기 위한 것이 아나고 설명하기 위하여 의도된 것은 이해될 것이다. 다른 실시예들도 다음의 청구범위들의 범위 내에 존재한다.

Claims (26)

  1. 복수의 팩터들 및 복수의 변수들에 의해 톡정되는 추론 태스크(tssk)의 계산들을 수행하기 위한 프로그래밍 가능한(programmable) 계산 장치에 있어서,
    각 팩터는 상기 변수들의 서브 셋과 연관되고, 상기 장치는 하나 이상의 프로세싱 구성요소들(elements)을 포함하며, 각각의 프로세싱 구성요소는,
    팩터의 정의를 위한 제 1 스토리지(storage);
    상기 계산들 중 적어도 일부의 입력들 및/또는 출력들과 연관된 데이터를 위한 제 2 스토리지; 및
    팩터와 연관된 상기 계산들 중 상기 적어도 일부의 연속된 부분들을 수행하기 위한, 상기 제 1 스토리지 및 상기 제 2 스토리지와 결합된 하나 이상의 계산 유닛들, 여기서, 상기 연속된 부분들은 상기 팩터의 정의를 위한 스토리지 내의 데이터에 의해 정의됨;을 포함하는 것을 특징으로 하는 프로그래밍 가능한 계산 장치.
  2. 제 1 항에 있어서,
    각 계산 유닛은 상기 제 2 스토리지로부터 액세스된(accessed) 값들을 조합하기 위한 조합 유닛을 포함하는 것을 특징으로 하는 장치.
  3. 제 2 항에 있어서,
    상기 조합 유닛은 수치 계산 로직(numeric computation logic)을 포함하는 것을 특징으로 하는 장치.
  4. 제 2 항에 있어서,
    상기 조합 유닛은 아날로그 계산 회로를 포함하는 것을 특징으로 하는 장치.
  5. 제 2 항에 있어서,
    각각의 계산 유닛은 상기 제 2 스토리지 내의 값들로의 상기 조합 유닛의 출력을 누적시키기 위한 누적 유닛을 더 포함하는 것을 특징으로 하는 장치.
  6. 제 1 항에 있어서,
    각각의 프로세싱 구성요소는 복수의 상기 계산 유닛들을 포함하는 것을 특징으로 하는 장치.
  7. 제 6 항에 있어서,
    상기 계산 유닛들 각각은 상기 제 2 스토리지의 개별적인(separate) 부분을 갖는 것을 특징으로 하는 장치.
  8. 제 6 항에 있어서,
    제 1 스토리지는 상기 계산 유닛들에 의해 공유되는 것을 특징으로 하는 장치.
  9. 제 1 항에 있어서, 상기 장치는
    병렬적으로 동작 가능한 복수의 프로세싱 구성요소들;
    상기 프로세싱 구성요소들 각각과 결합된 연결 시스템(connectivity system);
    상기 추론 태스크의 적어도 일부의 상세(specefication)를 수용하기 위한 호스트 시스템에 대한 인터페이스를 가지며, 상기 연결 시스템을 매개로 상기 프로세싱 구성요소들과 결합된 콘트롤러를 더 포함하되,
    상기 프로세싱 구성요소들 각각은, 상기 팩터들 중 다른 것들(different ones)과 연관된 계산을 수행하는 상기 프로세싱 구성요소들 중 다른 것(other)과 동시에 상기 팩터들 중 하나와 연관된 계산을 수행하도록 상기 콘트롤러에 의해 구성가능하고,
    상기 복수의 프로세싱 구성요소들 각각은 상기 연결 시스템을 매개로 메시지들을 교환하기 위해 상기 연결 시스템과 결합되고, 상기 메시지들은 상기 추론 태스크의 상기 적어도 일부의 수행 결과를 상기 콘트롤러로 제공하고 상기 팩터들과 연관된 계산들로의 입력들 및/또는 출력들을 제공하는 것을 특징으로 하는 장치.
  10. 제 9 항에 있어서,
    상기 추론 태스트의 상세(specefication)은 그래프 기반(graph-based) 추론 태스크의 상세(specefication)을 포함하고, 각 팩터는 그래프의 구성요소와 연관된 것을 특징으로 하는 장치.
  11. 제 9 항에 있어서,
    상기 연결 시스템은 상기 그래프에 따라 프로세싱 구성요소들 사이에서 연결(connectivity)을 제공하도록 구성가능한 것을 특징으로 하는 장치.
  12. 제 9 항에 있어서, 상기 연결 시스템은 상기 프로세싱 구성요소들 사이에 그리드(grid), 트리(tree), 및 체인(chain) 연결 중 적어도 하나를 제공하는 것을 특징으로 하는 장치.
  13. 복수의 구성요소들을 갖는 계산 장치의 프로세싱 구성요소를 사용하여 추론 태스크(task)의 계산들을 수행하기 위한 방법에 있어서,
    상기 추론 태스크는 복수의 변수들과 복수의 팩터들에 의해 특정되고, 각 팩터는 상기 변수들의 서브 세트와 연관되며, 상기 방법은,
    팩터의 정의를 상기 프로세싱 구성요소의 제 1 스토리지(storage)에 저장하는 단계;
    상기 계산들 중 적어도 일부의 입력들 및/또는 출력들과 연관된 데이터를 제 2 스토리지에 저장하는 단계; 및
    팩터와 연관된 상기 계산들 중 상기 적어도 일부의 연속된 부분들을 상기 프로세싱 구성요소의 하나 이상의 조합 유닛들에서 수행하는 단계, 여기서, 상기 연속된 부분들은 상기 제 1 스토리지 내의 데이터에 의해 정의됨;를 포함하되,
    상기 하나 이상의 계산 유닛들은 상기 제 1 스토리지 및 상기 제 2 스토리지와 결합된 것을 특징으로 하는 추론 태스크의 계산들을 수행하기 위한 방법.
  14. 제 13 항에 있어서,
    각각의 계산 유닛은 조합 유닛을 포함하고, 팩터와 연관된 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 상기 제 2 스토리지로부터 액세스된 값들을 조합하는 단계를 포함하는 것을 특징으로 하는 방법.
  15. 제 14 항에 있어서,
    상기 조합 유닛은 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는데 사용되는 수치(numeric) 계산 로직을 포함하는 것을 특징으로 하는 방법.
  16. 제 14 항에 있어서,
    상기 조합 유닛은 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는데 사용되는 아날로그 계산 회로를 포함하는 것을 특징으로 하는 방법.
  17. 제 14 항에 있어서,
    각각의 계산 유닛은 누적 유닛을 더 포함하고,
    팩터와 연관된 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 상기 제 2 스토리지 내의 값들로의 상기 조합 유닛의 출력을 누적시키는 단계를 포함하는 것을 특징으로 하는 방법.
  18. 제 13 항에 있어서,
    각각의 프로세싱 구성요소는 복수의 상기 계산 유닛들을 포함하고, 상기 계산들 중 상기 적어도 일부의 상기 연속된 부분들을 수행하는 단계는 다수의 계산 유닛들에서 동시에 상기 부분들을 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  19. 제 13 항에 있어서,
    상기 추론 태스크의 상세(specefication)를 수용하는 단계, 여기서, 상세(specefication)는 복수의 변수들 및 복수의 팩터들을 포함하고, 각각의 팩터는 상기 변수들의 서브 세트와 연관됨;
    상기 복수의 팩터들 중 하나 이상을 정의하는 데이터를 가지고 상기 프로세싱 구성요소들 각각을 구성하는 단계;
    상기 프로세싱 구성요소들 중 각각에서, 상기 팩터들 중 서로 다른 것들과 연관된 계산을 수행하는 상기 프로세싱 구성요소들의 다른 것들과 동시에 상기 팩터들 중 하나와 연관된 계산을 수행하는 단계;
    상기 연결 시스템을 매개로 메시지들을 교환하는 단계, 여기서, 상기 메시지들은 상기 추론 태스크의 상기 적어도 일부의 수행 결과를 제공하고 상기 팩터들과 연관된 상기 계산들에 대한 상기 프로세싱 구성요소들로 입력들 및/또는 출력들을 제공함;를 더 포함하는 것을 특징으로 하는 방법.
  20. 제 19 항에 있어서,
    상기 추론 태스크 중 상기 적어도 일부의 상세(specefication)를 수용하는 단계는 상기 장치의 콘트롤러에서, 호스트로부터 상기 상세(specefication)를 수용하는 단계를 포함하고, 상기 방법은 콘트롤러를 매개로 상기 추론 태스크 중 상기 적어도 일부의 수행 결과를 상기 호스트로 통과시키는 단계를 더 포함하는 것을 특징으로 하는 방법.
  21. 제 19 항에 있어서,
    상기 추론 태스크의 상세(specefication)는 그래프 기반 추론 태스크의 상세(specefication)를 포함하고, 각각의 팩터는 그래프의 구성요소와 연관된 것을 특징으로 하는 방법.
  22. 제 21 항에 있어서,
    상기 추론 태스크는 신뢰 전파(Belief Propagation) 태스크를 포함하는 것을 특징을 하는 방법.
  23. 제 19 항에 있어서,
    상기 메시지들은 상기 변수들의 확률 분포들을 나타내는 것을 특징으로 하는 방법.
  24. 제 21 항에 있어서,
    상기 그래프에 따라 프로세싱 구성요소들 사이의 연결을 제공하기 위해 상기 연결 시스템을 구성하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  25. 제 19 항에 있어서,
    상기 장치를 사용하여 수행되는 계산의 결과에 따라 상기 연결 시스템을 구성하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  26. 제 19 항에 있어서,
    상기 연결 시스템을 매개로 상기 프로세싱 구성요소들 사이에 그리드, 트리 및 체인 연결 중 적어도 하나를 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
KR1020147000431A 2011-06-07 2012-06-07 프로그래밍 가능한 특용 확률 프로세서 및 추론 태스크의 하드웨어 가속화된 연산들을 수행하기 위한 방법 KR101629111B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161494311P 2011-06-07 2011-06-07
US61/494,311 2011-06-07
US13/187,466 2011-07-20
US13/187,466 US9626624B2 (en) 2010-07-20 2011-07-20 Programmable probability processing
PCT/US2012/041341 WO2012170679A1 (en) 2011-06-07 2012-06-07 Programmable probability processing

Publications (2)

Publication Number Publication Date
KR20140039038A true KR20140039038A (ko) 2014-03-31
KR101629111B1 KR101629111B1 (ko) 2016-06-09

Family

ID=46246318

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147000431A KR101629111B1 (ko) 2011-06-07 2012-06-07 프로그래밍 가능한 특용 확률 프로세서 및 추론 태스크의 하드웨어 가속화된 연산들을 수행하기 위한 방법

Country Status (5)

Country Link
US (1) US9626624B2 (ko)
EP (1) EP2718878A1 (ko)
KR (1) KR101629111B1 (ko)
CN (1) CN103718197B (ko)
WO (1) WO2012170679A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626624B2 (en) 2010-07-20 2017-04-18 Analog Devices, Inc. Programmable probability processing
US9563851B2 (en) 2011-06-07 2017-02-07 Analog Devices, Inc. Programmable probability processing
US20170017892A1 (en) * 2013-10-15 2017-01-19 Analog Devices, Inc. Sampling variables from probabilistic models
WO2016186651A1 (en) * 2015-05-19 2016-11-24 Hewlett Packard Enterprise Development Lp Updating inference graph absent node locking
US10719639B2 (en) * 2017-01-09 2020-07-21 General Electric Company Massively accelerated Bayesian machine
GB2562520A (en) * 2017-05-17 2018-11-21 John Hamlin Derrick Digital processing connectivity
CN111078623B (zh) * 2018-10-18 2022-03-29 上海寒武纪信息科技有限公司 片上网络处理系统和片上网络数据处理方法
CN110298441B (zh) * 2019-05-24 2022-01-11 深圳云天励飞技术有限公司 一种数据处理方法、电子装置及计算机可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100223225A1 (en) * 2009-03-02 2010-09-02 Lyric Semiconductor, Inc. Analog computation using numerical representations with uncertainty

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5369749A (en) 1989-05-17 1994-11-29 Ibm Corporation Method and apparatus for the direct transfer of information between application programs running on distinct processors without utilizing the services of one or both operating systems
US5297232A (en) 1991-10-30 1994-03-22 Westinghouse Electric Corp. Wireless neural network and a wireless neural processing element
US6073185A (en) 1993-08-27 2000-06-06 Teranex, Inc. Parallel data processor
US5621896A (en) 1994-06-01 1997-04-15 Motorola, Inc. Data processor with unified store queue permitting hit under miss memory accesses
EP1530849B1 (en) * 2002-08-29 2018-10-24 Callahan Cellular L.L.C. Reconfigurable compute engine interconnect fabric
JP4780921B2 (ja) * 2004-03-17 2011-09-28 キヤノン株式会社 並列パルス信号処理装置、及びその制御方法
US7299339B2 (en) * 2004-08-30 2007-11-20 The Boeing Company Super-reconfigurable fabric architecture (SURFA): a multi-FPGA parallel processing architecture for COTS hybrid computing framework
US8301788B2 (en) 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US7627540B2 (en) 2005-06-28 2009-12-01 Neurosciences Research Foundation, Inc. Addressing scheme for neural modeling and brain-based devices using special purpose processor
US8914618B2 (en) 2005-12-29 2014-12-16 Intel Corporation Instruction set architecture-based inter-sequencer communications with a heterogeneous resource
US9626624B2 (en) 2010-07-20 2017-04-18 Analog Devices, Inc. Programmable probability processing
US9563851B2 (en) 2011-06-07 2017-02-07 Analog Devices, Inc. Programmable probability processing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100223225A1 (en) * 2009-03-02 2010-09-02 Lyric Semiconductor, Inc. Analog computation using numerical representations with uncertainty

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Benjamin Vigoda. Analog Logic: Continuous-Time Analog Circuits for Statistical Signal Processing. MIT 박사학위논문. 2003.09, pp.1-209. *
Joseph E. Gonzalez et al. Distributed Parallel Inference on Large Factor Graphs. UAI '09 Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence. 2009. pp.203-212.* *
Stephen W. Keckler et al. Exploiting Fine-Grain Thread Level Parallelism on the MIT Multi-ALU Processor. ISCA '98 Proceedings of the 25th annual international symposium on Computer architecture, 1998.* *

Also Published As

Publication number Publication date
US9626624B2 (en) 2017-04-18
EP2718878A1 (en) 2014-04-16
US20140114443A1 (en) 2014-04-24
WO2012170679A1 (en) 2012-12-13
KR101629111B1 (ko) 2016-06-09
CN103718197A (zh) 2014-04-09
CN103718197B (zh) 2016-11-23

Similar Documents

Publication Publication Date Title
US9563851B2 (en) Programmable probability processing
KR101629111B1 (ko) 프로그래밍 가능한 특용 확률 프로세서 및 추론 태스크의 하드웨어 가속화된 연산들을 수행하기 위한 방법
CN110325963B (zh) 用于神经网络处理的针对可编程硬件节点的多功能单元
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
Scrucca GA: A package for genetic algorithms in R
Falcao et al. Massively LDPC decoding on multicore architectures
US7305649B2 (en) Automatic generation of a streaming processor circuit
Gmeiner et al. Parallel multigrid on hierarchical hybrid grids: a performance study on current high performance computing clusters
Yang et al. Compressed sensing and Cholesky decomposition on FPGAs and GPUs
JP2016526220A (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
CN114127740A (zh) 人工智能模型的分布式训练中的数据并行性
CN114127702A (zh) 在存储器受限设备上执行大型人工智能模型
Sun et al. An I/O bandwidth-sensitive sparse matrix-vector multiplication engine on FPGAs
Zhang et al. Fast linear interpolation
CN112445454A (zh) 使用范围特定的系数集字段执行一元函数的系统
Mealey et al. Accelerating inference in long short-term memory neural networks
WO2015057837A1 (en) Sampling variables from probabilistic models
Yang et al. Learninggroup: A real-time sparse training on fpga via learnable weight grouping for multi-agent reinforcement learning
Lin et al. A compact DSP core with static floating-point arithmetic
US20220051095A1 (en) Machine Learning Computer
Tavakoli et al. FSCHOL: An OpenCL-based HPC Framework for Accelerating Sparse Cholesky Factorization on FPGAs
Costa Customized Hardware for Long-Short Term Memory Networks in Embedded Systems
Hosseiny et al. High-level synthesis-based approach for CNN acceleration on FPGA
Ates et al. Multi-Gbps Fano Decoding Algorithm on GPGPU
Kate A tensor processing unit design for FPGA benchmarking

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant