KR20190116040A - 뉴럴 네트워크 프로세서 - Google Patents

뉴럴 네트워크 프로세서

Info

Publication number
KR20190116040A
KR20190116040A KR1020180131156A KR20180131156A KR20190116040A KR 20190116040 A KR20190116040 A KR 20190116040A KR 1020180131156 A KR1020180131156 A KR 1020180131156A KR 20180131156 A KR20180131156 A KR 20180131156A KR 20190116040 A KR20190116040 A KR 20190116040A
Authority
KR
South Korea
Prior art keywords
data
tasks
flow engine
task
control flow
Prior art date
Application number
KR1020180131156A
Other languages
English (en)
Other versions
KR102191408B1 (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 주식회사 퓨리오사에이아이
Priority to PCT/KR2019/003613 priority Critical patent/WO2019194466A1/ko
Publication of KR20190116040A publication Critical patent/KR20190116040A/ko
Application granted granted Critical
Publication of KR102191408B1 publication Critical patent/KR102191408B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

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

Abstract

본 발명의 일 실시예는, 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 프로세싱 유닛에 있어서, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하도록 구성되는 데이터 플로우 엔진, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진, 그리고, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 제공한다.

Description

뉴럴 네트워크 프로세서{NEURAL NETWORK PROCESSOR}
본 개시는 뉴럴 네트워크 프로세서에 관한 것으로, 더욱 상세하게는, 본 개시는 인공 신경망에서의 프로세싱 속도를 향상시키도록 구성되는 뉴럴 네트워크 프로세싱 유닛과 방법 및 시스템에 관한 것이다.
인간의 뇌는 수많은 뉴런을 지니고 있고, 이러한 뉴런들의 전기화학적인 활동에 의해 지능이 형성된다. 각각의 뉴런은 시냅스를 통해 다른 뉴런들과 연결되어 있고, 뉴런들은 서로 전기 또는 화학적인 신호를 주고 받는다. 뉴런이 시냅스로부터 받은 신호들은 전기적인 신호로 변환되어 해당 뉴런을 자극한다. 이에 따라. 뉴런의 전위가 증가하여 역치 전위가 되면, 뉴런은 활동 전위(action potential)를 발생시켜 시냅스를 통해 다른 뉴런으로 전기화학적인 신호를 전달한다.
인공 신경망(Artificial Neural Network, ANN)은 인간의 뇌를 구성하고 있는 뉴런들을 수학적으로 모델링한 인공 뉴런들을 서로 연결하여 인공 지능을 구현한 것이다. 인공 뉴런에 대한 하나의 수학적 모델은 아래 수식 (1)과 같다. 구체적으로, 인공 뉴런은input signal xi 를 입력 받아 xi에 각각 대응되는 가중치 wi를 곱하여 총합을 구한다. 다음, 해당 인공 뉴런은 활성화 함수(activation function)를 이용하여 활성화(activation) 값을 구하고, 이 활성화 값을 연결된 다음 인공 뉴런으로 전달한다.
y = f(w1 * x1 + w2 * x2 + .. wn * xn) = f(Σ wi * xi) , where i = 1 . n, n = # input signal - 수식 (1)
ANN의 한 형태인 심층 인공 신경망(Deep neural network, DNN)은 인공 뉴런(노드)들이 계층화된 네트워크 구조(layered network architecture)를 갖는다. DNN은 입력층(Input layer), 출력층(Output layer) 및 입력층과 출력층 사이의 다수의 은닉층(Hidden layer)으로 구성된다. 입력층은 입력값이 입력되는 다수의 노드들로 구성되며, 입력층의 노드들은 입력층과 연결되어 있는 다음 은닉층의 노드들로 상기한 수학적 모델을 통해 계산된 출력값들을 전달한다. 은닉층의 노드들은 상기한 수학적 모델을 통해 입력값을 전송 받고, 출력값을 계산하며, 출력값을 출력층의 노드들로 전달한다.
DNN에서 수행되는 기계 학습의 한 형태인 딥러닝(Deep learning)의 연산 과정은 주어진 DNN에서 학습 데이터를 바탕으로 계속해서 학습하여 해당 DNN의 연산 능력을 향상시키는 훈련(training) 과정과, 훈련 과정을 통해 학습된 DNN을 사용하여 새로운 입력 데이터에 대해 추론(inference)하는 과정으로 분류할 수 있다.
딥러닝의 추론 과정은 입력 데이터를 입력층의 노드가 입력 받고, 이후 레이어의 순서에 따라 은닉층과 출력층에서 순차적으로 연산을 수행하는 전방향 전파(forward propagation) 방식으로 이루어진다. 최종적으로, 출력층 노드들은 은닉층들의 출력값을 바탕으로 추론 과정의 결론을 도출한다.
반면, 딥러닝의 훈련 과정은 추론 과정에 대한 결론과 실제 정답과의 차이를 줄이기 위해 노드들의 가중치(weight)를 조절하여 학습을 수행한다. 일반적으로 가중치는 기울기 하강(gradient descent) 방식을 통해 수정된다. 기울기 하강 방식을 구현하기 위해, 노드들 각각의 가중치를 대상으로 추론 과정의 결론과 실제 정답 간 차이의 미분값을 구해야 한다. 이 과정에서 DNN의 앞단 노드의 가중치의 미분값은 DNN의 뒷단 노드의 가중치에 대한 미분값의 체인룰(chain rule)에 의해 계산된다. 체인룰의 계산은 추론 과정 방향의 역방향으로 이루어지기 때문에 딥러닝의 학습 과정은 역방향 전파(back propagation) 방식을 갖는다.
다시 말해, DNN은 계층 구조를 가지며, 각각의 계층에 존재하는 노드들은 이전 계층에 존재하는 다수의 노드들로부터 결과값을 입력 받고, 상기한 노드의 수학적 모델에 기반한 연산을 수행하여 새로운 결과값을 출력하며, 새로운 결과값을 다음 계층의 노드들로 전달한다.
한편, 종래 DNN의 대부분의 연산 구조는 각 계층에 존재하는 노드들이 수행하는 수많은 연산들을 다수의 연산 유닛에 분산하여 처리하는 분산 처리 구조를 지니고 있었다. 그러나, 각 계층에 존재하는 노드들이 수행하는 연산을 다수의 연산 유닛에 분산하여 처리하게 되면, 각 연산 유닛들은 연산에 필요한 이전 연산 결과들을 모두 전달 받은 이후에 연산을 수행해야 한다. 그러므로, 종래의 연산 처리 구조를 이용한 인공 신경망에서의 연산 방법은 계층 단위의 동기화(Synchronization) 과정이 필요하다. 종래 DNN의 연산 구조에서 동기화 과정은 이전 계층의 모든 연산이 완료되었음을 동기화 방법에 의해 보장하고 다음 계층의 연산을 수행하는 방식으로 진행되었다.
상술한 바와 같이, 본래 DNN의 연산 처리 구조는 병렬 처리 방식에 유리한 데이터 플로우 방식이 적용되는 것이 자연스러움에도 불구하고, 종래 DNN은 조밀 행렬들 간의 연산(Dense Matrix Multiplication)과 같은 정규화된 연산(직렬 처리 방식)에 최적화된 연산 처리 구조를 지니고 있었다. 즉, 종래 DNN의 연산 처리 구조는 한 계층에 존재하는 모든 노드들이 비슷한 양의 일을 분산하여 처리하도록 함으로써 노드들의 작업 종료 시간을 비슷하게 하고, 한 계층의 작업이 종료되면 동기화 과정을 수행하여 순차적으로 다음 계층의 연산을 시작하는 정규화된 연산 방식에 최적화된 구조이다.
그러나, 여러 계층 내에 분산되어 있는 노드들은 독립적이어서 각자 자신이 수행하는 연산에 필요한 이전 결과들만 있으면 바로 연산을 시작할 수 있다. 따라서, 종래의 DNN의 노드들은 다른 노드들의 연산 완료 여부와 상관 없이 자신의 연산을 수행할 수 있음에도 불구하고, 반드시 이전 계층의 모든 작업이 종료되어야만 연산을 시작할 수 있는 문제점을 가지고 있다. 또한, 연산 유닛 중 일부 연산 유닛들이 자신에게 할당된 모든 연산을 종료하지 못한 경우, 이미 연산을 마친 연산 유닛들은 대기해야 한다. 결국, 종래 DNN의 연산 구조는 노드들이 각기 다른 연산 양을 처리하는 비정규화된 연산(병렬 처리 방식)에는 비효율적인 구조이다.
이와 관련하여, 딥러닝의 연산 과정에서는 비정규화된 연산(irregular computation)이 흔히 발생한다. 비정규화된 연산은 연산할 필요가 없는 0값을 다수 포함하는 행렬들의 연산 등으로 인해 발생할 수 있다. 이해의 편의를 위해, 다수의 연산 유닛이 동일하거나 비슷한 정도의 연산을 분산 처리하여 모두 정규화된 연산을 수행하도록 연산 구조가 프로그램화 된 DNN의 경우를 예로 든다.
위 예에서, 연산할 필요가 없는 0 값을 포함하는 행렬 연산이 존재하는 경우, 연산 유닛이 해당 연산들을 생략하게 됨으로써 연산 유닛들이 처리해야 하는 연산량이 달라지는 비정규화된 연산이 발생한다. 또한, 인공 신경망을 구성하는 연결의 가중치에 0이 많이 존재하는 것과 같이 스파스(Sparse)한 경우 또는 인공 신경망의 처리 과정에서 발생하는 활성화 함수의 종류에 따라 0값이 발생하기 쉬운 경우에 비정규화된 연산이 자주 발생하게 된다. 또한, 딥러닝의 연상 과정에서 수많은 연산들이 다수의 연산 유닛들에 의해 나뉘어 실행되고, 이 과정에서 다수의 연산 유닛들이 서로 데이터를 주고 받는 통신(communication)을 수행하게 되면, 통신 네트워크 상에 발생하는 지연 속도와 그 차이로 인해 비정규화된 통신이 발생한다. 이 경우, 비정규화된 연산과 연산 유닛들 간의 통신으로 인해, DNN의 한 계층에 존재하는 노드들이 수행하는 연산들의 완료 시간이 불규칙해질 수 있다. 또한, 일부 늦게 처리되는 연산들로 인해 한 계층 내의 일부 연산 유닛들이 아이들(Idle)한 상태가 될 수 있다.
종래 DNN은 상기한 상황에서도 반드시 한 계층 내에 모든 노드들의 연산과 통신이 완료될 때까지 기다린 후, 동기화 과정을 거쳐야만 다음 계층의 연산을 처리하도록 구성된다. 따라서, 종래 DNN은 노드들의 사용 효율(Utilization)이 떨어지는 문제점을 야기시키고, 노드들의 사용 효율이 떨어지면 결국 DNN 전체의 연산 효율이 떨어지는 문제 역시 발생하게 된다. DNN의 연산 효율을 높이기 위해 계층 단위가 아닌 개별 노드 단위로 상술한 동기화 과정을 설정할 수도 있으나, 이는 추가적인 하드웨어 비용을 발생시킨다.
본 발명의 실시예들은, 비정규화된 연산이 흔히 발생하는 인공 신경망에서, 프로세싱 속도를 향상시키도록 구성되는 뉴럴 네트워크 프로세싱 유닛과 방법 및 시스템을 제공한다.
본 발명의 실시예들이 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 위에서 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 실시예들이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
상술한 기술적 과제를 해결하기 위해, 본 발명의 일 실시예는, 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 프로세싱 유닛에 있어서, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하도록 구성되는 데이터 플로우 엔진, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진, 그리고, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 제공한다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함할 수 있다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장할 수 있다.
본 실시예에 있어서, 외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터를 더 포함할 수 있다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함할 수 있다.
본 실시예에 있어서, 상기 데이터 메모리는 동적 메모리를 포함하며, 상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다.
본 실시예에 있어서, 상기 데이터 플로우 엔진은, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받아 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하되, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록, 그리고, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐를 포함하여, 상기 러닝 준비 큐로부터 인덱스를 상기 컨트롤 플로우 엔진으로 전송하도록 구성될 수 있다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진은, 상기 데이터 플로우 엔진의 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록과 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함할 수 있다.
본 실시예에 있어서, 상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성될 수 있다.
또한, 상술한 기술적 과제들을 해결하기 위해 본 발명의 다른 실시예는, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서, (i) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 단계, (ii) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하는 단계, 그리고, (iii) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법을 제공한다.
본 실시예에 있어서, 상기 뉴럴 네트워크 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고, 상기 뉴럴 네트워크 프로세싱 방법은 상기 (ii) 단계와 상기 (iii) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 (iii) 단계 이후에, 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 (i) 단계는, 상기 데이터 플로우 엔진이, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정, 상기 데이터 플로우 엔진이, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정, 그리고, 상기 데이터 플로우 엔진이, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 과정을 더 포함할 수 있다.
본 실시예에 있어서, 상기 데이터 플로우 엔진은 페치 준비 큐, 페치 블록 및 러닝 준비 큐를 포함하고, 상기 컨트롤 플로우 엔진은 러닝 블록 및 프로그램 카운터를 포함하며, 상기 (i) 단계는, 상기 페치 준비 큐가 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터를 상기 데이터 메모리로 로드하는 과정, 그리고, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정을 포함하고, 상기 (ii) 단계는, 상기 러닝 블록이 상기 러닝 준비 큐로부터 태스크들의 인덱스를 순차적으로 전송 받는 과정 및 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함할 수 있다.
또한, 상술한 기술적 과제들을 해결하기 위해 본 발명의 또 다른 실시예는, 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 시스템에 있어서, 중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 구비하는 컴퓨팅 모듈을 포함하고, 상기 프로세싱 유닛은, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하도록 구성되는 데이터 플로우 엔진, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진, 그리고, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 연산 모듈을 하나 이상 구비하는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 제공한다.
본 실시예에 있어서, 상기 프로세싱 유닛은, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함할 수 있다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장할 수 있다.
본 실시예에 있어서, 상기 데이터 메모리에 저장된 결과 데이터는 상기 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용될 수 있다.
본 실시예에 있어서, 상기 중앙처리유닛과 상기 컴퓨팅 모듈을 연결하여 상기 중앙처리유닛과 상기 컴퓨팅 모듈간의 통신이 수행되도록 구성되는 호스트 인터페이스를 더 포함할 수 있다.
본 실시예에 있어서, 상기 중앙처리유닛의 명령을 상기 컴퓨팅 모듈로 전달하도록 구성되는 커맨드 프로세서를 더 포함할 수 있다.
본 실시예에 있어서, 상기 중앙처리유닛과 상기 컴퓨팅 모듈 각각의 데이터 전송 및 저장을 제어하도록 구성되는 메모리 컨트롤러를 더 포함할 수 있다.
본 실시예에 있어서, 상기 프로세싱 유닛은, 외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터와, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함할 수 있다.
본 실시예에 있어서, 상기 데이터 메모리는 동적 메모리를 포함하며, 상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다.
본 실시예에 있어서, 상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성될 수 있다.
본 실시예에 있어서, 상기 데이터 플로우 엔진은, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받아 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하되, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록과, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐를 포함하여, 상기 러닝 준비 큐로부터 인덱스를 상기 컨트롤 플로우 엔진으로 전송하도록 구성될 수 있다.
본 실시예에 있어서, 상기 컨트롤 플로우 엔진은, 상기 데이터 플로우 엔진의 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록과 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함할 수 있다.
또한, 상술한 기술적 과제들을 해결하기 위해 본 발명의 또 다른 실시예는, 중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 포함하는 컴퓨팅 모듈을 포함하되, 상기 프로세싱 유닛은 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서, (1) 상기 중앙처리유닛이 상기 컴퓨팅 모듈에 명령을 전송하는 단계, (2) 상기 컴퓨팅 모듈이 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 단계를 포함하고, 상기 (2) 단계는, (2-1) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 단계, (2-2) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하는 단계, 그리고, (2-3) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법을 제공한다.
본 실시예에 있어서, 상기 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고, 상기 뉴럴 네트워크 프로세싱 방법은 상기 (2-2) 단계와 상기 (2-3) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 (2) 단계는, 상기 (2-3) 단계 이후에 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛이 상기 결과 데이터를 로드하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 (1) 단계 이전에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 상태를 초기화하는 단계와, 상기 (2) 단계 이후에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 연산에 따른 결과 데이터를 상기 중앙처리유닛의 저장소로 저장하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 (2-1) 단계는, 상기 데이터 플로우 엔진이 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정, 상기 데이터 플로우 엔진이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정, 그리고, 상기 데이터 플로우 엔진이, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 과정을 포함할 수 있다.
본 실시예에 있어서, 상기 데이터 플로우 엔진은 페치 준비 큐, 페치 블록 및 러닝 준비 큐를 포함하고, 상기 컨트롤 플로우 엔진은 러닝 블록 및 프로그램 카운터를 포함하며, 상기 (2-1) 단계는, 상기 페치 준비 큐가 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터를 상기 데이터 메모리로 로드하는 과정, 그리고, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정을 포함하고, 상기 (2-2) 단계는, 상기 러닝 블록이 상기 러닝 준비 큐로부터 태스크들의 인덱스를 순차적으로 전송 받는 과정 및 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함할 수 있다.
본 발명의 실시예들에 따르면, 인공 신경망에서의 프로세싱 실행 단위인 태스크들 각각은 다른 태스크들의 데이터 준비 완료 여부와 상관 없이, 각자 실행에 필요한 데이터가 준비되면 실행을 시작할 수 있다. 이에 따라, 태스크들의 프로세싱을 담당하는 프로세싱 유닛의 사용 효율을 높일 수 있다.
또한, 본 발명의 실시예들에 따르면, 데이터 준비가 완료된 태스크들의 인스트럭션들은 순차적으로 수행되도록 함으로써, 데이터 플로우 구조 방식에 따라 태스크들의 인스트럭션들을 실행할 때 발생하는 오버헤드를 방지할 수 있다.
또한, 본 발명의 실시예들에 따르면, 데이터 플로우 방식과 컨트롤 플로우 방식을 혼합 적용한 뉴럴 네트워크 프로세싱 유닛 및 시스템을 이용하여, 비정규화된 연산이 흔히 발생하는 인공 신경망에서의 프로세싱 속도를 향상시킬 수 있고, 이에 따라, 딥러닝의 학습, 훈련 및 추론 과정에 소요되는 시간을 줄일 수 있다.
본 발명의 실시예들에 따른 효과는 상기한 효과로 한정되는 것은 아니며, 상세한 설명 또는 특허청구범위에 기재된 구성으로부터 추론 가능한 모든 효과를 포함하는 것으로 이해되어야 한다.
도 1은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템의 구성을 개략적으로 도시한 도면이다.
도 2는 도 1에 도시된 프로세싱 유닛의 세부 구성을 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 3은 도 1에 도시된 뉴럴 네트워크 프로세싱 시스템을 이용한 뉴럴 네트워크 프로세싱 방법의 절차를 도시한 흐름도이다.
도 4는 도 2에 도시된 프로세싱 유닛을 이용한 뉴럴 네트워크 프로세싱 방법의 절차를 도시한 흐름도이다.
도 5는 도 2에 도시된 인스트럭션 메모리와 데이터 메모리를 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 6은 도 4에 도시된 뉴럴 네트워크 프로세싱 방법의 세부 절차들의 구현예를 셜명하기 위해 도시한 도면이다.
도 7은 도 2에 도시된 데이터 플로우 엔진과 컨트롤 플로우 엔진의 세부 구성들을 더욱 상세하게 설명하기 위해 도시한 도면이다.
도 8은 도 2에 도시된 컨트롤 플로우 엔진과 인스트럭션 메모리간의 상호작용 및 데이터 페치 유닛과 데이터 메모리간의 상호작용을 설명하기 위해 도시한 도면이다.
이하에서는 첨부한 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 한다. 그러나 본 발명의 실시예들은 여러 가지 다양하고 상이한 형태로 구현될 수 있다. 따라서 본 명세서에 개시된 실시예들이 여기에서 설명하는 실시예들로 한정되는 것은 아니다. 또한, 첨부된 도면은 본 명세서에 개시된 실시 예들을 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 명세서에 개시된 기술적 사상이 제한되지 않는다. 본 발명의 실시예들이 가진 기술적 사상은 여기에 기재된 실시예들의 기술적 사상 및 기술 범위에 포함되는 모든 변경물, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 그리고, 도면에서 본 발명의 실시예들을 명확하게 설명하기 위한 설명과 관계없는 부분은 생략하였으며, 도면에 나타난 각 구성요소의 크기, 형태, 형상은 다양하게 변형될 수 있고, 동일/유사한 부분에 대해서는 동일/유사한 도면 부호를 붙였다.
이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈", "유닛", “프로세서”, “엔진” 및 “어레이” 등은 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다. 또한, 본 명세서에 개시된 실시예들을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 실시예들의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략하였다.
본 명세서 전체에서, 어떤 부분이 다른 부분과 "연결(접속, 접촉 또는 결합)"되어 있다고 할 때, 이는 "직접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우뿐만 아니라, 그 중간에 다른 무엇인가를 사이에 두고 "간접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우 또는 “전기적으로 연결(접속, 접촉 또는 결합)”된 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함(구비 또는 마련)"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 “포함(구비 또는 마련)”할 수 있다는 것을 의미한다.
본 명세서에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명의 실시예들을 한정하려는 의도가 아니다. 여기에 기재된 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함하며, 분산되어 실시되는 구성요소들은 특별한 제한이 있지 않는 한 결합된 형태로 실시될 수도 있다.
또한, 본 명세서에서 사용되는 제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 실시예들의 기술 범위를 벗어나지 않으면서 제1구성요소는 제2구성요소로 명명될 수 있고, 유사하게 제2구성요소도 제1구성 요소로 명명될 수 있다.
또한, 본 명세서에서 특별히 다르게 정의하지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본원에 개시된 특정 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 또는 협소하거나 형식적인 의미로 해석되지 아니한다.
도 1은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100)(neural network processing system)의 구성을 개략적으로 도시한 도면이다.
도 1을 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100)은 중앙처리유닛(Central Processing Unit, CPU)(110)과 컴퓨팅 모듈(computing module)(160)을 포함한다.
중앙처리유닛(110)은 컴퓨팅 모듈(160)을 포함한 시스템 내의 다른 구성요소에 다양한 명령을 내리는 호스트 역할 및 기능을 수행하도록 구성된다. 중앙처리유닛(110)은 저장소(120)와 연결되어 있을 수 있고, 내부에 별도의 저장소를 구비할 수도 있다. 수행 기능에 따라 중앙처리유닛(110)은 호스트(host)로, 중앙처리유닛(110)과 연결된 저장소(120)는 호스트 메모리(host memory)로 명명될 수 있다.
컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령을 전송 받아 연산과 같은 특정 기능을 수행하도록 구성된다. 또한, 컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령에 따라 인공 신경망에서의 프로세싱을 수행하도록 구성되는 적어도 하나 이상의 프로세싱 유닛(processing unit)(161)을 포함한다. 예를 들어, 컴퓨팅 모듈(160)은 프로세싱 유닛(161)을 4개 내지 4096개를 구비하고 있을 수 있으나, 반드시 이에 제한되는 것은 아니다. 즉, 컴퓨팅 모듈(160)은 4개 미만 또는 4096개 초과의 프로세싱 유닛(161)을 구비할 수도 있다.
컴퓨팅 모듈(160)도 역시 저장소(170)와 연결되어 있을 수 있고, 내부에 별도의 저장소를 구비할 수도 있다. 컴퓨팅 모듈(160)이 구비하는 프로세싱 유닛(161)은 아래에서 도 2를 참조하여 더욱 상세히 설명하도록 한다.
저장소들(120; 170;)은 DRAM일 수 있으나, 반드시 이에 제한되는 것은 아니며, 데이터를 저장하기 위한 저장소의 형태라면 어떠한 형태로도 구현될 수 있다.
다시, 도 1을 참조하면, 뉴럴 네트워크 프로세싱 시스템(100)은 호스트 인터페이스(Host I/F)(130), 커맨드 프로세서(command processor)(140), 및 메모리 컨트롤러(memory controller)(150)를 더 포함할 수 있다.
호스트 인터페이스(130)는 중앙처리유닛(110)과 컴퓨팅 모듈(160)을 연결하도록 구성되며, 중앙처리유닛(110)과 컴퓨팅 모듈(160)간의 통신이 수행되도록 한다.
커맨드 프로세서(140)는 호스트 인터페이스(130)를 통해 중앙처리유닛(110)으로부터 명령을 수신하여 컴퓨팅 모듈(160)에 전달하도록 구성된다.
메모리 컨트롤러(150)는 중앙처리유닛(110)과 컴퓨팅 모듈(160) 각각 또는 서로간의 데이터 전송 및 데이터 저장을 제어하도록 구성된다. 예컨대, 메모리 컨트롤러(150)는 프로세싱 유닛(161)의 연산 결과 등을 컴퓨팅 모듈(160)의 저장소(170)에 저장하도록 제어할 수 있다.
구체적으로, 호스트 인터페이스(130)는 컨트롤 상태(control status) 레지스터를 구비할 수 있다. 호스트 인터페이스(130)는 컨트롤 상태(control status) 레지스터를 이용하여, 중앙처리유닛(110)에게 컴퓨팅 모듈(160)의 상태 정보를 제공하고, 커맨드 프로세서(140)로 명령을 전달할 수 있는 인터페이스를 제공한다. 예컨대, 호스트 인터페이스(130)는 중앙처리유닛(110)으로 데이터를 전송하기 위한 PCIe 패킷을 생성하여 목적지로 전달하거나, 또는 중앙처리유닛(110)으로부터 전달받은 패킷을 지정된 곳으로 전달할 수 있다.
호스트 인터페이스(130)는 패킷을 중앙처리유닛(110)의 개입 없이 대량으로 전송하기 위해 DMA (Direct Memory Access) 엔진을 구비하고 있을 수 있다. 또한, 호스트 인터페이스(130)는 커맨드 프로세서(140)의 요청에 의해 저장소(120)에서 대량의 데이터를 읽어 오거나 저장소(120)로 데이터를 전송할 수 있다.
또한, 호스트 인터페이스(130)는 PCIe 인터페이스를 통해 접근 가능한 컨트롤 상태 레지스터를 구비할 수 있다. 본 실시예에 따른 시스템의 부팅 과정에서 호스트 인터페이스(130)는 시스템의 물리적인 주소를 할당 받게 된다(PCIe enumeration). 호스트 인터페이스(130)는 할당 받은 물리적인 주소 중 일부를 통해 컨트롤 상태 레지스터에 로드, 저장 등의 기능을 수행하는 방식으로 레지스터의 공간을 읽거나 쓸 수 있다. 호스트 인터페이스(130)의 레지스터들에는 호스트 인터페이스(130), 커맨드 프로세서(140), 메모리 컨트롤러(150), 그리고, 컴퓨팅 모듈(160)의 상태 정보가 저장되어 있을 수 있다.
도 1에서는 메모리 컨트롤러(150)가 중앙처리유닛(110)과 컴퓨팅 모듈(160)의 사이에 위치하지만, 반드시 그러한 것은 아니다. 예컨대, 중앙처리유닛(110)과 컴퓨팅 모듈(160)은 각기 다른 메모리 컨트롤러를 보유하거나, 각각 별도의 메모리 컨트롤러와 연결되어 있을 수 있다.
상술한 뉴럴 네트워크 프로세싱 시스템(100)에서, 이미지 판별과 같은 특정 작업은 소프트웨어로 기술되어 저장소(120)에 저장되어 있을 수 있고, 중앙처리유닛(110)에 의해 실행될 수 있다. 중앙처리유닛(110)은 프로그램 실행 과정에서 별도의 저장 장치(HDD, SSD 등)에서 뉴럴 네트워크의 가중치를 저장소(120)로 로드하고, 이것을 재차 컴퓨팅 모듈(160)의 저장소(170)로 로드할 수 있다. 이와 유사하게 중앙처리유닛(110)은 이미지 데이터를 별도의 저장 장치에서 읽어와 저장소(120)에 로드하고, 일부 변환 과정을 수행한 뒤 컴퓨팅 모듈(160)의 저장소(170)에 저장할 수 있다.
이후, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 저장소(170)에서 가중치와 이미지 데이터를 읽어 딥러닝의 추론 과정을 수행하도록 컴퓨팅 모듈(160)에 명령을 내릴 수 있다. 컴퓨팅 모듈(160)의 각 프로세싱 유닛(161)은 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행할 수 있다. 추론 과정이 완료된 뒤 결과는 저장소(170)에 저장될 수 있다. 중앙처리유닛(110)은 해당 결과를 저장소(170)에서 저장소(120)로 전송하도록 커맨드 프로세서(140)에 명령을 내릴 수 있으며, 최종적으로 사용자가 사용하는 소프트웨어로 그 결과를 전송할 수 있다.
도 2는 도 1에 도시된 프로세싱 유닛(161)의 세부 구성을 더욱 구체적으로 설명하기 위한 도면이다.
도 2를 참조하면, 본 실시예에 따른 프로세싱 유닛(200)은 인스트럭션 메모리(instruction memory)(210), 데이터 메모리(data memory)(220), 데이터 플로우 엔진(data flow engine)(240), 컨트롤 플로우 엔진(control flow engine)(250) 및 수행 유닛(functional unit)(280)을 포함한다. 또한, 프로세싱 유닛(200)은 라우터(router)(230), 레지스터 파일(260), 그리고, 데이터 페치 유닛(data fetch unit)(270)을 더 포함할 수 있다.
인스트럭션 메모리(210)는 하나 이상의 태스크(task)를 저장하도록 구성된다. 태스크는 하나 이상의 인스트럭션(instruction)으로 구성될 수 있다. 인스트럭션은 명령어 형태의 코드(code)일 수 있으나, 반드시 이에 제한되는 것은 아니다. 인스트럭션은 컴퓨팅 모듈(160)과 연결된 저장소(170), 컴퓨팅 모듈(160) 내부에 마련된 저장소 및 중앙처리유닛(110)과 연결된 저장소(120)에 저장될 수도 있다.
본 명세서에서 설명되는 태스크는 프로세싱 유닛(200)에서 실행되는 프로그램의 실행 단위를 의미하고, 인스트럭션은 컴퓨터 명령어 형태로 형성되어 태스크를 구성하는 요소이다. 인공 신경망에서의 하나의 노드는f(Σ wi x xi) 등과 같은 복잡한 연산을 수행하게 되는데, 이러한 연산이 여러개의 태스크들에 의해 나눠져서 수행될 수 있다. 에컨대, 하나의 태스크로 인공 신경망에서의 하나의 노드가 수행하는 연산을 모두 수행할 수 있고, 또는 인공 신경망에서의 다수의 노드가 수행하는 연산을 하나의 태스크를 통해 연산하도록 할 수도 있다. 또한 위와 같은 연산을 수행하기 위한 명령어는 인스트럭션으로 구성될 수 있다.
이해의 편의를 위해 태스크가 복수개의 인스트럭션들로 구성되고 각 인스트럭션은 컴퓨터 명령어 형태의 코드로 구성되는 경우를 예로 든다. 이 예시에서 하기한 데이터 플로우 엔진(240)은 각자 실행에 필요한 데이터가 준비된 태스크들의 데이터 준비 완료를 체크한다. 이후, 데이터 플로우 엔진(240)은 데이터 준비가 완료된 순서대로 태스크의 인덱스를 페치 준비 큐에 전송하며(태스크의 실행을 시작), 페치 준비 큐, 페치 블록, 러닝 준비 큐에 순차적으로 태스크의 인덱스를 전송한다. 또한, 하기한 컨트롤 플로우 엔진(250)의 프로그램 카운터(252)는 태스크가 보유한 복수개의 인스트럭션들을 순차적으로 실행하여 각 인스트럭션의 코드를 분석하며, 이에 따라 수행 유닛(280)에서의 연산이 수행된다. 본 명세서에서는 이러한 과정들을 통틀어서 “태스크를 실행한다”고 표현한다. 또한, 데이터 플로우 엔진(240)에서는 “데이터를 체크”, “데이터를 로드”, “컨트롤 플로우 엔진에 태스크의 실행을 지시”, “태스크의 실행을 시작”, “태스크 실행을 진행” 등의 절차가 이루어지고, 컨트롤 플로우 엔진(250)에 따른 과정들은 “태스크들을 실행하도록 제어한다” 또는 “태스크의 인스트럭션을 실행한다”라고 표현한다. 또한, 프로그램 카운터(252)에 의해 분석된 코드에 따른 수학적 연산은 하기한 수행 유닛(280)이 수행할 수 있으며, 수행 유닛(280)이 수행하는 작업을 본 명세서에서는 “연산”이라고 표현한다.
데이터 메모리(220)는 태스크들과 연관된 데이터(data)를 저장하도록 구성된다. 여기서, 태스크들과 연관된 데이터는 태스크의 실행 또는 태스크의 실행에 따른 연산에 사용되는 입력 데이터, 출력 데이터, 가중치 또는 활성화값(activations)일 수 있으나, 반드시 이에 제한되는 것은 아니다.
라우터(230)는 뉴럴 네트워크 프로세싱 시스템(100)을 구성하는 구성요소들 간의 통신을 수행하도록 구성되며, 뉴럴 네트워크 프로세싱 시스템(100)을 구성하는 구성요소들 간의 중계 역할을 수행한다. 예컨대, 라우터(230)는 프로세싱 유닛들 간의 통신 또는 커맨드 프로세서(140)와 메모리 컨트롤러(150) 사이의 통신을 중계할 수 있다. 이러한 라우터(230)는 네트워크 온 칩(Network on Chip, NOC) 형태로 프로세싱 유닛(200) 내에 마련될 수 있다.
데이터 플로우 엔진(240)은 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진(250)에 상기 태스크들의 실행을 지시하도록 구성된다. 컨트롤 플로우 엔진(250)은 데이터 플로우 엔진(240)으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성된다. 또한, 컨트롤 플로우 엔진(250)은 태스크들의 인스트럭션을 실행함에 따라 발생하는 더하기, 빼기, 곱하기, 나누기와 같은 계산을 수행할 수도 있다.
데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)에 대해서는 아래에서 더욱 상세하게 설명하도록 한다.
레지스터 파일(260)은 프로세싱 유닛(200)에 의해 빈번하게 사용되는 저장 공간으로서, 프로세싱 유닛(200)에 의해 코드들이 실행되는 과정에서 사용되는 레지스터를 하나 이상 포함한다. 예컨대, 레지스터 파일(260)은 데이터 플로우 엔진(240)이 태스크를 실행하고 컨트롤 플로우 엔진(250)이 인스트럭션을 실행함에 따라 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성된다.
데이터 페치 유닛(270)은 컨트롤 플로우 엔진(250)에 의해 실행되는 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)로부터 수행 유닛(280)에 페치하도록 구성된다. 또한, 데이터 페치 유닛(270)은 수행 유닛(280)이 구비한 복수개의 연산 모듈(281) 각각에 동일하거나 각기 다른 연산 대상 데이터를 페치할 수 있다.
수행 유닛(280)은 컨트롤 플로우 엔진(250)이 실행하는 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되며, 실제 연산을 수행하는 연산 모듈(computation module)(281)을 하나 이상 포함하도록 구성된다. 연산 모듈(281)들은 각각 더하기, 빼기, 곱셈, 곱셈 누적(multiply and accumulate, MAC)과 같은 수학적 연산을 수행하도록 구성된다. 수행 유닛(280)은 연산 모듈(281)들이 특정 단위 간격 또는 특정 패턴을 이룬 형태로 형성될 수 있다. 이와 같이 연산 모듈(281)들이 어레이 형태로 형성되는 경우 어레이 형태의 연산 모듈(281)들은 병렬적으로 연산을 수행하여 복잡한 행렬 연산과 같은 연산들을 일시에 처리할 수 있다.
도 2에서는 수행 유닛(280)은 컨트롤 플로우 엔진(250)과 분리된 형태로 도시되어 있으나, 수행 유닛(280)이 컨트롤 플로우 엔진(250)에 포함된 형태로 프로세싱 유닛(200)이 구현될 수 있다.
수행 유닛(280)의 연산에 따른 결과 데이터는 컨트롤 플로우 엔진(250)에 의해 데이터 메모리(220)에 저장될 수 있다. 여기서, 데이터 메모리(220)에 저장된 결과 데이터는 해당 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용될 수 있다. 예컨대, 제1 프로세싱 유닛의 수행 유닛의 연산에 따른 결과 데이터는 제1 프로세싱 유닛의 데이터 메모리에 저장될 수 있고, 제1 프로세싱 유닛의 데이터 메모리에 저장된 결과 데이터는 제2 프로세싱 유닛에 이용될 수 있다.
상술한 뉴럴 네트워크 프로세싱 시스템(100) 및 여기에 포함되는 프로세싱 유닛(200)을 이용하여 인공 신경망에서의 데이터 처리 장치 및 방법, 인공 신경망에서의 연산 장치 및 방법을 구현할 수 있다.
도 3은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100) 및 여기에 포함된 프로세싱 유닛(200)에 의해 수행되는 뉴럴 네트워크 프로세싱 방법을 설명하는 흐름도이다.
도 3을 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 상태를 초기화하는 단계(s310). 중앙처리유닛(110)이 컴퓨팅 모듈(160)이 특정 기능을 수행하도록 특정 구성요소에 명령을 전송하는 단계(s320), 컴퓨팅 모듈(160)이 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행하는 단계(s330), 그리고, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장하는 단계(s340)를 포함할 수 있다. s310 내지 s340의 단계에 대한 더욱 상세한 설명은 다음과 같다.
본 실시예의 뉴럴 네트워크 프로세싱 방법에 따르면, 먼저, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 상태를 초기화할 수 있다(s310). 이 때, 중앙처리유닛(110)은 호스트 인터페이스(130)를 통해 커맨드 프로세서(140)에 컴퓨팅 모듈(160) 상태를 초기화하도록 명령할 수 있다.
다음, 중앙처리유닛(110)은 컴퓨팅 모듈(160)이 특정 기능을 수행하도록 특정 구성요소에 명령을 전송할 수 있다(s320). 예컨대, 중앙처리유닛(110)은 저장소(120)에 있는 하나 이상의 인스트럭션(instruction)이 하나 이상의 프로세싱 유닛(200)의 인스트럭션 메모리(210)에 로드(load)되도록 하는 명령을 커맨드 프로세서(140)에 전송할 수 있다.
여기서, 중앙처리유닛(110)은 저장소(120)에 있는 데이터를 메모리 컨트롤러(150)를 통해 컴퓨팅 모듈(160)의 저장소(170)에 저장하도록 커맨드 프로세서(140)에 명령할 수 있다. 또한, 중앙처리유닛(110)은 하나 이상의 가중치 및 입력값의 어드레스(address) 중 적어도 어느 하나 이상을 프로세싱 유닛(200)의 인스트럭션 메모리(210)에 저장된 태스크에 전달하여 컴퓨팅 모듈(160)이 프로세싱을 시작하도록 명령할 수도 있다. 이 때, 하나 이상의 가중치 및 입력값의 어드레스(address)는 컴퓨팅 모듈(160)의 저장소(170) 또는 중앙처리유닛(110)의 저장소(120)에 저장되어 있을 수 있다.
다음, 컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행한다(s330). 여기서, 프로세싱 유닛(200)은 주어진 하나 이상의 인스트럭션에 따른 데이터 처리와 연산을 수행하고, 그 결과를 메모리 컨트롤러(150)를 통해 컴퓨팅 모듈(160)의 저장소(170)에 저장할 수 있다.
다음, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장한다(s340). 저장 과정은 중앙처리유닛(110)이 커맨드 프로세서(140)에 명령하는 것을 통해 이루어질 수 있다.
상술한 s310 내지 s340의 단계들은 반드시 순차적으로 실행될 필요가 없으며, 각 단계들의 순서는 위와 다를 수 있고, 각 단계들은 거의 동시에 진행될 수도 있다.
또한, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 상태를 초기화하는 단계(s310)와, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장하는 단계(s340)는 반드시 필요한 과정이 아니므로 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 s320단계와 s330단계만을 포함한 형태로 구현될 수도 있다.
도 4는 도 2에 도시된 프로세싱 유닛(200)을 이용한 뉴럴 네트워크 프로세싱 방법을 설명하는 흐름도이다.
도 2 및 도 4를 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 데이터 플로우 엔진(240)이 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진(250)에 상기 태스크들의 실행을 지시하는 단계(s410), 컨트롤 플로우 엔진(250)이 데이터 플로우 엔진(240)으로부터 지시 받은 순서대로 태스크의 하나 이상의 인스트럭션을 실행을 제어하는 단계(s420) 및 수행 유닛(280)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계(s440)를 포함한다.
s420 단계와 s440 단계 사이에 데이터 페치 유닛(270)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)로부터 수행 유닛(280)에 페치하는 단계(s430)와, s440단계 이후에, 컨트롤 플로우 엔진(250)이 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장하는 단계(s450)를 더 포함할 수 있다.
구체적으로, s410 단계와 같이, 하나의 태스크 자체는 데이터 플로우 방식에 따라 자신의 인스트럭션을 실행하는데 필요한 모든 데이터(예컨대, 피연산자)를 다른 구성요소로부터 전달 받아 실행할 준비가 완료되면 기타 다른 태스크들의 데이터 준비 여부와 상관 없이 자신의 실행을 시작하여 다음 프로세싱 절차를 진행할 수 있다.
반면, 상술한 s420 단계와 같이, 각 태스크들의 인스트럭션들은 폰 노이만 방식(컨트롤 플로우 방식)에 따라 컨트롤 플로우 엔진(250)의 프로그램 카운터(252)에 의해 순차적으로 실행될 수 있다.
상술한 데이터 플로우 방식이란 프로세싱을 수행하는 요소들이 별도의 순서에 구속되지 않고 자신의 연산에 필요한 데이터들만 준비되면 각자 연산을 실행하는 방식을 의미한다. 또한, 폰 노이만 방식(컨트롤 플로우 방식)이란 연산 대상체들이 기 정해진 연산 순서에 따라 연산을 수행하는 것을 의미한다.
이해의 편의를 위해 0번 인덱스(index)를 가진 태스크, 1번 인덱스를 부여 받은 태스크 및 2번 인덱스를 부여 받은 태스크가 존재하는 경우를 예로 든다. 이 예시에서, 데이터 플로우 방식에 따라 데이터 플로우 엔진(240)은 2번 태스크가 자신의 실행에 필요한 데이터가 준비된 경우 0번 테스크 및 1번 태스크의 실행에 필요한 데이터가 준비되었는지 여부에 관계 없이 2번 태스크의 실행을 시작한다(도 7에 도시된 페치 준비 큐(241)에 태스크의 인덱스를 전송한다). 같은 예시에서 페치 준비 큐(241)는 2번 태스크의 인덱스, 1번 태스크의 인덱스 및 0번 태스크의 인덱스를 순차적으로 수신하여, 처음으로 2번 태스크의 인덱스를 도 7에 도시된 페치 블록(242)으로 전송하여 다음 절차를 진행하고 두번째로 1번 태스크의 인덱스를 도 7에 도시된 페치 블록(242)으로 전송하며, 마지막으로 0번 태스크의 인덱스를 도 7에 도시된 페치 블록(242)으로 전송하여 태스크 실행을 진행한다. 또한, 같은 예시에서, 폰 노이만 방식에 따라 컨트롤 플로우 엔진(250)은 2번 태스크의 인스트럭션들을 모두 실행한 후, 1번 태스크의 모든 인스트럭션들을 실행하며, 마지막으로 0번 태스크의 인스트럭션들을 모두 실행한다.
이와 관련하여, 별개의 수많은 연산을 수행하는 노드들을 포함하는 뉴럴 네트워크는 연산 효율을 높이기 위해 병렬 처리 구조에 유리한 데이터 플로우 방식을 활용한 연산 처리 구조를 채택하는 것이 자연스럽다. 폰 노이만 방식과 달리 데이터 플로우 방식을 뉴럴 네트워크의 연산에 적용하면, 비정규화된 병렬 연산 처리를 가능하게 하여 연산 효율이 높아진다. 하지만, 뉴럴 네트워크의 연산 처리 구조가 온전히 데이터 플로우 방식으로만 설계된다면, 폰 노이만 방식에 따라 순서적으로 실행되어야 유리한 연산의 경우에 일일이 연산에 필요한 데이터 준비 여부를 체크하는데 상당한 시간이 소요되므로, 불필요한 오버헤드(overhead)를 발생시키는 문제점이 있다.
그러므로, 본 발명의 실시예들에서, 데이터 플로우 엔진(240)은 데이터 플로우 방식을 이용하여 특정 태스크가 필요로 하는 모든 데이터가 준비 상태가 되면 다른 태스크들의 준비 상태 여부나 순서에 관계없이 해당 태스크를 실행을 시작한다. 결과적으로, 단일 태스크의 실행 여부는 다른 태스크들의 데이터 준비 여부와 관계 없이 독립적으로 판단되므로, 전체적인 프로세싱의 관점에서 보면 태스크들의 프로세싱 진행 속도 및 실행 속도를 높일 수 있다.
또한, 본 발명의 실시예들에서, 데이터 플로우 엔진(240) 실행이 시작된 태스크들의 인덱스를 각 블록에 순차적으로 전송하여 태스크 실행을 진행하고 태스크 실행을 컨트롤 플로우 엔진에 지시한다. 컨트롤 플로우 엔진(250)은 컨트롤 플로우 방식을 이용하여 태스크들의 실행 순서에 따라 제어를 통해 태스크 내에서의 인스트럭션들이 실행되도록 한다. 따라서, 본 실시예에 따른 데이터 플로우 엔진(240) 및 컨트롤 플로우 엔진(250)을 이용하면, 데이터 플로우 방식에 따라 모든 태스크 진행 절차들과, 태스크 내에서의 인스트럭션들이 실행될 때 일일이 인스트럭션들의 데이터 준비 여부를 체크함에 따라 발생할 수 있는 오버헤드를 방지할 수 있다.
이와 같이, 본 발명의 실시예에 따르면, 데이터 플로우 방식과 컨트롤 플로우 방식을 혼합 적용하여 인공 신경망에서의 연산을 수행함으로써, 비정규화된 연산에 불리한 컨트롤 플로우 방식의 한계를 극복하고, 데이터 플로우 방식에서 발생할 수 있는 오버헤드를 없앨 수 있다. 이에 따라, 인공 신경망에서의 프로세싱 속도를 향상시킬 수 있고, 딥러닝의 학습, 훈련 및 추론 과정에 소모되는 시간을 줄일 수 있다.
도 4에 도시된 s410 내지 s450의 단계들은 도 3에 도시된 컴퓨팅 모듈(160)이 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행하는 단계(s330)에 포함되는 세부 과정에 해당할 수 있다.
도 5는 도 2에 도시된 인스트럭션 메모리(210)와 데이터 메모리(220)를 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 2를 참조하여 설명한 바와 같이, 인스트럭션 메모리(210)는 하나 이상의 인스트럭션이 저장되는 공간으로서, 복수개의 인스트럭션들로 구성되는 태스크들(211)이 저장될 수 있다.
데이터 메모리(220)는 동적 메모리(dynamic memory)(221)와 정적 메모리(static memory)(222)를 포함한다. 동적 메모리(221)는 컨트롤 플로우 엔진(250)에 의해 현재 실행되는 태스크에 동적으로 할당되는 메모리이다. 정적 메모리(222)는 태스크가 실행되고 완료되는 것과 무관하게 프로그램이 데이터 메모리(220)에 로드될 때 할당되어 있는 메모리이다.
한편, 태스크들(211) 각각은 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받은 소정의 동적 메모리 공간을 사용한다. 또한, 태스크들(211) 각각은 해제되지 않고 사용되어야 하는 데이터를 정적 메모리(222)의 일부 공간으로부터 할당 받아 사용할 수 있다.
동적으로 할당 받은 메모리 공간을 사용하는 태스크는 그 동적 메모리 공간에 있는 데이터를 다른 태스크에서도 사용할 수 있도록 다른 태스크들에게 전달할 수 있으며, 이 때 참조 계수의 숫자가 증가하게 된다. 참조 계수란 동적으로 할당 받은 메모리를 쓰는 태스크의 데이터를 참조하여 사용하는 태스크의 수를 의미한다. 데이터를 전달 받은 태스크가 데이터의 사용을 마쳤거나(즉, 태스크의 연산이 완료되었거나), 데이터를 복사해 가는 경우 참조 계수의 숫자는 감소한다.
예컨대, 태스크는 데이터 플로우 엔진(240)에 의해 필요한 동적 메모리 공간을 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받을 수 있으며, 동적으로 할당된 메모리는 다른 태스크로 값(value) 또는 레퍼런스(Reference) 형태로 전달될 수 있다. 이 때, 메모리를 전달 받은 태스크는 해당 메모리를 사용 후 응답(ack)을 처음 동적 메모리(221)로부터 할당 받은 태스크에 전달하여 참조 계수를 감소시키고, 이에 따라, 데이터 메모리(220)는 참조 계수가 0이 되는 시점에 태스크에 동적으로 할당된 메모리를 해제할 수 있다.
이와 같이, 동적 메모리(221)의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다.
도 6은 도 4에 도시된 뉴럴 네트워크 프로세싱 방법의 세부 절차들의 구현예를 셜명하기 위해 도시한 도면이다.
도 4 및 도 6을 참조하면, 도 4에 도시된 s410 단계는 데이터 플로우 엔진(240)이 인스트럭션 메모리(210)로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정(s601), 데이터 플로우 엔진(240)이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정(s602), 그리고, 데이터 플로우 엔진(240)이 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진(250)에 상기 태스크들의 실행을 지시하는 과정(s603)을 포함할 수 있다. 데이터 플로우 엔진(240)이 컨트롤 플로우 엔진(250)에 지시하는 과정은 컨트롤 플로우 엔진(250)이 태스크들의 실행을 제어하도록 태스크의 실행을 시작하는 과정을 의미할 수 있다.
또한, s410 단계는 페치 준비 큐(241)가 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정(s604), 페치 준비 큐(241)가 페치 블록(242)으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 페치 블록(242)은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 데이터 메모리(220)에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터 메모리(220)로 로드하는 과정(s605), 러닝 준비 큐(243)가 페치 블록(242)에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정(s606)을 포함할 수 있다.
이후, s420 단계는 러닝 준비 큐(243)가 러닝 블록(251)으로 태스크들의 인덱스를 순차적으로 전송하면(s607), 프로그램 카운터(252)가 러닝 블록(251)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정(s608)을 포함할 수 있다. s607 과정에서 러닝 블록(251)은 러닝 준비 큐(243)로부터 러닝 준비 큐(243)에 마련된 태스크의 인덱스를 순차적으로 전송 받게 되고, 이어서 s608과정에서 프로그램 카운터(252)는 러닝 블록(251)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행한다.
도 4에 도시된 뉴럴 네트워크 프로세싱 방법을 참고하면, 상술한 s601 내지 s608의 과정들이 진행된 후 데이터 페치 유닛(270)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)에서 수행 유닛(280)에 페치하는 단계(s430)와, 수행 유닛(280)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계(s440) 및 컨트롤 플로우 엔진(250)이 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장하는 단계(s450)가 진행될 수 있다.
추가적으로, 수행 유닛(280)의 연산에 따른 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛은 수행 유닛(280)의 연산에 따른 결과 데이터를 로드하여 자신의 프로세싱에 사용할 수 있다.
도 7은 도 2에 도시된 데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)의 세부 구성들을 더욱 상세하게 설명하기 위해 도시한 도면이다.
도 6 및 도 7을 함께 참조하면, 데이터 플로우 엔진(240)은 태스크들(인덱스 0, 1, 2 ..)에 대한 상태를 관리한다. 예컨대, 데이터 플로우 엔진(240)은 인스트럭션 메모리(210)로부터 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고(s601), 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크한다(s602)). 여기서, 데이터 플로우 엔진(240)은 태스크들의 실행에 필요한 데이터의 어드레스를 별도의 저장소로부터 전송 받을 수 있다.
다음, 데이터 플로우 엔진(240)은 하나의 태스크 내에서 필요한 모든 데이터가 준비 상태가 되면, 페치 준비 큐(ready to fetch queue)(241)에 준비 상태가 된 해당 태스크의 정보를 전송하며(s603). 여기서, 데이터 플로우 엔진(240)은 페치 준비 큐(241)로 준비 완료 상태 태스크의 인덱스만을 전송할 수 있다.
다음, 데이터 플로우 엔진(240)은 페치 준비 큐(241)에 있는 태스크들의 실행 절차를 진행시킨다. 데이터 플로우 엔진(240)은 페치 준비 큐(241)의 순서상 가장 앞에 있는 태스크(예컨대, 도 7에서 가장 아래의 큐에 배치된 태스크)의 인덱스를 페치 블록(242)으로 전송한다. 다음, 데이터 플로우 엔진(240)은 페치 블록(242)에 전송된 인덱스에 해당하는 태스크가 필요로 하는 메모리를 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받는다. 다음, 데이터 플로우 엔진(240)은 동적 메모리(221)의 소정의 공간이 할당된 태스크의 데이터 로드를 수행한다(s604). 여기서, 데이터 로드는 데이터 플로우 엔진(240)이 태스크가 실행되기 위해 필요로 하는 데이터를 데이터 메모리(220)에 있는지 확인하여 가져오거나, 해당 데이터가 데이터 메모리(220)에 없는 경우 외부 장치(다른 프로세싱 유닛 또는 저장소 등)에서 해당 데이터를 데이터 메모리(220)로 로드하는 것을 의미한다.
다음, 데이터 플로우 엔진(240)은 페치 블록(242)에서 데이터 로드가 완료된 태스크의 인덱스를 러닝 준비 큐(243)에 전송한다(s605), 그러면, 러닝 준비 큐(243)는 러닝 준비 큐(243)에 있는 태스크들의 인덱스를 순서대로 러닝 블록(251)으로 전달한다(s606), 이후, 컨트롤 플로우 엔진(250)에 의해 러닝 블록(251)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션은 프로그램 카운터(252)에 의해 폰 노이만 방식에 따라 순차적으로 실행된다(s607).
도 7에 도시된 페치 준비 큐(241) 및 러닝 준비 큐(243)에는 다수의 태스크들이 할당될 수 있으므로, 페치 준비 큐(241) 및 러닝 준비 큐(243)는 태스크들이 할당되는 블록을 각각 1개 내지 128개 또는 그 이상 구비할 수 있다.
이해의 편의를 위해, 명령어 형태의 코드(곱하기, 더하기 등)로 구성된 다수의 인스트럭션들을 포함하고 있고 인덱스가 0번인 태스크가 존재하고, 인스트럭션 메모리(210)의 1000, 1004, 1008 등의 번지 수에 해당하는 공간에 각각 0번 태스크의 인스트럭션들이 저장되어 있는 경우를 예로 든다.
위 예에서, 0번 태스크가 필요로 하는 모든 데이터가 준비되면 데이터 플로우 엔진(240)은 0번 태스크의 인덱스를 페치 준비 큐(241)로 전송하는 것을 시작으로 0번 태스크의 실행 절차를 진행한다. 데이터 플로우 엔진(240)에 의해 러닝 준비 큐(243)에 0번 태스크의 인덱스가 도달한 이후 러닝 준비 큐(243)에서 0번 태스크의 인덱스가 러닝 블록(251)으로 전송되면, 컨트롤 플로우 엔진(250)은 인스트럭션 메모리(210)의 1000번지에서 0번 태스크의 인스트럭션을 가져와서 실행하고, 그 다음 1004 및 1008번지에서 0번 태스크의 인스트럭션을 가져와서 실행한다. 이 때, 프로그램 카운터(252)에는 컨트롤 플로우 엔진(250)이 현재 실행하고 있는 번지수가 할당될 수 있다.
또한, 컨트롤 플로우 엔진(250)에 의해 실행된 인스트럭션들에 따른 연산 대상 데이터는 데이터 메모리(220)에 저장될 수 있다. 이후, 데이터 페치 유닛(270)은 연산 대상 데이터를 가져와 수행 유닛(280)에 마련된 하나 이상의 연산 모듈(281) 각각에 데이터를 페치할 수 있고, 연산 모듈(281)들은 연산 대상 데이터에 따른 수학적 연산을 수행할 수 있다.
이에 더하여, 컨트롤 플로우 엔진(250)은 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장할 수 있고, 이러한 결과 데이터는 추후 상기 결과 데이터를 필요로 하는 태스크에 이용될 수 있다. 또한, 데이터 플로우 엔진(240) 또는 다른 프로세싱 유닛의 데이터 플로우 엔진은 데이터 메모리(220)에 저장된 결과 데이터를 필요로 하는 태스크의 데이터 준비 여부를 체크할 수 있다.
위 내용을 참조하여, 본 발명의 일 실시예에 따라 데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)이 수행하는 일련의 과정들의 구체적인 구현예에 대해 설명하면 다음과 같다.
먼저, 프로세싱 유닛(200)은 외부(자신이 보유한 저장소, 자신과 연결된 외부의 저장소, 다른 프로세싱 유닛, 또는 커맨드 프로세서)로부터 데이터 정보 패킷을 전달받는다. 데이터 정보 패킷은 각각 목적지가 되는 태스크의 주소(또는 ID)와 피연산자 주소, 그리고 데이터의 소스 어드레스(source address) 중 적어도 어느 하나 이상을 포함할 수 있다. 프로세싱 유닛(200)의 데이터 플로우 엔진(240)은 전달받은 데이터 정보 패킷의 목적지에 해당하는 태스크의 피연산자 상태를 업데이트한다. 이와 같이, 데이터 플로우 엔진(240)은 태스크의 피연산자 상태, 데이터의 준비 상태 여부 및 데이터의 소스 어드레스를 관리할 수 있다.
다음, 데이터 플로우 엔진(240)은 데이터 정보 패킷을 전송받아 태스크의 피연산자 상태를 체크한다. 이후, 만약 그 태스크가 필요로 하는 모든 피연산자가 준비된 상태라면, 데이터 플로우 엔진(240)은 해당 태스크의 인덱스를 페치 준비 큐(241)에 전송하면서 태스크의 실행을 시작한다.
다음, 데이터 플로우 엔진(240)은 페치 준비 큐(241)의 순서상 가장 앞에 위치한 태스크의 인덱스를 팝(pop)하여 페치 블록(242)으로 전송한다. 또한, 데이터 플로우 엔진(240)은 페치 블록(242)에 전송된 인덱스에 해당하는 태스크가 필요로 하는 메모리를 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받는다. 여기서, 데이터 플로우 엔진(240)은 페치 블록(242)에 전송된 인덱스에 해당하는 태스크에 대한 데이터를 기 저장되어 있는 피연산자의 정보로부터 읽어올 수 있다. 피연산자의 정보에는 데이터의 소스 어드레스가 존재하므로, 데이터 플로우 엔진(240)은 데이터의 소스 어드레스로 읽기 요청(read request) 패킷을 전송한다. 읽기 요청 패킷은 소스 어드레스에 따라 다른 프로세싱 유닛 또는 컴퓨팅 모듈의 메모리 컨트롤러 또는 호스트의 메모리 컨트롤러로 전달될 수 있다. 또한, 데이터 플로우 엔진(240)은 판독한 소스 어드레스가 자신이 포함된 프로세싱 유닛인 경우 데이터 전송을 생략할 수 있다.
다음, 데이터 플로우 엔진(240)은 페치 블록(242)에 전송된 인덱스에 해당하는 태스크로 전송한 읽기 요청 패킷에 대한 읽기 응답(read response)을 받으면, 프로세싱 유닛(200)은 읽기 응답을 할당 받은 동적 메모리에 저장한다. 데이터 플로우 엔진(240)은 자신이 전송한 모든 읽기 요청 패킷에 대한 모든 읽기 응답을 받은 태스크의 인덱스를 러닝 준비 큐(243)에 전송한다. 이후 페치 블록(242)은 전술한 과정들을 반복 수행할 수 있다. 다음, 데이터 플로우 엔진(240)은 러닝 준비 큐(243)의 순서상 앞에 위치한 태스크의 인덱스를 팝하여, 러닝 블록(251)에 전송한다.
이후, 컨트롤 플로우 엔진(250)은 러닝 블록(251)에 전송된 인덱스에 해당하는 태스크에 대한 인스트럭션 메모리(210)의 어드레스를 데이터 플로우 엔진(240)으로부터 읽어와 프로그램 카운터(252)에 넣는다. 또한, 컨트롤 플로우 엔진(250)은 해당 태스크의 하나 이상의 인스트럭션을 인스트럭션 메모리(210)에서 읽어와 실행한다. 그리고, 프로그램 카운터(252)는 해당 태스크에 포함된 인스트럭션들의 수만큼 참조 계수를 증가시켜 해당 태스크의 모든 인스트럭션들을 실행한다. 실행 과정에서 컨트롤 플로우 엔진(250)은 각 태스크의 연산 결과를 데이터 메모리(220)에 저장할 수 있으며, 데이터 정보 패킷을 통해 데이터 메모리(220)에 저장된 연산 결과를 기 지정된 다음 연산 대상 태스크로 전달할 수 있다. 데이터 정보 패킷을 전달 받은 프로세싱 유닛은 상술한 과정들을 계속해서 수행할 수 있다.
상술한 과정들은 하나의 프로세싱 유닛을 기준으로 설명되었으나, 컴퓨팅 모듈(160)의 모든 프로세싱 유닛들은 상기한 과정들을 각각 수행할 수 있다. 또한, 상기한 과정들은 반드시 순차적으로 실행될 필요가 없으며, 거의 동시에 진행될 수도 있다.
도 8은 컨트롤 플로우 엔진(250)과 인스트럭션 메모리(210)간의 상호작용 및 데이터 페치 유닛(270)과 데이터 메모리(220)간의 상호작용을 설명하기 위해 도시한 도면이다.
도 8을 참조하면, 앞서 도 7을 참조하여 설명한 예에서 컨트롤 플로우 엔진(250)의 프로그램 카운터(252)가 인스트럭션 메모리(210)로부터 특정 번지수에 해당하는 인스트럭션의 명령어를 가져올 수 있음을 알 수 있다. 또한, 같은 예에서, 데이터 페치 유닛(270)이 데이터 메모리(220)에 저장된 태스크 실행에 따른 연산 대상 데이터를 수행 유닛(280)에 페치하고, 복수개의 연산 모듈(281)들 각각은 연산 대상 데이터에 따른 연산을 수행할 수 있음을 알 수 있다.
한편, 컨트롤 플로우 엔진(250)이 인스트럭션을 실행하는 과정에서 실행되는 태스크는 다른 태스크로 데이터를 전송할 수 있으며, 이 때 상술한 바와 같이 참조 계수가 증가할 수 있다. 이는 컨트롤 플로우 엔진(250)이 인스트럭션을 실행하는 과정에서 연산 결과가 발생하는데, 본 실시예에 따라 태스크들이 상호 간에 데이터를 주고 받을 때, 동적 메모리의 할당 및 해제를 하드웨어에서 지원함으로써 프로그래밍 모델을 간단하게 구성할 수 있도록 하기 위함이다.
예컨대, 순차적인 연산이 복수개의 태스크에 나누어 처리되도록 뉴럴 네트워크 프로세싱 시스템이 구현된 경우, 컨트롤 플로우 엔진(250)은 인스트럭션을 실행하는 과정에서 발생한 연산 결과를 다음 태스크가 받도록 하고, 연산 결과를 받은 태스크는 다음 연산을 수행하도록 수 있다. 컨트롤 플로우 엔진(250)이 태스크의 인스트럭션을 실행하는 과정에서 연산 결과가 나오면 그 즉시 연산 결과를 필요로 하는 다른 태스크에 전달하고, 연산 결과를 전달 받은 태스크는 다음 연산을 수행할 수 있으므로, 프로세싱 유닛(200)의 연산 처리 속도를 높일 수 있다.
또한, 본 발명의 실시예들에 따르면, 전체적인 프로세싱의 관점에서 태스크들의 프로세싱 진행 속도 및 실행 속도를 높이기 위해, 데이터 플로우 엔진이 태스크들의 데이터 준비 완료 여부를 체크하여 태스크들의 실행을 시작하는 단계까지는 데이터 플로우 방식을 사용한다. 또한, 본 발명의 실시예들에 따르면, 데이터 플로우 방식에 따른 오버헤드를 제거하기 위해 데이터 플로우 엔진 및 컨트롤 플로우 엔진에 의해 순차적인 진행이 필요한 태스크들의 실행을 제어하는 단계와 태스크의 인스트럭션들을 실행하는 단계에서는 폰 노이만 방식을 사용할 수 있다.
상술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.

Claims (33)

  1. 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 프로세싱 유닛에 있어서,
    하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리;
    상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리;
    상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하도록 구성되는 데이터 플로우 엔진;
    상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진; 및
    상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛.
  2. 제1항에 있어서,
    상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  3. 제1항에 있어서,
    상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  4. 제1항에 있어서,
    외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  5. 제1항에 있어서,
    상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  6. 제1항에 있어서,
    상기 데이터 메모리는 동적 메모리를 포함하며,
    상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  7. 제1항에 있어서,
    상기 데이터 플로우 엔진은,
    상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받아 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하되,
    데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록, 그리고, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐를 포함하여, 상기 러닝 준비 큐로부터 인덱스를 상기 컨트롤 플로우 엔진으로 전송하도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  8. 제7항에 있어서,
    상기 컨트롤 플로우 엔진은,
    상기 데이터 플로우 엔진의 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록; 및
    상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  9. 제1항에 있어서,
    상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
  10. 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서,
    (i) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 단계;
    (ii) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하는 단계; 및
    (iii) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법.
  11. 제10항에 있어서,
    상기 뉴럴 네트워크 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고,
    상기 뉴럴 네트워크 프로세싱 방법은 상기 (ii) 단계와 상기 (iii) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  12. 제10항에 있어서,
    상기 (iii) 단계 이후에, 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  13. 제10항에 있어서,
    상기 (i) 단계는,
    상기 데이터 플로우 엔진이, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정;
    상기 데이터 플로우 엔진이, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정; 및
    상기 데이터 플로우 엔진이, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  14. 제10항에 있어서,
    상기 데이터 플로우 엔진은 페치 준비 큐, 페치 블록 및 러닝 준비 큐를 포함하고, 상기 컨트롤 플로우 엔진은 러닝 블록 및 프로그램 카운터를 포함하며,
    상기 (i) 단계는, 상기 페치 준비 큐가 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터를 상기 데이터 메모리로 로드하는 과정, 그리고, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정을 포함하고,
    상기 (ii) 단계는, 상기 러닝 블록이 상기 러닝 준비 큐로부터 태스크들의 인덱스를 순차적으로 전송 받는 과정 및 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  15. 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 시스템에 있어서,
    중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 구비하는 컴퓨팅 모듈을 포함하고,
    상기 프로세싱 유닛은,
    하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리;
    상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리;
    상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하도록 구성되는 데이터 플로우 엔진;
    상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진; 및
    상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 연산 모듈을 하나 이상 구비하는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템.
  16. 제15항에 있어서,
    상기 프로세싱 유닛은
    상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  17. 제15항에 있어서,
    상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  18. 제16항에 있어서,
    상기 데이터 메모리에 저장된 결과 데이터는 상기 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  19. 제15항에 있어서,
    상기 중앙처리유닛과 상기 컴퓨팅 모듈을 연결하여 상기 중앙처리유닛과 상기 컴퓨팅 모듈간의 통신이 수행되도록 구성되는 호스트 인터페이스를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  20. 제15항에 있어서,
    상기 중앙처리유닛의 명령을 상기 컴퓨팅 모듈로 전달하도록 구성되는 커맨드 프로세서를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  21. 제15항에 있어서,
    상기 중앙처리유닛과 상기 컴퓨팅 모듈 각각의 데이터 전송 및 저장을 제어하도록 구성되는 메모리 컨트롤러를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  22. 제15항에 있어서,
    상기 프로세싱 유닛은
    외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터와, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  23. 제15항에 있어서,
    상기 데이터 메모리는 동적 메모리를 포함하며,
    상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  24. 제15항에 있어서,
    상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  25. 제15항에 있어서,
    상기 데이터 플로우 엔진은,
    상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받아 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하되,
    데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록과, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐를 포함하여, 상기 러닝 준비 큐로부터 인덱스를 상기 컨트롤 플로우 엔진으로 전송하도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  26. 제25항에 있어서,
    상기 컨트롤 플로우 엔진은,
    상기 데이터 플로우 엔진의 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록; 및
    상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
  27. 중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 포함하는 컴퓨팅 모듈을 포함하되, 상기 프로세싱 유닛은 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서,
    (1) 상기 중앙처리유닛이 상기 컴퓨팅 모듈에 명령을 전송하는 단계; 및
    (2) 상기 컴퓨팅 모듈이 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 단계를 포함하고,
    상기 (2) 단계는,
    (2-1) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 단계;
    (2-2) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 지시 받은 순서대로 태스크의 실행을 제어하는 단계; 및
    (2-3) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법.
  28. 제27항에 있어서,
    상기 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고,
    상기 뉴럴 네트워크 프로세싱 방법은 상기 (2-2) 단계와 상기 (2-3) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  29. 제27항에 있어서,
    상기 (2) 단계는, 상기 (2-3) 단계 이후에 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  30. 제29항에 있어서,
    상기 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛이 상기 결과 데이터를 로드하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  31. 제27항에 있어서,
    상기 (1) 단계 이전에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 상태를 초기화하는 단계와, 상기 (2) 단계 이후에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 연산에 따른 결과 데이터를 상기 중앙처리유닛의 저장소로 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  32. 제27항에 있어서,
    상기 (2-1) 단계는,
    상기 데이터 플로우 엔진이 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정;
    상기 데이터 플로우 엔진이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정; 및
    상기 데이터 플로우 엔진이, 데이터 준비가 완료된 태스크의 순서대로 태스크를 실행하는데 필요한 데이터를 로드하여 컨트롤 플로우 엔진에 상기 태스크들의 실행을 지시하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
  33. 제27항에 있어서,
    상기 데이터 플로우 엔진은 페치 준비 큐, 페치 블록 및 러닝 준비 큐를 포함하고, 상기 컨트롤 플로우 엔진은 러닝 블록 및 프로그램 카운터를 포함하며,
    상기 (2-1) 단계는, 상기 페치 준비 큐가 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터를 상기 데이터 메모리로 로드하는 과정, 그리고, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정을 포함하고,
    상기 (2-2) 단계는, 상기 러닝 블록이 상기 러닝 준비 큐로부터 태스크들의 인덱스를 순차적으로 전송 받는 과정 및 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
KR1020180131156A 2018-04-03 2018-10-30 뉴럴 네트워크 프로세서 KR102191408B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/KR2019/003613 WO2019194466A1 (ko) 2018-04-03 2019-03-28 뉴럴 네트워크 프로세서

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20180038840 2018-04-03
KR1020180038840 2018-04-03

Publications (2)

Publication Number Publication Date
KR20190116040A true KR20190116040A (ko) 2019-10-14
KR102191408B1 KR102191408B1 (ko) 2020-12-15

Family

ID=68171698

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020180059775A KR102162749B1 (ko) 2018-04-03 2018-05-25 뉴럴 네트워크 프로세서
KR1020180131156A KR102191408B1 (ko) 2018-04-03 2018-10-30 뉴럴 네트워크 프로세서

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020180059775A KR102162749B1 (ko) 2018-04-03 2018-05-25 뉴럴 네트워크 프로세서

Country Status (1)

Country Link
KR (2) KR102162749B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102480300B1 (ko) * 2022-05-25 2022-12-23 리벨리온 주식회사 뉴럴 프로세싱 장치 및 그의 잡 스케쥴링 방법
US11861401B2 (en) 2022-05-25 2024-01-02 Rebellions Inc. Neural processing device and method for job scheduling thereof

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11386947B2 (en) 2019-10-31 2022-07-12 SK Hynix Inc. Arithmetic devices conducting auto-load operation for writing the activation functions
US11676651B2 (en) 2019-10-31 2023-06-13 SK Hynix Inc. Arithmetic devices conducting auto-load operation
US11915125B2 (en) 2019-10-31 2024-02-27 SK Hynix Inc. Arithmetic devices for neural network
US11954457B2 (en) 2019-10-31 2024-04-09 SK Hynix Inc. Arithmetic devices for neural network including a function storage circuit and an activation function circuit
KR102474053B1 (ko) 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서
KR102474054B1 (ko) 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268101A1 (en) * 2003-06-30 2004-12-30 Mehta Kalpesh D Determining if a register is ready to exchange data with a processing element
US20170357891A1 (en) * 2016-05-26 2017-12-14 The Governing Council Of The University Of Toronto Accelerator for deep neural networks

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268101A1 (en) * 2003-06-30 2004-12-30 Mehta Kalpesh D Determining if a register is ready to exchange data with a processing element
US20170357891A1 (en) * 2016-05-26 2017-12-14 The Governing Council Of The University Of Toronto Accelerator for deep neural networks

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102480300B1 (ko) * 2022-05-25 2022-12-23 리벨리온 주식회사 뉴럴 프로세싱 장치 및 그의 잡 스케쥴링 방법
US11861401B2 (en) 2022-05-25 2024-01-02 Rebellions Inc. Neural processing device and method for job scheduling thereof

Also Published As

Publication number Publication date
KR102191408B1 (ko) 2020-12-15
KR102162749B1 (ko) 2020-10-07
KR20190116024A (ko) 2019-10-14

Similar Documents

Publication Publication Date Title
US10698730B2 (en) Neural network processor
KR102191408B1 (ko) 뉴럴 네트워크 프로세서
TWI803663B (zh) 一種運算裝置和運算方法
Rhodes et al. Real-time cortical simulation on neuromorphic hardware
CN110352434A (zh) 利用模型固定的神经网络处理
US20210201110A1 (en) Methods and systems for performing inference with a neural network
US11609792B2 (en) Maximizing resource utilization of neural network computing system
CN113469355B (zh) 分布式系统中的多模型训练管道
US11921814B2 (en) Method and device for matrix multiplication optimization using vector registers
US20200073702A1 (en) Method and system for performing parallel computation
US20210264257A1 (en) AI Accelerator Virtualization
US11562217B2 (en) Apparatuses and methods for approximating nonlinear function
US11941528B2 (en) Neural network training in a distributed system
KR20220056621A (ko) 매니코어 시스템을 위한 뉴럴 네트워크 모델 처리의 병렬화 방법 및 장치
US11409839B2 (en) Programmable and hierarchical control of execution of GEMM operation on accelerator
US20190272460A1 (en) Configurable neural network processor for machine learning workloads
US11704562B1 (en) Architecture for virtual instructions
KR20230008768A (ko) 뉴럴 네트워크 프로세싱 방법 및 이를 위한 장치
CN116097273A (zh) 由深度学习加速器与集成随机存取存储器进行的协作式传感器数据处理
CN112884066A (zh) 数据处理方法及装置
WO2019194466A1 (ko) 뉴럴 네트워크 프로세서
WO2019173104A1 (en) Ai accelerator virtualization
US11741397B2 (en) Artificial neural network emulation of hotspots
Foltin et al. FPGA Demonstrator of a Programmable Ultra-Efficient Memristor-Based Machine Learning Inference Accelerator
US12001352B1 (en) Transaction ordering based on target address

Legal Events

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