KR20190116024A - Neural network processor - Google Patents

Neural network processor

Info

Publication number
KR20190116024A
KR20190116024A KR1020180059775A KR20180059775A KR20190116024A KR 20190116024 A KR20190116024 A KR 20190116024A KR 1020180059775 A KR1020180059775 A KR 1020180059775A KR 20180059775 A KR20180059775 A KR 20180059775A KR 20190116024 A KR20190116024 A KR 20190116024A
Authority
KR
South Korea
Prior art keywords
data
flow engine
tasks
task
control flow
Prior art date
Application number
KR1020180059775A
Other languages
Korean (ko)
Other versions
KR102162749B1 (en
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 US16/124,589 priority Critical patent/US10698730B2/en
Priority to PCT/KR2019/003612 priority patent/WO2019194465A1/en
Publication of KR20190116024A publication Critical patent/KR20190116024A/en
Application granted granted Critical
Publication of KR102162749B1 publication Critical patent/KR102162749B1/en

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

According to the present disclosure, disclosed is a neural network processor. According to an embodiment of the present invention, a processing unit configured to process a neural network, which is a neural network processing unit, comprises: an instruction memory for storing tasks having one or more instructions; a data memory for storing data associated with the tasks; a data flow engine for checking whether the tasks prepare data, and notifying a control flow engine of whether the tasks is completely prepared in order of the tasks in which preparation of the data is completed; a control flow engine for executing the tasks in order of receiving notification from the data flow engine; and a performance unit for performing an operation in accordance with the instructions of the tasks controlled to be executed by the control flow engine.

Description

뉴럴 네트워크 프로세서{NEURAL NETWORK PROCESSOR}Neural Network Processor {NEURAL NETWORK PROCESSOR}

본 개시는 뉴럴 네트워크 프로세서에 관한 것으로, 더욱 상세하게는, 본 개시는 인공 신경망에서의 프로세싱 속도를 향상시키도록 구성되는 뉴럴 네트워크 프로세싱 유닛과 방법 및 시스템에 관한 것이다.TECHNICAL FIELD The present disclosure relates to neural network processors, and more particularly, to a neural network processing unit and method and system configured to improve processing speed in an artificial neural network.

인간의 뇌는 수많은 뉴런을 지니고 있고, 이러한 뉴런들의 전기화학적인 활동에 의해 지능이 형성된다. 각각의 뉴런은 시냅스를 통해 다른 뉴런들과 연결되어 있고, 뉴런들은 서로 전기 또는 화학적인 신호를 주고 받는다. 뉴런이 시냅스로부터 받은 신호들은 전기적인 신호로 변환되어 해당 뉴런을 자극한다. 이에 따라. 뉴런의 전위가 증가하여 역치 전위가 되면, 뉴런은 활동 전위(action potential)를 발생시켜 시냅스를 통해 다른 뉴런으로 전기화학적인 신호를 전달한다. The human brain has many neurons, and intelligence is formed by the electrochemical activity of these neurons. Each neuron is connected to other neurons through synapses, and the neurons exchange electrical or chemical signals with each other. The signals that neurons receive from synapses are converted into electrical signals to stimulate them. Accordingly. When the potential of a neuron increases and becomes a threshold potential, the neuron generates an action potential that transmits electrochemical signals through synapses to other neurons.

인공 신경망(Artificial Neural Network, ANN)은 인간의 뇌를 구성하고 있는 뉴런들을 수학적으로 모델링한 인공 뉴런들을 서로 연결하여 인공 지능을 구현한 것이다. 인공 뉴런에 대한 하나의 수학적 모델은 아래 수식 (1)과 같다. 구체적으로, 인공 뉴런은input signal xi 를 입력 받아 xi에 각각 대응되는 가중치 wi를 곱하여 총합을 구한다. 다음, 해당 인공 뉴런은 활성화 함수(activation function)를 이용하여 활성화(activation) 값을 구하고, 이 활성화 값을 연결된 다음 인공 뉴런으로 전달한다. Artificial Neural Network (ANN) is an artificial intelligence that connects artificial neurons modeled mathematically to neurons that make up the human brain. One mathematical model for artificial neurons is given by Equation (1) below. Specifically, the artificial neuron receives the input signal x i is determined by multiplying the total weights w i which respectively correspond to x i. Next, the artificial neuron obtains an activation value using an activation function, and transfers the activation value to the next artificial neuron.

y = f(w1 * x1 + w2 * x2 + .... wn * xn) = f(Σ wi * xi) , where i = 1 .. n, n = # input signal - 수식 (1)y = f (w 1 * x 1 + w 2 * x 2 + .... w n * x n ) = f (Σ w i * x i ), where i = 1 .. n, n = # input signal -Formula (1)

ANN의 한 형태인 심층 인공 신경망(Deep neural network, DNN)은 인공 뉴런(노드)들이 계층화된 네트워크 구조(layered network architecture)를 갖는다. DNN은 입력층(Input layer), 출력층(Output layer) 및 입력층과 출력층 사이의 다수의 은닉층(Hidden layer)으로 구성된다. 입력층은 입력값이 입력되는 다수의 노드들로 구성되며, 입력층의 노드들은 입력층과 연결되어 있는 다음 은닉층의 노드들로 상기한 수학적 모델을 통해 계산된 출력값들을 전달한다. 은닉층의 노드들은 상기한 수학적 모델을 통해 입력값을 전송 받고, 출력값을 계산하며, 출력값을 출력층의 노드들로 전달한다. Deep neural network (DNN), a form of ANN, has a layered network architecture in which artificial neurons (nodes) are layered. The DNN is composed of an input layer, an output layer, and a plurality of hidden layers between the input layer and the output layer. The input layer is composed of a plurality of nodes to which input values are input, and the nodes of the input layer deliver output values calculated through the above mathematical model to nodes of the next hidden layer connected to the input layer. The nodes of the hidden layer receive the input values, calculate the output values, and pass the output values to the nodes of the output layer through the mathematical model.

DNN에서 수행되는 기계 학습의 한 형태인 딥러닝(Deep learning)의 연산 과정은 주어진 DNN에서 학습 데이터를 바탕으로 계속해서 학습하여 해당 DNN의 연산 능력을 향상시키는 훈련(training) 과정과, 훈련 과정을 통해 학습된 DNN을 사용하여 새로운 입력 데이터에 대해 추론(inference)하는 과정으로 분류할 수 있다. Deep learning, a form of machine learning performed on a DNN, is a training process that improves the computational power of a DNN by continuously learning based on learning data from a given DNN. The DNN can be classified into the process of inferring new input data using the learned DNN.

딥러닝의 추론 과정은 입력 데이터를 입력층의 노드가 입력 받고, 이후 레이어의 순서에 따라 은닉층과 출력층에서 순차적으로 연산을 수행하는 전방향 전파(forward propagation) 방식으로 이루어진다. 최종적으로, 출력층 노드들은 은닉층들의 출력값을 바탕으로 추론 과정의 결론을 도출한다.The deep learning inference process is performed by a forward propagation method in which nodes of an input layer receive input data and sequentially perform operations in the hidden layer and the output layer according to the order of the layers. Finally, the output layer nodes draw conclusions of the inference process based on the output values of the hidden layers.

반면, 딥러닝의 훈련 과정은 추론 과정에 대한 결론과 실제 정답과의 차이를 줄이기 위해 노드들의 가중치(weight)를 조절하여 학습을 수행한다. 일반적으로 가중치는 기울기 하강(gradient descent) 방식을 통해 수정된다. 기울기 하강 방식을 구현하기 위해, 노드들 각각의 가중치를 대상으로 추론 과정의 결론과 실제 정답 간 차이의 미분값을 구해야 한다. 이 과정에서 DNN의 앞단 노드의 가중치의 미분값은 DNN의 뒷단 노드의 가중치에 대한 미분값의 체인룰(chain rule)에 의해 계산된다. 체인룰의 계산은 추론 과정 방향의 역방향으로 이루어지기 때문에 딥러닝의 학습 과정은 역방향 전파(back propagation) 방식을 갖는다.Deep learning, on the other hand, learns by adjusting the weights of nodes in order to reduce the difference between the conclusion of the inference process and the actual correct answer. In general, weights are modified by gradient descent. In order to implement the gradient descent method, the derivative of the difference between the conclusion of the inference process and the actual correct answer should be obtained for each weight of each node. In this process, the derivative of the weight of the front end node of the DNN is calculated by the chain rule of the derivative of the weight of the back node of the DNN. Since the calculation of the chain rule is performed in the reverse direction of the inference process, the learning process of deep learning has a back propagation method.

다시 말해, DNN은 계층 구조를 가지며, 각각의 계층에 존재하는 노드들은 이전 계층에 존재하는 다수의 노드들로부터 결과값을 입력 받고, 상기한 노드의 수학적 모델에 기반한 연산을 수행하여 새로운 결과값을 출력하며, 새로운 결과값을 다음 계층의 노드들로 전달한다.In other words, the DNN has a hierarchical structure, and nodes in each layer receive a result value from a plurality of nodes in the previous layer, and perform a calculation based on the mathematical model of the node to generate a new result value. Output, passing the new result to nodes in the next layer.

한편, 종래 DNN의 대부분의 연산 구조는 각 계층에 존재하는 노드들이 수행하는 수많은 연산들을 다수의 연산 유닛에 분산하여 처리하는 분산 처리 구조를 지니고 있었다. 그러나, 각 계층에 존재하는 노드들이 수행하는 연산을 다수의 연산 유닛에 분산하여 처리하게 되면, 각 연산 유닛들은 연산에 필요한 이전 연산 결과들을 모두 전달 받은 이후에 연산을 수행해야 한다. 그러므로, 종래의 연산 처리 구조를 이용한 인공 신경망에서의 연산 방법은 계층 단위의 동기화(Synchronization) 과정이 필요하다. 종래 DNN의 연산 구조에서 동기화 과정은 이전 계층의 모든 연산이 완료되었음을 동기화 방법에 의해 보장하고 다음 계층의 연산을 수행하는 방식으로 진행되었다.On the other hand, most of the operation structure of the conventional DNN has a distributed processing structure for distributing and processing a number of operations performed by nodes present in each layer to a plurality of operation units. However, when the operations performed by the nodes in each layer are distributed and processed in a plurality of calculation units, each calculation unit must perform the operation after receiving all previous calculation results required for the calculation. Therefore, the computational method in the artificial neural network using the conventional computational processing structure requires a synchronization process in units of layers. In the operation structure of the conventional DNN, the synchronization process is performed by a method of ensuring that all operations of the previous layer are completed by the synchronization method and performing operations of the next layer.

상술한 바와 같이, 본래 DNN의 연산 처리 구조는 병렬 처리 방식에 유리한 데이터 플로우 방식이 적용되는 것이 자연스러움에도 불구하고, 종래 DNN은 조밀 행렬들 간의 연산(Dense Matrix Multiplication)과 같은 정규화된 연산(직렬 처리 방식)에 최적화된 연산 처리 구조를 지니고 있었다. 즉, 종래 DNN의 연산 처리 구조는 한 계층에 존재하는 모든 노드들이 비슷한 양의 일을 분산하여 처리하도록 함으로써 노드들의 작업 종료 시간을 비슷하게 하고, 한 계층의 작업이 종료되면 동기화 과정을 수행하여 순차적으로 다음 계층의 연산을 시작하는 정규화된 연산 방식에 최적화된 구조이다.As described above, despite the fact that the data processing scheme of the DNN is advantageously applied to the parallel processing scheme, the conventional DNN has a normalized operation such as dense matrix multiplication. It has an operation processing structure optimized for the processing method. In other words, the conventional DNN's operation processing structure allows all nodes in a layer to distribute a similar amount of work so that the end time of the nodes is similar, and when the work of one layer is completed, the synchronization process is performed sequentially. This structure is optimized for normalized operation that starts operation of the next layer.

그러나, 여러 계층 내에 분산되어 있는 노드들은 독립적이어서 각자 자신이 수행하는 연산에 필요한 이전 결과들만 있으면 바로 연산을 시작할 수 있다. 따라서, 종래의 DNN의 노드들은 다른 노드들의 연산 완료 여부와 상관 없이 자신의 연산을 수행할 수 있음에도 불구하고, 반드시 이전 계층의 모든 작업이 종료되어야만 연산을 시작할 수 있는 문제점을 가지고 있다. 또한, 연산 유닛 중 일부 연산 유닛들이 자신에게 할당된 모든 연산을 종료하지 못한 경우, 이미 연산을 마친 연산 유닛들은 대기해야 한다. 결국, 종래 DNN의 연산 구조는 노드들이 각기 다른 연산 양을 처리하는 비정규화된 연산(병렬 처리 방식)에는 비효율적인 구조이다.However, nodes distributed in multiple layers are independent so that each can start the operation as long as it has the previous results needed for the operation it performs. Therefore, although nodes of the conventional DNN can perform their own operations regardless of whether or not other nodes have completed their operations, the nodes of the conventional DNN have a problem in that the operation can be started only when all the tasks of the previous layer are finished. In addition, when some of the calculation units do not complete all the calculations assigned to them, the calculation units that have already completed the calculation must wait. As a result, the computational structure of the conventional DNN is inefficient for non-normalized computation (parallel processing) where nodes handle different amounts of computation.

이와 관련하여, 딥러닝의 연산 과정에서는 비정규화된 연산(irregular computation)이 흔히 발생한다. 비정규화된 연산은 연산할 필요가 없는 0값을 다수 포함하는 행렬들의 연산 등으로 인해 발생할 수 있다. 이해의 편의를 위해, 다수의 연산 유닛이 동일하거나 비슷한 정도의 연산을 분산 처리하여 모두 정규화된 연산을 수행하도록 연산 구조가 프로그램화 된 DNN의 경우를 예로 든다. In this regard, irregular computation often occurs in the deep learning process. Denormalized operations may occur due to operations of matrices including a large number of zero values that do not need to be operated on. For the sake of understanding, take the example of a DNN in which a computational structure is programmed such that a plurality of arithmetic units distribute the same or similar degree of operations and all perform normalized operations.

위 예에서, 연산할 필요가 없는 0 값을 포함하는 행렬 연산이 존재하는 경우, 연산 유닛이 해당 연산들을 생략하게 됨으로써 연산 유닛들이 처리해야 하는 연산량이 달라지는 비정규화된 연산이 발생한다. 또한, 인공 신경망을 구성하는 연결의 가중치에 0이 많이 존재하는 것과 같이 스파스(Sparse)한 경우 또는 인공 신경망의 처리 과정에서 발생하는 활성화 함수의 종류에 따라 0값이 발생하기 쉬운 경우에 비정규화된 연산이 자주 발생하게 된다. 또한, 딥러닝의 연상 과정에서 수많은 연산들이 다수의 연산 유닛들에 의해 나뉘어 실행되고, 이 과정에서 다수의 연산 유닛들이 서로 데이터를 주고 받는 통신(communication)을 수행하게 되면, 통신 네트워크 상에 발생하는 지연 속도와 그 차이로 인해 비정규화된 통신이 발생한다. 이 경우, 비정규화된 연산과 연산 유닛들 간의 통신으로 인해, DNN의 한 계층에 존재하는 노드들이 수행하는 연산들의 완료 시간이 불규칙해질 수 있다. 또한, 일부 늦게 처리되는 연산들로 인해 한 계층 내의 일부 연산 유닛들이 아이들(Idle)한 상태가 될 수 있다.In the above example, when there is a matrix operation including a zero value that does not need to be operated on, the operation unit omits the operations, resulting in an unnormalized operation that varies the amount of operation that the operation units must process. Also, denormalization when sparse, such as the presence of a large number of zeros in the weight of the connection constituting the artificial neural network, or when a zero value tends to occur depending on the type of activation function generated during the processing of the artificial neural network. Operations often occur. In addition, in the associative process of deep learning, a number of operations are divided and executed by a plurality of calculation units, and in this process, a plurality of calculation units communicate with each other to perform data communication. The delay rate and the difference results in denormalized communication. In this case, due to the denormalized operation and the communication between the computing units, the completion time of the operations performed by the nodes present in one layer of the DNN may be irregular. In addition, some late processing may cause some computation units in a layer to be idle.

종래 DNN은 상기한 상황에서도 반드시 한 계층 내에 모든 노드들의 연산과 통신이 완료될 때까지 기다린 후, 동기화 과정을 거쳐야만 다음 계층의 연산을 처리하도록 구성된다. 따라서, 종래 DNN은 노드들의 사용 효율(Utilization)이 떨어지는 문제점을 야기시키고, 노드들의 사용 효율이 떨어지면 결국 DNN 전체의 연산 효율이 떨어지는 문제 역시 발생하게 된다. DNN의 연산 효율을 높이기 위해 계층 단위가 아닌 개별 노드 단위로 상술한 동기화 과정을 설정할 수도 있으나, 이는 추가적인 하드웨어 비용을 발생시킨다.The conventional DNN is configured to process the operation of the next layer only after the synchronization process, after waiting until the operation and communication of all nodes in one layer are completed even in the above situation. Therefore, the conventional DNN causes a problem that the utilization efficiency of the nodes decreases, and when the utilization efficiency of the nodes decreases, a problem that the computational efficiency of the entire DNN decreases also occurs. In order to increase the computational efficiency of the DNN, the above-described synchronization process may be set in units of individual nodes instead of in layers, but this incurs additional hardware costs.

본 발명의 실시예들은, 비정규화된 연산이 흔히 발생하는 인공 신경망에서, 프로세싱 속도를 향상시키도록 구성되는 뉴럴 네트워크 프로세싱 유닛과 방법 및 시스템을 제공한다.Embodiments of the present invention provide a neural network processing unit, method, and system configured to improve processing speed in artificial neural networks in which denormalized operations commonly occur.

본 발명의 실시예들이 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 위에서 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 실시예들이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.Technical problems to be achieved by the embodiments of the present invention are not limited to the above-mentioned technical problems, and other technical problems not mentioned above are provided by those skilled in the art to which embodiments of the present invention belong. Will be clearly understood to him.

상기한 기술적 과제들을 해결하기 위해 본 발명의 일 실시예는, 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 프로세싱 유닛에 있어서, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리와, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리와, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진에 통지하도록 구성되는 데이터 플로우 엔진과, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진, 그리고, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 제공한다.In order to solve the above technical problem, an embodiment of the present invention provides a processing unit configured to perform processing of a neural network, including: an instruction memory configured to store tasks having one or more instructions; A data memory configured to store associated data, a data flow engine configured to check whether data is prepared for the tasks, and to notify the control flow engine of whether the tasks are ready in order of data ready tasks; A control flow engine configured to control execution of a task in an order received from the data flow engine, and to perform an operation according to one or more instructions of a task controlling the control flow engine to execute Provides a neural network processing unit including the performing unit.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함할 수 있다.The data fetch unit may further include a data fetch unit configured to fetch operation target data according to one or more instructions of a task that the control flow engine controls to execute from the data memory to the execution unit.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장할 수 있다.In the present embodiment, the control flow engine may store the result data according to the calculation of the execution unit in the data memory.

본 실시예에 있어서, 외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터를 더 포함할 수 있다.In the present embodiment, the router may further include a router configured to relay communication between an external device and the processing unit.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함할 수 있다.In the present embodiment, the control flow engine may further include a register file configured to include one or more registers, which are storage spaces used in a process of executing a task.

본 실시예에 있어서, 상기 데이터 메모리는 동적 메모리를 포함하며, 상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다.In the present embodiment, the data memory includes a dynamic memory, and a predetermined space of the dynamic memory is allocated to a specific task and then released when tasks including the specific task do not use the data of the specific task. It may be configured to.

본 실시예에 있어서, 상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성될 수 있다. In the present embodiment, the execution unit may be formed in a form in which a calculation module performing a calculation has a specific pattern.

본 실시예에 있어서, 상기 데이터 플로우 엔진은, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하며, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하도록 구성될 수 있다.In the present embodiment, the data flow engine receives the index of each of the tasks and the information of the data associated with the tasks from the instruction memory, and checks whether the data required by each of the tasks is prepared, The data may be configured to transmit the indexes of the tasks prepared with data to the control flow engine in the order of preparation of the data.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은, 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록과, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐와, 상기 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록, 그리고, 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함할 수 있다.In the present embodiment, the control flow engine, the fetch preparation queue configured to receive the index of the task data prepared from the data flow engine, and necessary for the execution of the task corresponding to the index received from the fetch preparation queue A fetch block configured to load data from the outside into the data memory without checking whether data exists in the data memory, a running preparation queue configured to receive an index of a task in which the data load is completed in the fetch block, and the running A running block configured to sequentially receive an index of tasks provided in the running preparation queue from a preparation queue, and a program counter configured to execute one or more instructions of a task corresponding to the index transmitted to the running block. Can be.

또한, 상기 기술적 과제들을 해결하기 위해 본 발명의 다른 실시예는, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서, (i) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고 데이터 준비가 완료된 순서대로 상기 태스크들의 준비 완료 여부를 상기 컨트롤 플로우 엔진에 통지하는 단계와, (ii) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크를 실행하도록 제어하는 단계와, (iii) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법을 제공한다.In addition, to solve the above technical problem, another embodiment of the present invention provides an instruction memory configured to store tasks having one or more instructions, a data memory configured to store data associated with the tasks, a data flow engine, A method of performing neural network processing using a neural network processing unit comprising a control flow engine and an execution unit, the method comprising: (i) the data flow engine checking whether data is ready for the tasks and preparing data; Notifying the control flow engine of completion of preparation of the tasks in the order of completion; (ii) controlling the control flow engine to execute the tasks in the order received from the data flow engine; and (iii) The performing unit is It provides a neural network processing method comprising the step of performing an operation according to one or more instructions of a task that controls the control flow engine to execute.

본 실시예에 있어서, 상기 뉴럴 네트워크 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고, 상기 뉴럴 네트워크 프로세싱 방법은, 상기 (ii) 단계와 상기 (iii) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함할 수 있다.In this embodiment, the neural network processing unit further comprises a data fetch unit, wherein the neural network processing method, between the step (ii) and the step (iii), the data fetch unit, the control flow, The method may further include fetching operation target data from the data memory to the execution unit according to one or more instructions of a task of controlling an engine to execute.

본 실시예에 있어서, 상기 (iii) 단계 이후에, 상기 컨트롤 플로우 엔진이 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함할 수 있다.In the present exemplary embodiment, after the step (iii), the control flow engine may further include storing the result data according to the calculation of the execution unit in the data memory.

본 실시예에 있어서, 상기 (i) 단계는, 상기 데이터 플로우 엔진이, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정과, 상기 데이터 플로우 엔진이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정, 그리고, 상기 데이터 플로우 엔진이 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하는 과정을 포함할 수 있다. In the present exemplary embodiment, the step (i) may include: receiving, by the data flow engine, information of an index of each of the tasks and data associated with the tasks from the instruction memory; And checking whether data required by each task is prepared, and transmitting, by the data flow engine, the indexes of tasks for which data is prepared to the control flow engine in order of data preparation.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 페치 준비 큐, 페치 블록, 러닝 준비 큐, 러닝 블록 및 프로그램 카운터를 더 포함하고, 상기 (ii) 단계는, 상기 페치 준비 큐가 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 상기 데이터 메모리로 로드하는 과정과, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정, 그리고, 상기 러닝 준비 큐가 상기 러닝 블록으로 태스크들의 인덱스를 순차적으로 전송하면, 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함할 수 있다.In the present embodiment, the control flow engine further includes a fetch preparation queue, a fetch block, a running preparation queue, a running block, and a program counter, wherein step (ii) includes the step of fetching the data from the data flow engine. When the process of receiving the index of the prepared task, and the fetch ready queue sequentially transmits the index of the task to the fetch block, the fetch block is the data necessary for the execution of the task corresponding to the received index is the data Checking whether the memory is present in the memory, loading data from the outside into the data memory, receiving the index of the task from which the data has been loaded in the fetch block, and running the queue. If you sequentially send the indexes of tasks in blocks, And executing, by the program counter, one or more instructions of a task corresponding to an index transmitted to the running block.

또한, 상기한 기술적 과제들을 해결하기 위해 본 발명의 또 다른 실시예는, 뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 시스템에 있어서, 중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 구비하는 컴퓨팅 모듈을 포함하고, 상기 프로세싱 유닛은, 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리와, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리와, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진에 통지하도록 구성되는 데이터 플로우 엔진과, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진, 그리고, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 하나 이상 구비하는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 제공한다.In addition, another embodiment of the present invention to solve the above technical problem, in a system configured to perform the processing of the neural network, a processing unit for performing processing in accordance with the instructions of the central processing unit and the central processing unit A computing module having one or more of: a processing module, the processing unit comprising: an instruction memory configured to store tasks having one or more instructions; a data memory configured to store data associated with the tasks; A data flow engine configured to check whether data is prepared for the target, and notify the control flow engine of whether the tasks are ready in order of the data-prepared tasks; and executing the tasks in the order received from the data flow engine. Control And a execution unit having a control flow engine configured to perform an operation and configured to perform an operation according to one or more instructions of a task that the control flow engine controls to execute. .

본 실시예에 있어서, 상기 프로세싱 유닛은, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함할 수 있다.In the present embodiment, the processing unit may further include a data fetch unit configured to fetch operation target data according to one or more instructions of a task that the control flow engine controls to execute from the data memory to the performing unit. Can be.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장할 수 있다.In the present embodiment, the control flow engine may store the result data according to the calculation of the execution unit in the data memory.

본 실시예에 있어서, 상기 데이터 메모리에 저장된 결과 데이터는 상기 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용될 수 있다.In the present embodiment, the result data stored in the data memory can be used for processing of a processing unit other than the processing unit including the data memory.

본 실시예에 있어서, 상기 중앙처리유닛과 상기 컴퓨팅 모듈을 연결하여 상기 중앙처리유닛과 상기 컴퓨틸 모듈 간의 통신이 수행되도록 구성되는 호스트 인터페이스를 더 포함할 수 있다. In an example embodiment, the apparatus may further include a host interface configured to connect the central processing unit and the computing module to perform communication between the central processing unit and the computer module.

본 실시예에 있어서, 상기 중앙처리유닛의 명령을 상기 컴퓨팅 모듈로 전달하도록 구성되는 커맨드 프로세서를 더 포함할 수 있다. In the present embodiment, it may further include a command processor configured to deliver the command of the central processing unit to the computing module.

본 실시예에 있어서, 상기 중앙처리유닛과 상기 컴퓨팅 모듈 각각의 데이터 전송 및 저장을 제어하도록 구성되는 메모리 컨트롤러를 더 포함할 수 있다. In an embodiment, the apparatus may further include a memory controller configured to control data transmission and storage of each of the CPU and the computing module.

본 실시예에 있어서, 상기 프로세싱 유닛은, 외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터와, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함할 수 있다. In the present embodiment, the processing unit includes a router configured to relay communication between an external device and the processing unit, and one or more registers which are storage spaces used in the process of executing a task by the control flow engine. It may further comprise a register file configured to.

본 실시예에 있어서, 상기 데이터 메모리는 동적 메모리를 포함하며, 상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다. In the present embodiment, the data memory includes a dynamic memory, and a predetermined space of the dynamic memory is allocated to a specific task, and then released when tasks including the specific task do not use data of the specific task. It may be configured to.

본 실시예에 있어서, 상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성될 수 있다. In the present embodiment, the execution unit may be formed in a form in which a calculation module performing a calculation has a specific pattern.

본 실시예에 있어서, 상기 데이터 플로우 엔진은, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하며, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하도록 구성될 수 있다. In the present embodiment, the data flow engine receives the index of each of the tasks and the information of the data associated with the tasks from the instruction memory, and checks whether the data required by each of the tasks is prepared, The data may be configured to transmit the indexes of the tasks prepared with data to the control flow engine in the order of preparation of the data.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은, 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐와, 상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록과, 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐와, 상기 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록, 그리고, 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함할 수 있다. In the present embodiment, the control flow engine, the fetch preparation queue configured to receive the index of the task data prepared from the data flow engine, and necessary for the execution of the task corresponding to the index received from the fetch preparation queue A fetch block configured to load data from the outside into the data memory without checking whether data exists in the data memory, a running preparation queue configured to receive an index of a task in which the data load is completed in the fetch block, and the running A running block configured to sequentially receive an index of tasks provided in the running preparation queue from a preparation queue, and a program counter configured to execute one or more instructions of a task corresponding to the index transmitted to the running block. Can be.

또한, 상기한 기술적 과제들을 해결하기 위해 본 발명의 또 다른 실시예는, 중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 포함하는 컴퓨팅 모듈을 포함하되, 상기 프로세싱 유닛은 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서, (1) 상기 중앙처리유닛이 상기 컴퓨팅 모듈에 명령을 전송하는 단계 및 (2) 상기 컴퓨팅 모듈이 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 단계를 포함하고, 상기 (2) 단계는, (2-1) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고 데이터 준비가 완료된 순서대로 상기 태스크들의 준비 완료 여부를 상기 컨트롤 플로우 엔진에 통지하는 단계, (2-2) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크를 실행하도록 제어하는 단계, 그리고, (2-3) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법을 제공한다.In addition, to solve the above technical problem, another embodiment of the present invention includes a computing module including a central processing unit and at least one processing unit for performing processing according to the instructions of the central processing unit, the processing The unit utilizes a neural network processing system comprising an instruction memory configured to store tasks having one or more instructions, a data memory configured to store data associated with the tasks, a data flow engine, a control flow engine and an performing unit. 1. A method of performing a processing of a neural network, the method comprising: (1) transmitting a command to the computing module by the central processing unit and (2) performing processing according to the command of the central processing unit by the computing module. To include, the step (2), (2-1 Checking, by the data flow engine, whether the data is ready for the tasks, and notifying the control flow engine of whether the tasks are ready in the order in which the data preparation is completed, (2-2) the control flow engine Controlling the execution of the tasks in the order of notification from the data flow engine, and (2-3) the performing unit performing an operation according to one or more instructions of the task controlling the control flow engine to execute. It provides a neural network processing method comprising the step.

본 실시예에 있어서, 상기 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고, 상기 뉴럴 네트워크 프로세싱 방법은, 상기 (2-2) 단계와 상기 (2-3) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함할 수 있다. In the present embodiment, the processing unit further comprises a data fetch unit, the neural network processing method, between the step (2-2) and the step (2-3), the data fetch unit, the The method may further include fetching operation target data from the data memory to the execution unit according to one or more instructions of a task that the control flow engine controls to execute.

본 실시예에 있어서, 상기 (2) 단계는 상기 (2-3) 단계 이후에, 상기 컨트롤 플로우 엔진이 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함할 수 있다. In the present exemplary embodiment, the step (2) may further include, after the step (2-3), the control flow engine storing the result data according to the calculation of the execution unit in the data memory. .

본 실시예에 있어서, 상기 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛이 상기 결과 데이터를 로드하는 단계를 더 포함할 수 있다. In the present embodiment, the processing unit and the processing unit including the data memory in which the result data is stored may further comprise the step of loading the result data.

본 실시예에 있어서, 상기 (1) 단계 이전에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 상태를 초기화하는 단계와, 상기 (2) 단계 이후에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 연산에 따른 결과 데이터를 상기 중앙처리유닛의 저장소로 저장하는 단계를 더 포함할 수 있다.In the present embodiment, before the step (1), the central processing unit initializes the state of the computing module, and after the step (2), the central processing unit is the result data according to the operation of the computing module It may further comprise the step of storing in the storage of the central processing unit.

본 실시예에 있어서, 상기 (2-1) 단계는, 상기 데이터 플로우 엔진이 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정, 상기 데이터 플로우 엔진이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정, 그리고, 상기 데이터 플로우 엔진이 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하는 과정을 포함할 수 있다. In the present embodiment, the step (2-1), the data flow engine receives the index of each of the tasks and the information of the data associated with the tasks from the instruction memory, the data flow engine is And checking whether data required by each task is prepared, and transmitting, by the data flow engine, the indexes of tasks for which data is prepared to the control flow engine in order of data preparation.

본 실시예에 있어서, 상기 컨트롤 플로우 엔진은 페치 준비 큐, 페치 블록, 러닝 준비 큐, 러닝 블록 및 프로그램 카운터를 더 포함하고, 상기 (2-2) 단계는, 상기 페치 준비 큐가 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정과, 상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 상기 데이터 메모리로 로드하는 과정과, 상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정, 그리고, 상기 러닝 준비 큐가 상기 러닝 블록으로 태스크들의 인덱스를 순차적으로 전송하면, 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함할 수 있다. In the present embodiment, the control flow engine further includes a fetch preparation queue, a fetch block, a running preparation queue, a running block, and a program counter, and in step (2-2), the fetch preparation queue includes the data flow engine. Receiving the index of the task to prepare the data from the step, and if the fetch ready queue sequentially transmits the index of the task to the fetch block, the fetch block is the data necessary for the execution of the task corresponding to the received index Checking whether the data is present in the data memory, loading data from the outside into the data memory, receiving the index of the task in which the data has been loaded in the fetch block, and running the queue Sequentially transmit indexes of tasks to the running block. And it may include the step of executing one or more instructions of the task of the program counter corresponds to the index sent to the learning block.

본 발명의 실시예들에 따르면, 인공 신경망에서의 프로세싱 실행 단위인 태스크들 각각은 다른 태스크들의 데이터 준비 완료 여부와 상관 없이, 각자 실행에 필요한 데이터가 준비되면 다음 프로세싱 절차를 수행할 수 있다. 이에 따라, 태스크들의 프로세싱을 담당하는 프로세싱 유닛의 사용 효율을 높일 수 있다.According to embodiments of the present invention, each of the tasks, which are processing execution units in the artificial neural network, may perform the following processing procedure when data necessary for execution is prepared, regardless of whether other tasks have completed data preparation. Accordingly, the use efficiency of the processing unit in charge of the processing of the task can be improved.

또한, 본 발명의 실시예들에 따르면, 데이터 준비가 완료된 태스크들의 인스트럭션들은 순차적으로 수행되도록 함으로써, 데이터 플로우 구조 방식에 따라 태스크들의 인스트럭션들을 실행할 때 발생하는 오버헤드를 방지할 수 있다.In addition, according to embodiments of the present invention, the instructions of the data-prepared tasks can be performed sequentially, thereby preventing the overhead incurred when executing the instructions of the tasks according to the data flow structure.

또한, 본 발명의 실시예들에 따르면, 데이터 플로우 방식과 컨트롤 플로우 방식을 혼합 적용한 뉴럴 네트워크 프로세싱 유닛 및 시스템을 이용하여, 비정규화된 연산이 흔히 발생하는 인공 신경망에서의 프로세싱 속도를 향상시킬 수 있고, 이에 따라, 딥러닝의 학습, 훈련 및 추론 과정에 소요되는 시간을 줄일 수 있다.In addition, according to embodiments of the present invention, by using a neural network processing unit and a system using a combination of a data flow method and a control flow method, it is possible to improve the processing speed in an artificial neural network in which denormalized operations are common. This reduces the time spent learning, training, and reasoning for deep learning.

본 발명의 실시예들에 따른 효과는 상기한 효과로 한정되는 것은 아니며, 상세한 설명 또는 특허청구범위에 기재된 구성으로부터 추론 가능한 모든 효과를 포함하는 것으로 이해되어야 한다.Effects according to embodiments of the present invention are not limited to the above effects, it should be understood to include all the effects deduced from the configuration described in the detailed description or claims.

도 1은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템의 구성을 개략적으로 도시한 도면이다.
도 2는 도 1에 도시된 프로세싱 유닛의 세부 구성을 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 3은 도 1에 도시된 뉴럴 네트워크 프로세싱 시스템을 이용한 뉴럴 네트워크 프로세싱 방법의 절차를 도시한 흐름도이다.
도 4는 도 2에 도시된 프로세싱 유닛을 이용한 뉴럴 네트워크 프로세싱 방법의 절차를 도시한 흐름도이다.
도 5는 도 2에 도시된 인스트럭션 메모리와 데이터 메모리를 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 6은 도 4에 도시된 뉴럴 네트워크 프로세싱 방법의 세부 절차들의 구현예를 셜명하기 위해 도시한 도면이다.
도 7은 도 2에 도시된 데이터 플로우 엔진과 컨트롤 플로우 엔진의 세부 구성들을 더욱 상세하게 설명하기 위해 도시한 도면이다.
도 8은 도 2에 도시된 컨트롤 플로우 엔진과 인스트럭션 메모리간의 상호작용 및 데이터 페치 유닛과 데이터 메모리간의 상호작용을 설명하기 위해 도시한 도면이다.
1 is a diagram schematically illustrating a configuration of a neural network processing system according to an embodiment of the present invention.
FIG. 2 is a diagram illustrating the detailed configuration of the processing unit illustrated in FIG. 1 in more detail.
3 is a flowchart illustrating a procedure of a neural network processing method using the neural network processing system shown in FIG. 1.
4 is a flowchart illustrating a procedure of a neural network processing method using the processing unit illustrated in FIG. 2.
FIG. 5 is a diagram illustrating the instruction memory and the data memory illustrated in FIG. 2 in more detail.
FIG. 6 is a diagram illustrating an implementation of detailed procedures of the neural network processing method illustrated in FIG. 4.
FIG. 7 is a diagram illustrating in more detail the detailed configurations of the data flow engine and the control flow engine shown in FIG. 2.
FIG. 8 is a diagram illustrating an interaction between a control flow engine and an instruction memory and an interaction between a data fetch unit and a data memory illustrated in FIG. 2.

이하에서는 첨부한 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 한다. 그러나 본 발명의 실시예들은 여러 가지 다양하고 상이한 형태로 구현될 수 있다. 따라서 본 명세서에 개시된 실시예들이 여기에서 설명하는 실시예들로 한정되는 것은 아니다. 또한, 첨부된 도면은 본 명세서에 개시된 실시 예들을 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 명세서에 개시된 기술적 사상이 제한되지 않는다. 본 발명의 실시예들이 가진 기술적 사상은 여기에 기재된 실시예들의 기술적 사상 및 기술 범위에 포함되는 모든 변경물, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 그리고, 도면에서 본 발명의 실시예들을 명확하게 설명하기 위한 설명과 관계없는 부분은 생략하였으며, 도면에 나타난 각 구성요소의 크기, 형태, 형상은 다양하게 변형될 수 있고, 동일/유사한 부분에 대해서는 동일/유사한 도면 부호를 붙였다.Hereinafter, with reference to the accompanying drawings will be described embodiments of the present invention; However, embodiments of the present invention may be implemented in a variety of different forms. Accordingly, the embodiments disclosed herein are not limited to the embodiments described herein. In addition, the accompanying drawings are only for easily understanding the embodiments disclosed herein, it is not limited to the technical spirit disclosed herein by the accompanying drawings. The technical spirit of the embodiments of the present invention should be understood to include all modifications, equivalents, and substitutes included in the technical spirit and technical scope of the embodiments described herein. In the drawings, parts irrelevant to the description for clearly describing the embodiments of the present invention are omitted, and the size, shape, and shape of each component shown in the drawings may be variously modified, and for the same / similar parts Identical / similar reference numerals are used.

이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈", "유닛", “프로세서”, “엔진” 및 “어레이” 등은 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다. 또한, 본 명세서에 개시된 실시예들을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 실시예들의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략하였다.The suffixes "module", "unit", "processor", "engine" and "array" for components used in the description below are given or used in consideration of ease of specification, and are themselves mutually exclusive. It does not have distinct meanings or roles. In addition, in describing the embodiments disclosed herein, when it is determined that the detailed description of the related known technology may obscure the gist of the embodiments disclosed herein, the detailed description thereof is omitted.

본 명세서 전체에서, 어떤 부분이 다른 부분과 "연결(접속, 접촉 또는 결합)"되어 있다고 할 때, 이는 "직접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우뿐만 아니라, 그 중간에 다른 무엇인가를 사이에 두고 "간접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우 또는 “전기적으로 연결(접속, 접촉 또는 결합)”된 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함(구비 또는 마련)"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 “포함(구비 또는 마련)”할 수 있다는 것을 의미한다.Throughout this specification, when a part is said to be "connected (connected, contacted or coupled) with another part, it is not only when it is" directly connected (connected, contacted or coupled) ", but also in between. This includes "indirectly connected (connected, contacted or coupled)" or "electrically connected (connected, contacted or coupled)" with an authorization between them. Also, when a part is said to "include (or prepare)" a component, it is not to exclude other components, but to "include (or prepare)" other components, unless specifically stated otherwise. That means you can.

본 명세서에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명의 실시예들을 한정하려는 의도가 아니다. 여기에 기재된 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함하며, 분산되어 실시되는 구성요소들은 특별한 제한이 있지 않는 한 결합된 형태로 실시될 수도 있다. The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of embodiments of the present invention. As used herein, the singular forms "a", "an" and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise.

또한, 본 명세서에서 사용되는 제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 실시예들의 기술 범위를 벗어나지 않으면서 제1구성요소는 제2구성요소로 명명될 수 있고, 유사하게 제2구성요소도 제1구성 요소로 명명될 수 있다. In addition, terms including ordinal numbers, such as first and second, as used herein may be used to describe various components, but the components should not be limited by the terms. The terms are used only for the purpose of distinguishing one component from another. For example, without departing from the technical scope of the embodiments of the present invention, the first component may be referred to as the second component, and similarly, the second component may also be referred to as the first component.

또한, 본 명세서에서 특별히 다르게 정의하지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본원에 개시된 특정 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 또는 협소하거나 형식적인 의미로 해석되지 아니한다.Also, unless specifically defined otherwise herein, all terms used herein, including technical or scientific terms, are the same as commonly understood by one of ordinary skill in the art to which the specific embodiments disclosed herein belong. Has meaning. Terms such as those defined in the commonly used dictionaries should be construed as having meanings consistent with the meanings in the context of the related art and, unless expressly defined herein, are ideal, excessive or narrow or formal meanings. It is not to be interpreted as.

도 1은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100)(neural network processing system)의 구성을 개략적으로 도시한 도면이다.1 is a diagram schematically illustrating a configuration of a neural network processing system 100 according to an embodiment of the present invention.

도 1을 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100)은 중앙처리유닛(Central Processing Unit, CPU)(110)과 컴퓨팅 모듈(computing module)(160)을 포함한다.Referring to FIG. 1, the neural network processing system 100 according to the present embodiment includes a central processing unit (CPU) 110 and a computing module 160.

중앙처리유닛(110)은 컴퓨팅 모듈(160)을 포함한 시스템 내의 다른 구성요소에 다양한 명령을 내리는 호스트 역할 및 기능을 수행하도록 구성된다. 중앙처리유닛(110)은 저장소(120)와 연결되어 있을 수 있고, 내부에 별도의 저장소를 구비할 수도 있다. 수행 기능에 따라 중앙처리유닛(110)은 호스트(host)로, 중앙처리유닛(110)과 연결된 저장소(120)는 호스트 메모리(host memory)로 명명될 수 있다.The central processing unit 110 is configured to perform host roles and functions to issue various commands to other components in the system including the computing module 160. The central processing unit 110 may be connected to the reservoir 120, and may have a separate reservoir therein. According to a performance function, the central processing unit 110 may be referred to as a host, and the storage 120 connected to the central processing unit 110 may be referred to as a host memory.

컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령을 전송 받아 연산과 같은 특정 기능을 수행하도록 구성된다. 또한, 컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령에 따라 인공 신경망에서의 프로세싱을 수행하도록 구성되는 적어도 하나 이상의 프로세싱 유닛(processing unit)(161)을 포함한다. 예를 들어, 컴퓨팅 모듈(160)은 프로세싱 유닛(161)을 4개 내지 4096개를 구비하고 있을 수 있으나, 반드시 이에 제한되는 것은 아니다. 즉, 컴퓨팅 모듈(160)은 4개 미만 또는 4096개 초과의 프로세싱 유닛(161)을 구비할 수도 있다. The computing module 160 is configured to receive a command of the central processing unit 110 to perform a specific function such as an operation. The computing module 160 also includes at least one processing unit 161 that is configured to perform processing in the artificial neural network according to instructions of the central processing unit 110. For example, the computing module 160 may include 4 to 4096 processing units 161, but is not limited thereto. That is, computing module 160 may have less than four or more than 4096 processing units 161.

컴퓨팅 모듈(160)도 역시 저장소(170)와 연결되어 있을 수 있고, 내부에 별도의 저장소를 구비할 수도 있다. 컴퓨팅 모듈(160)이 구비하는 프로세싱 유닛(161)은 아래에서 도 2를 참조하여 더욱 상세히 설명하도록 한다.Computing module 160 may also be connected to storage 170 and may have a separate storage therein. The processing unit 161 included in the computing module 160 will be described in more detail with reference to FIG. 2 below.

저장소들(120; 170;)은 DRAM일 수 있으나, 반드시 이에 제한되는 것은 아니며, 데이터를 저장하기 위한 저장소의 형태라면 어떠한 형태로도 구현될 수 있다. The storages 120 and 170 may be DRAMs, but are not necessarily limited thereto, and may be implemented in any form as long as the storages for storing data.

다시, 도 1을 참조하면, 뉴럴 네트워크 프로세싱 시스템(100)은 호스트 인터페이스(Host I/F)(130), 커맨드 프로세서(command processor)(140), 및 메모리 컨트롤러(memory controller)(150)를 더 포함할 수 있다. Referring back to FIG. 1, the neural network processing system 100 further includes a host interface (Host I / F) 130, a command processor 140, and a memory controller 150. It may include.

호스트 인터페이스(130)는 중앙처리유닛(110)과 컴퓨팅 모듈(160)을 연결하도록 구성되며, 중앙처리유닛(110)과 컴퓨팅 모듈(160)간의 통신이 수행되도록 한다. The host interface 130 is configured to connect the central processing unit 110 and the computing module 160 to allow communication between the central processing unit 110 and the computing module 160 to be performed.

커맨드 프로세서(140)는 호스트 인터페이스(130)를 통해 중앙처리유닛(110)으로부터 명령을 수신하여 컴퓨팅 모듈(160)에 전달하도록 구성된다.The command processor 140 is configured to receive a command from the central processing unit 110 through the host interface 130 and transmit the command to the computing module 160.

메모리 컨트롤러(150)는 중앙처리유닛(110)과 컴퓨팅 모듈(160) 각각 또는 서로간의 데이터 전송 및 데이터 저장을 제어하도록 구성된다. 예컨대, 메모리 컨트롤러(150)는 프로세싱 유닛(161)의 연산 결과 등을 컴퓨팅 모듈(160)의 저장소(170)에 저장하도록 제어할 수 있다. The memory controller 150 is configured to control data transfer and data storage between the central processing unit 110 and the computing module 160 or each other. For example, the memory controller 150 may control the operation result of the processing unit 161 to be stored in the storage 170 of the computing module 160.

구체적으로, 호스트 인터페이스(130)는 컨트롤 상태(control status) 레지스터를 구비할 수 있다. 호스트 인터페이스(130)는 컨트롤 상태(control status) 레지스터를 이용하여, 중앙처리유닛(110)에게 컴퓨팅 모듈(160)의 상태 정보를 제공하고, 커맨드 프로세서(140)로 명령을 전달할 수 있는 인터페이스를 제공한다. 예컨대, 호스트 인터페이스(130)는 중앙처리유닛(110)으로 데이터를 전송하기 위한 PCIe 패킷을 생성하여 목적지로 전달하거나, 또는 중앙처리유닛(110)으로부터 전달받은 패킷을 지정된 곳으로 전달할 수 있다. In detail, the host interface 130 may include a control status register. The host interface 130 provides an interface for providing status information of the computing module 160 to the CPU 110 and transmitting a command to the command processor 140 using a control status register. do. For example, the host interface 130 may generate a PCIe packet for transmitting data to the central processing unit 110 and deliver it to a destination, or transfer the packet received from the central processing unit 110 to a designated place.

호스트 인터페이스(130)는 패킷을 중앙처리유닛(110)의 개입 없이 대량으로 전송하기 위해 DMA (Direct Memory Access) 엔진을 구비하고 있을 수 있다. 또한, 호스트 인터페이스(130)는 커맨드 프로세서(140)의 요청에 의해 저장소(120)에서 대량의 데이터를 읽어 오거나 저장소(120)로 데이터를 전송할 수 있다. The host interface 130 may be provided with a direct memory access (DMA) engine to transmit a large amount of packets without the intervention of the central processing unit 110. In addition, the host interface 130 may read a large amount of data from the storage 120 or transmit data to the storage 120 at the request of the command processor 140.

또한, 호스트 인터페이스(130)는 PCIe 인터페이스를 통해 접근 가능한 컨트롤 상태 레지스터를 구비할 수 있다. 본 실시예에 따른 시스템의 부팅 과정에서 호스트 인터페이스(130)는 시스템의 물리적인 주소를 할당 받게 된다(PCIe enumeration). 호스트 인터페이스(130)는 할당 받은 물리적인 주소 중 일부를 통해 컨트롤 상태 레지스터에 로드, 저장 등의 기능을 수행하는 방식으로 레지스터의 공간을 읽거나 쓸 수 있다. 호스트 인터페이스(130)의 레지스터들에는 호스트 인터페이스(130), 커맨드 프로세서(140), 메모리 컨트롤러(150), 그리고, 컴퓨팅 모듈(160)의 상태 정보가 저장되어 있을 수 있다. In addition, the host interface 130 may have a control status register accessible through a PCIe interface. During the booting of the system according to the present embodiment, the host interface 130 is assigned a physical address of the system (PCIe enumeration). The host interface 130 may read or write the space of the register in such a manner as to perform a function such as loading or storing the control status register through some of the allocated physical addresses. Registers of the host interface 130 may store state information of the host interface 130, the command processor 140, the memory controller 150, and the computing module 160.

도 1에서는 메모리 컨트롤러(150)가 중앙처리유닛(110)과 컴퓨팅 모듈(160)의 사이에 위치하지만, 반드시 그러한 것은 아니다. 예컨대, 중앙처리유닛(110)과 컴퓨팅 모듈(160)은 각기 다른 메모리 컨트롤러를 보유하거나, 각각 별도의 메모리 컨트롤러와 연결되어 있을 수 있다.In FIG. 1, the memory controller 150 is located between the CPU 110 and the computing module 160, but is not necessarily the case. For example, the CPU 110 and the computing module 160 may have different memory controllers or may be connected to separate memory controllers.

상술한 뉴럴 네트워크 프로세싱 시스템(100)에서, 이미지 판별과 같은 특정 작업은 소프트웨어로 기술되어 저장소(120)에 저장되어 있을 수 있고, 중앙처리유닛(110)에 의해 실행될 수 있다. 중앙처리유닛(110)은 프로그램 실행 과정에서 별도의 저장 장치(HDD, SSD 등)에서 뉴럴 네트워크의 가중치를 저장소(120)로 로드하고, 이것을 재차 컴퓨팅 모듈(160)의 저장소(170)로 로드할 수 있다. 이와 유사하게 중앙처리유닛(110)은 이미지 데이터를 별도의 저장 장치에서 읽어와 저장소(120)에 로드하고, 일부 변환 과정을 수행한 뒤 컴퓨팅 모듈(160)의 저장소(170)에 저장할 수 있다.In the neural network processing system 100 described above, certain tasks, such as image determination, may be described in software, stored in the storage 120, and executed by the central processing unit 110. The central processing unit 110 loads the weight of the neural network into the storage 120 in a separate storage device (HDD, SSD, etc.) during program execution, and loads the weight of the neural network into the storage 170 of the computing module 160 again. Can be. Similarly, the CPU 110 may read image data from a separate storage device, load the image data into the storage 120, perform some conversion process, and store the image data in the storage 170 of the computing module 160.

이후, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 저장소(170)에서 가중치와 이미지 데이터를 읽어 딥러닝의 추론 과정을 수행하도록 컴퓨팅 모듈(160)에 명령을 내릴 수 있다. 컴퓨팅 모듈(160)의 각 프로세싱 유닛(161)은 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행할 수 있다. 추론 과정이 완료된 뒤 결과는 저장소(170)에 저장될 수 있다. 중앙처리유닛(110)은 해당 결과를 저장소(170)에서 저장소(120)로 전송하도록 커맨드 프로세서(140)에 명령을 내릴 수 있으며, 최종적으로 사용자가 사용하는 소프트웨어로 그 결과를 전송할 수 있다. Thereafter, the CPU 110 may instruct the computing module 160 to read the weight and the image data from the storage 170 of the computing module 160 to perform the inference process of deep learning. Each processing unit 161 of the computing module 160 may perform processing according to an instruction of the central processing unit 110. After the inference process is completed, the result may be stored in the storage 170. The central processing unit 110 may instruct the command processor 140 to transmit the result from the storage 170 to the storage 120, and finally transmit the result to software used by the user.

도 2는 도 1에 도시된 프로세싱 유닛(161)의 세부 구성을 더욱 구체적으로 설명하기 위한 도면이다. FIG. 2 is a diagram for describing a detailed configuration of the processing unit 161 shown in FIG. 1 in more detail.

도 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)을 더 포함할 수 있다. 2, the processing unit 200 according to the present embodiment may include an instruction memory 210, a data memory 220, a data flow engine 240, and a control. Control flow engine 250 and functional unit 280. In addition, the processing unit 200 may further include a router 230, a register file 260, and a data fetch unit 270.

인스트럭션 메모리(210)는 하나 이상의 태스크(task)를 저장하도록 구성된다. 태스크는 하나 이상의 인스트럭션(instruction)으로 구성될 수 있다. 인스트럭션은 명령어 형태의 코드(code)일 수 있으나, 반드시 이에 제한되는 것은 아니다. 인스트럭션은 컴퓨팅 모듈(160)과 연결된 저장소(170), 컴퓨팅 모듈(160) 내부에 마련된 저장소 및 중앙처리유닛(110)과 연결된 저장소(120)에 저장될 수도 있다. The instruction memory 210 is configured to store one or more tasks. A task may consist of one or more instructions. Instructions may be code in the form of instructions, but are not necessarily limited thereto. The instruction may be stored in the storage 170 connected to the computing module 160, the storage provided in the computing module 160, and the storage 120 connected to the central processing unit 110.

본 명세서에서 설명되는 태스크는 프로세싱 유닛(200)에서 실행되는 프로그램의 실행 단위를 의미하고, 인스트럭션은 컴퓨터 명령어 형태로 형성되어 태스크를 구성하는 요소이다. 인공 신경망에서의 하나의 노드는f(Σ wi x xi) 등과 같은 복잡한 연산을 수행하게 되는데, 이러한 연산이 여러개의 태스크들에 의해 나눠져서 수행될 수 있다. 에컨대, 하나의 태스크로 인공 신경망에서의 하나의 노드가 수행하는 연산을 모두 수행할 수 있고, 또는 인공 신경망에서의 다수의 노드가 수행하는 연산을 하나의 태스크를 통해 연산하도록 할 수도 있다. 또한 위와 같은 연산을 수행하기 위한 명령어는 인스트럭션으로 구성될 수 있다.A task described herein refers to an execution unit of a program executed in the processing unit 200, and an instruction is formed in a computer instruction form to constitute a task. One node in an artificial neural network performs a complex operation such as f (Σw i xx i ), which may be divided and performed by several tasks. For example, one task may perform all the operations performed by one node in the artificial neural network, or may perform operations performed by a plurality of nodes in the artificial neural network through one task. In addition, the instruction for performing the above operation may be composed of instructions.

이해의 편의를 위해 태스크가 복수개의 인스트럭션들로 구성되고 각 인스트럭션은 컴퓨터 명령어 형태의 코드로 구성되는 경우를 예로 든다. 이 예시에서 하기한 컨트롤 플로우 엔진(250)의 프로그램 카운터(255)는 태스크가 보유한 복수개의 인스트럭션들을 순차적으로 실행하여 각 인스트럭션의 코드를 분석한다. 본 명세서에서는 이러한 과정을 통틀어서 “태스크를 실행한다” 또는 “태스크의 인스트럭션을 실행한다”라고 표현한다. 또한, 프로그램 카운터(255)에 의해 분석된 코드에 따른 수학적 연산은 하기한 수행 유닛(280)이 수행할 수 있으며, 수행 유닛(280)이 수행하는 작업을 본 명세서에서는 “연산”이라고 표현한다.For convenience, a task is composed of a plurality of instructions, and each instruction is composed of code in the form of computer instructions. In this example, the program counter 255 of the control flow engine 250 described below sequentially executes a plurality of instructions held by a task and analyzes the code of each instruction. In this specification, this process is referred to as "executing the task" or "execution of the task". In addition, the mathematical operation according to the code analyzed by the program counter 255 may be performed by the execution unit 280 described below, and the work performed by the execution unit 280 is referred to herein as “operation”.

데이터 메모리(220)는 태스크들과 연관된 데이터(data)를 저장하도록 구성된다. 여기서, 태스크들과 연관된 데이터는 태스크의 실행 또는 태스크의 실행에 따른 연산에 사용되는 입력 데이터, 출력 데이터, 가중치 또는 활성화값(activations)일 수 있으나, 반드시 이에 제한되는 것은 아니다.The data memory 220 is configured to store data associated with the tasks. Here, the data associated with the tasks may be, but is not necessarily limited to, input data, output data, weights, or activations used in the execution of the task or an operation according to the execution of the task.

라우터(230)는 뉴럴 네트워크 프로세싱 시스템(100)을 구성하는 구성요소들 간의 통신을 수행하도록 구성되며, 뉴럴 네트워크 프로세싱 시스템(100)을 구성하는 구성요소들 간의 중계 역할을 수행한다. 예컨대, 라우터(230)는 프로세싱 유닛들 간의 통신 또는 커맨드 프로세서(140)와 메모리 컨트롤러(150) 사이의 통신을 중계할 수 있다. 이러한 라우터(230)는 네트워크 온 칩(Network on Chip, NOC) 형태로 프로세싱 유닛(200) 내에 마련될 수 있다.The router 230 is configured to perform communication between the components constituting the neural network processing system 100, and serves as a relay between the components constituting the neural network processing system 100. For example, the router 230 may relay communication between processing units or communication between the command processor 140 and the memory controller 150. The router 230 may be provided in the processing unit 200 in the form of a network on chip (NOC).

데이터 플로우 엔진(240)은 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진(250)에 통지하도록 구성된다.The data flow engine 240 is configured to check whether data is prepared for the tasks and to notify the control flow engine 250 of whether the tasks are ready in order of the data ready tasks.

컨트롤 플로우 엔진(250)은 데이터 플로우 엔진(240)으로부터 통지 받은 순서대로 태스크의 실행을 제어하도록 구성된다. 또한, 컨트롤 플로우 엔진(250)은 태스크들의 인스트럭션을 실행함에 따라 발생하는 더하기, 빼기, 곱하기, 나누기와 같은 계산을 수행할 수도 있다. The control flow engine 250 is configured to control the execution of the task in the order received from the data flow engine 240. In addition, the control flow engine 250 may perform calculations such as addition, subtraction, multiplication, and division that occur as the instructions of the tasks are executed.

데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)에 대해서는 아래에서 더욱 상세하게 설명하도록 한다.The data flow engine 240 and the control flow engine 250 will be described in more detail below.

레지스터 파일(260)은 프로세싱 유닛(200)에 의해 빈번하게 사용되는 저장 공간으로서, 프로세싱 유닛(200)에 의해 코드들이 실행되는 과정에서 사용되는 레지스터를 하나 이상 포함한다.The register file 260 is a storage space frequently used by the processing unit 200 and includes one or more registers used in the process of executing codes by the processing unit 200.

데이터 페치 유닛(270)은 컨트롤 플로우 엔진(240)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)로부터 수행 유닛(280)에 페치하도록 구성된다. 또한, 데이터 페치 유닛(270)은 수행 유닛(280)이 구비한 복수개의 연산 모듈(281) 각각에 동일하거나 각기 다른 연산 대상 데이터를 페치할 수 있다.The data fetch unit 270 is configured to fetch calculation target data from the data memory 220 to the execution unit 280 according to one or more instructions of a task that the control flow engine 240 controls to execute. In addition, the data fetch unit 270 may fetch the same or different calculation target data to each of the plurality of calculation modules 281 included in the execution unit 280.

수행 유닛(280)은 컨트롤 플로우 엔진(240)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되며, 실제 연산을 수행하는 연산 모듈(computation module)(281)을 하나 이상 포함하도록 구성된다. 연산 모듈(281)들은 각각 더하기, 빼기, 곱셈, 곱셈 누적(multiply and accumulate, MAC)과 같은 수학적 연산을 수행하도록 구성된다. 수행 유닛(280)은 연산 모듈(281)들이 특정 단위 간격 또는 특정 패턴을 이룬 형태로 형성될 수 있다. 이와 같이 연산 모듈(281)들이 어레이 형태로 형성되는 경우 어레이 형태의 연산 모듈(281)들은 병렬적으로 연산을 수행하여 복잡한 행렬 연산과 같은 연산들을 일시에 처리할 수 있다.The performing unit 280 is configured to perform an operation according to one or more instructions of a task that the control flow engine 240 controls to execute, and includes one or more computational modules 281 that perform actual operations. It is composed. The arithmetic modules 281 are configured to perform mathematical operations such as add, subtract, multiply and multiply and accumulate (MAC), respectively. The execution unit 280 may be formed in a form in which the calculation modules 281 form a specific unit interval or a specific pattern. As described above, when the calculation modules 281 are formed in the form of an array, the calculation modules 281 in the form of an array may perform operations in parallel to process operations such as a complex matrix operation at a time.

도 2에서는 수행 유닛(280)은 컨트롤 플로우 엔진(240)과 분리된 형태로 도시되어 있으나, 수행 유닛(280)이 컨트롤 플로우 엔진(240)에 포함된 형태로 프로세싱 유닛(200)이 구현될 수 있다. In FIG. 2, the execution unit 280 is illustrated in a separate form from the control flow engine 240, but the processing unit 200 may be implemented in a form in which the execution unit 280 is included in the control flow engine 240. have.

수행 유닛(280)의 연산에 따른 결과 데이터는 컨트롤 플로우 엔진(250)에 의해 데이터 메모리(220)에 저장될 수 있다. 여기서, 데이터 메모리(220)에 저장된 결과 데이터는 해당 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용될 수 있다. 예컨대, 제1 프로세싱 유닛의 수행 유닛의 연산에 따른 결과 데이터는 제1 프로세싱 유닛의 데이터 메모리에 저장될 수 있고, 제1 프로세싱 유닛의 데이터 메모리에 저장된 결과 데이터는 제2 프로세싱 유닛에 이용될 수 있다.Result data according to the calculation of the execution unit 280 may be stored in the data memory 220 by the control flow engine 250. Here, the result data stored in the data memory 220 may be used for processing of a processing unit other than the processing unit including the corresponding data memory. For example, the result data according to the calculation of the performing unit of the first processing unit may be stored in the data memory of the first processing unit, and the result data stored in the data memory of the first processing unit may be used for the second processing unit. .

상술한 뉴럴 네트워크 프로세싱 시스템(100) 및 여기에 포함되는 프로세싱 유닛(200)을 이용하여 인공 신경망에서의 데이터 처리 장치 및 방법, 인공 신경망에서의 연산 장치 및 방법을 구현할 수 있다. The neural network processing system 100 and the processing unit 200 included therein may be used to implement a data processing apparatus and method in an artificial neural network and a computing apparatus and method in an artificial neural network.

도 3은 본 발명의 일 실시예에 따른 뉴럴 네트워크 프로세싱 시스템(100) 및 여기에 포함된 프로세싱 유닛(200)에 의해 수행되는 뉴럴 네트워크 프로세싱 방법을 설명하는 흐름도이다. 3 is a flowchart illustrating a neural network processing method performed by the neural network processing system 100 and the processing unit 200 included therein according to an embodiment of the present invention.

도 3을 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 상태를 초기화하는 단계(s310). 중앙처리유닛(110)이 컴퓨팅 모듈(160)이 특정 기능을 수행하도록 특정 구성요소에 명령을 전송하는 단계(s320), 컴퓨팅 모듈(160)이 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행하는 단계(s330), 그리고, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장하는 단계(s340)를 포함할 수 있다. s310 내지 s340의 단계에 대한 더욱 상세한 설명은 다음과 같다. Referring to FIG. 3, in the neural network processing method according to the present embodiment, the central processing unit 110 initializes the state of the computing module 160 (S310). The central processing unit 110 transmits a command to a specific component so that the computing module 160 performs a specific function (S320), and the computing module 160 performs processing according to the command of the central processing unit 110. In operation S330, the CPU 110 may store the results stored in the storage 170 of the computing module 160 in the storage 120 (S340). A more detailed description of the steps s310 to s340 is as follows.

본 실시예의 뉴럴 네트워크 프로세싱 방법에 따르면, 먼저, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 상태를 초기화할 수 있다(s310). 이 때, 중앙처리유닛(110)은 호스트 인터페이스(130)를 통해 커맨드 프로세서(140)에 컴퓨팅 모듈(160) 상태를 초기화하도록 명령할 수 있다.According to the neural network processing method of the present embodiment, first, the CPU 110 may initialize the state of the computing module 160 (S310). In this case, the CPU 110 may instruct the command processor 140 to initialize the state of the computing module 160 through the host interface 130.

다음, 중앙처리유닛(110)은 컴퓨팅 모듈(160)이 특정 기능을 수행하도록 특정 구성요소에 명령을 전송할 수 있다(s320). 예컨대, 중앙처리유닛(110)은 저장소(120)에 있는 하나 이상의 인스트럭션(instruction)이 하나 이상의 프로세싱 유닛(200)의 인스트럭션 메모리(210)에 로드(load)되도록 하는 명령을 커맨드 프로세서(140)에 전송할 수 있다.  Next, the CPU 110 may transmit a command to a specific component so that the computing module 160 performs a specific function (S320). For example, central processing unit 110 may send instructions to command processor 140 to cause one or more instructions in storage 120 to be loaded into instruction memory 210 of one or more processing units 200. Can transmit

여기서, 중앙처리유닛(110)은 저장소(120)에 있는 데이터를 메모리 컨트롤러(150)를 통해 컴퓨팅 모듈(160)의 저장소(170)에 저장하도록 커맨드 프로세서(140)에 명령할 수 있다. 또한, 중앙처리유닛(110)은 하나 이상의 가중치 및 입력값의 어드레스(address) 중 적어도 어느 하나 이상을 프로세싱 유닛(200)의 인스트럭션 메모리(210)에 저장된 태스크에 전달하여 컴퓨팅 모듈(160)이 프로세싱을 시작하도록 명령할 수도 있다. 이 때, 하나 이상의 가중치 및 입력값의 어드레스(address)는 컴퓨팅 모듈(160)의 저장소(170) 또는 중앙처리유닛(110)의 저장소(120)에 저장되어 있을 수 있다.Here, the CPU 110 may instruct the command processor 140 to store data in the storage 120 in the storage 170 of the computing module 160 through the memory controller 150. Further, the central processing unit 110 transmits at least one or more of one or more weights and addresses of input values to a task stored in the instruction memory 210 of the processing unit 200 so that the computing module 160 processes the processing. You can also tell it to start. In this case, one or more weights and addresses of input values may be stored in the storage 170 of the computing module 160 or the storage 120 of the central processing unit 110.

다음, 컴퓨팅 모듈(160)은 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행한다(s330). 여기서, 프로세싱 유닛(200)은 주어진 하나 이상의 인스트럭션에 따른 데이터 처리와 연산을 수행하고, 그 결과를 메모리 컨트롤러(150)를 통해 컴퓨팅 모듈(160)의 저장소(170)에 저장할 수 있다.Next, the computing module 160 performs processing according to the command of the central processing unit 110 (S330). Here, the processing unit 200 may perform data processing and operations according to one or more instructions, and store the result in the storage 170 of the computing module 160 through the memory controller 150.

다음, 중앙처리유닛(110)은 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장한다(s340). 저장 과정은 중앙처리유닛(110)이 커맨드 프로세서(140)에 명령하는 것을 통해 이루어질 수 있다.Next, the central processing unit 110 stores the result stored in the storage 170 of the computing module 160 to the storage 120 (s340). The storing process may be performed by the CPU 110 instructing the command processor 140.

상술한 s310 내지 s340의 단계들은 반드시 순차적으로 실행될 필요가 없으며, 각 단계들의 순서는 위와 다를 수 있고, 각 단계들은 거의 동시에 진행될 수도 있다.The above-described steps of s310 to s340 do not necessarily need to be executed sequentially, the order of each step may be different from the above, and each step may be performed almost simultaneously.

또한, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 상태를 초기화하는 단계(s310)와, 중앙처리유닛(110)이 컴퓨팅 모듈(160)의 저장소(170)에 저장되어 있는 결과를 저장소(120)로 저장하는 단계(s340)는 반드시 필요한 과정이 아니므로 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 s320단계와 s330단계만을 포함한 형태로 구현될 수도 있다.In addition, the central processing unit 110 initializes the state of the computing module 160 (s310), and the result of the central processing unit 110 is stored in the storage 170 of the computing module 160, the storage ( In operation S340, the neural network processing method according to the present embodiment may be implemented in a form including only steps s320 and s330.

도 4는 도 2에 도시된 프로세싱 유닛(200)을 이용한 뉴럴 네트워크 프로세싱 방법을 설명하는 흐름도이다. 4 is a flowchart illustrating a neural network processing method using the processing unit 200 illustrated in FIG. 2.

도 2 및 도 4를 참조하면, 본 실시예에 따른 뉴럴 네트워크 프로세싱 방법은 데이터 플로우 엔진(240)이 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진(250)에 통지하는 단계(s410), 컨트롤 플로우 엔진(250)이 데이터 플로우 엔진(240)으로부터 통지 받은 순서대로 태스크를 실행하도록 제어하는 단계(s420) 및 수행 유닛(280)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계(s440)를 포함한다. 2 and 4, in the neural network processing method according to the present embodiment, the data flow engine 240 checks whether data is prepared for tasks, and determines whether the tasks are completed in order of completion of data preparation. Notifying the control flow engine 250 (s410), controlling the control flow engine 250 to execute the tasks in the order received from the data flow engine 240 (s420), and performing unit 280 controls And performing operation according to one or more instructions of the task that the flow engine 250 controls to execute (s440).

s420 단계와 s440 단계 사이에 데이터 페치 유닛(270)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)로부터 수행 유닛(280)에 페치하는 단계(s430)와, s440단계 이후에, 컨트롤 플로우 엔진(250)이 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장하는 단계(s450)를 더 포함할 수 있다.Between the steps s420 and s440, the data fetch unit 270 fetches arithmetic target data from the data memory 220 to the execution unit 280 according to one or more instructions of a task that the control flow engine 250 executes. In operation S430 and after operation S440, the control flow engine 250 may further include storing the result data according to the calculation of the execution unit 280 in the data memory 220 (S450).

구체적으로, s410 단계와 같이, 하나의 태스크 자체는 데이터 플로우 방식에 따라 자신의 인스트럭션을 실행하는데 필요한 모든 데이터(예컨대, 피연산자)를 다른 구성요소로부터 전달 받아 실행할 준비가 완료되면 기타 다른 태스크들의 데이터 준비 여부와 상관 없이 자신의 다음 프로세싱 절차를 진행할 수 있다. Specifically, as in step s410, one task itself receives all data (eg, operands) required to execute its instructions according to the data flow method from other components when ready to execute data preparation of other tasks You can proceed with your next processing step, whether or not.

반면, 상술한 s420 단계와 같이, 각 태스크들의 인스트럭션들의 실행은 폰 노이만 방식(컨트롤 플로우 방식)에 따라 컨트롤 플로우 엔진(250)의 프로그램 카운터(255)에 의해 순차적으로 실행될 수 있다. On the other hand, as in the above-described step s420, the execution of the instructions of each task may be sequentially executed by the program counter 255 of the control flow engine 250 according to the von Neumann method (control flow method).

상술한 데이터 플로우 방식이란 프로세싱을 수행하는 요소들이 별도의 순서에 구속되지 않고 자신의 연산에 필요한 데이터들만 준비되면 각자 연산을 실행하는 방식을 의미한다. 또한, 폰 노이만 방식(컨트롤 플로우 방식)이란 연산 대상체들이 기 정해진 연산 순서에 따라 연산을 수행하는 것을 의미한다.The data flow method described above means a method of executing an operation when only elements necessary for its operation are prepared without being constrained in a separate order. In addition, the von Neumann method (control flow method) means that arithmetic objects perform a calculation according to a predetermined calculation order.

이해의 편의를 위해 0번 인덱스(index)를 가진 태스크, 1번 인덱스를 부여 받은 태스크 및 2번 인덱스를 부여 받은 태스크가 존재하는 경우를 예로 든다. 이 예시에서, 데이터 플로우 방식을 사용하는 데이터 플로우 엔진(240)은 2번 태스크가 자신의 실행에 필요한 데이터가 준비된 경우 0번 테스크 및 1번 태스크의 실행에 필요한 데이터가 준비되었는지 여부에 관계 없이 2번 태스크의 인덱스를 컨트롤 플로우 엔진(250)으로 전송한다. 반면, 같은 예시에서 폰 노이만 방식을 사용하는 컨트롤 플로우 엔진(250)은 데이터 플로우 엔진(250)으로부터 2번 태스크의 인덱스, 1번 태스크의 인덱스 및 0번 태스크의 인덱스를 순차적으로 수신한 경우, 처음으로 2번 태스크를 실행하고 두번째로 1번 태스크를 실행하며 마지막으로 0번 태스크를 실행한다. For the sake of convenience, a case where a task having an index 0, a task assigned an index 1, and a task assigned an index 2 exist. In this example, the data flow engine 240 using the data flow method is set to 2 regardless of whether task 2 and task 1 are prepared when task 2 is prepared for its execution. The index of the second task is transmitted to the control flow engine 250. In contrast, in the same example, when the control flow engine 250 using the von Neumann method sequentially receives the index of task 2, the index of task 1, and the index of task 0 from the data flow engine 250, Execute task 2, execute task 1 second, and execute task 0 last.

이와 관련하여, 별개의 수많은 연산을 수행하는 노드들을 포함하는 뉴럴 네트워크는 연산 효율을 높이기 위해 병렬 처리 구조에 유리한 데이터 플로우 방식을 활용한 연산 처리 구조를 채택하는 것이 자연스럽다. 폰 노이만 방식과 달리 데이터 플로우 방식을 뉴럴 네트워크의 연산에 적용하면, 비정규화된 병렬 연산 처리를 가능하게 하여 연산 효율이 높아진다. 하지만, 뉴럴 네트워크의 연산 처리 구조가 온전히 데이터 플로우 방식으로만 설계된다면, 폰 노이만 방식에 따라 순서적으로 실행되어야 유리한 연산의 경우에 일일이 연산에 필요한 데이터 준비 여부를 체크하는데 상당한 시간이 소요되므로, 불필요한 오버헤드(overhead)를 발생시키는 문제점이 있다. In this regard, it is natural for a neural network including nodes that perform a large number of separate operations to adopt an operation processing structure utilizing a data flow method that is advantageous for a parallel processing structure in order to increase operation efficiency. Unlike the von Neumann method, when the data flow method is applied to the neural network calculation, the denormalized parallel processing can be performed to increase the computational efficiency. However, if the neural network's arithmetic processing structure is designed entirely in the data flow method, it is necessary to execute it in order according to von Neumann method, so that it takes considerable time to check whether data is necessary for arithmetic operation in case of advantageous operation. There is a problem of generating overhead.

그러므로, 본 발명의 실시예들에서, 데이터 플로우 엔진(240)은 데이터 플로우 방식을 이용하여 특정 태스크가 필요로 하는 모든 데이터가 준비 상태가 되면 다른 태스크들의 준비 상태 여부나 순서에 관계없이 해당 태스크의 정보를 컨트롤 플로우 엔진(250)으로 전송한다. 결과적으로, 단일 태스크의 실행 여부는 다른 태스크들의 데이터 준비 여부와 관계 없이 독립적으로 판단되므로, 전체적인 프로세싱의 관점에서 보면 태스크들의 프로세싱 진행 속도 및 실행 속도를 높일 수 있다. Therefore, in the embodiments of the present invention, the data flow engine 240 uses the data flow method when all data required by a specific task is in a ready state, regardless of the ready state or order of other tasks. The information is transmitted to the control flow engine 250. As a result, whether a single task is executed is determined independently regardless of whether other tasks are prepared for data, and thus, the processing progress and execution speed of the tasks can be increased in view of the overall processing.

또한, 본 발명의 실시예들에서, 컨트롤 플로우 엔진(250)은 컨트롤 플로우 방식을 이용하여 데이터 플로우 엔진(240)으로부터 전달받은 태스크들의 정보의 순서에 따라 태스크 내에서의 인스트럭션들이 실행되도록 한다. 따라서, 본 실시예에 따른 컨트롤 플로우 엔진(250)을 이용하면, 데이터 플로우 방식에 따라 태스크 내에서의 인스트럭션들이 실행될 때 일일이 인스트럭션들의 데이터 준비 여부를 체크함에 따라 발생할 수 있는 오버헤드를 방지할 수 있다.In addition, in embodiments of the present invention, the control flow engine 250 causes the instructions in the task to be executed in the order of the information of the tasks received from the data flow engine 240 using the control flow method. Therefore, using the control flow engine 250 according to the present embodiment, it is possible to prevent the overhead that may occur when checking whether the instructions are prepared for data when instructions in a task are executed according to a data flow method. .

이와 같이, 본 발명의 실시예에 따르면, 데이터 플로우 방식과 컨트롤 플로우 방식을 혼합 적용하여 인공 신경망에서의 연산을 수행함으로써, 비정규화된 연산에 불리한 컨트롤 플로우 방식의 한계를 극복하고, 데이터 플로우 방식에서 발생할 수 있는 오버헤드를 없앨 수 있다. 이에 따라, 인공 신경망에서의 프로세싱 속도를 향상시킬 수 있고, 딥러닝의 학습, 훈련 및 추론 과정에 소모되는 시간을 줄일 수 있다.As described above, according to an exemplary embodiment of the present invention, the data flow method and the control flow method are mixed to perform an operation in an artificial neural network, thereby overcoming the limitation of the control flow method that is disadvantageous for denormalized operation, and in the data flow method. Eliminate the overhead that may occur. Accordingly, the processing speed in the artificial neural network can be improved, and the time spent on the learning, training, and reasoning process of deep learning can be reduced.

도 4에 도시된 s410 내지 s450의 단계들은 도 3에 도시된 컴퓨팅 모듈(160)이 중앙처리유닛(110)의 명령에 따라 프로세싱을 수행하는 단계(s330)에 포함되는 세부 과정에 해당할 수 있다. Steps s410 to s450 illustrated in FIG. 4 may correspond to detailed processes included in step s330 of the computing module 160 illustrated in FIG. 3 performing processing according to a command of the central processing unit 110. .

도 5는 도 2에 도시된 인스트럭션 메모리(210)와 데이터 메모리(220)를 더욱 구체적으로 설명하기 위해 도시한 도면이다.FIG. 5 is a diagram illustrating the instruction memory 210 and the data memory 220 illustrated in FIG. 2 in more detail.

도 2를 참조하여 설명한 바와 같이, 인스트럭션 메모리(210)는 하나 이상의 인스트럭션이 저장되는 공간으로서, 복수개의 인스트럭션들로 구성되는 태스크들(211)이 저장될 수 있다.As described with reference to FIG. 2, the instruction memory 210 is a space in which one or more instructions are stored, and tasks 211 including a plurality of instructions may be stored.

데이터 메모리(220)는 동적 메모리(dynamic memory)(221)와 정적 메모리(static memory)(222)를 포함한다. 동적 메모리(221)는 컨트롤 플로우 엔진(250)에 의해 현재 실행되는 태스크에 동적으로 할당되는 메모리이다. 정적 메모리(222)는 태스크가 실행되고 완료되는 것과 무관하게 프로그램이 데이터 메모리(220)에 로드될 때 할당되어 있는 메모리이다.The data memory 220 includes a dynamic memory 221 and a static memory 222. The dynamic memory 221 is a memory dynamically allocated to a task currently executed by the control flow engine 250. Static memory 222 is memory allocated when a program is loaded into data memory 220 regardless of whether a task is executed and completed.

한편, 태스크들(211) 각각은 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받은 소정의 동적 메모리 공간을 사용한다. 또한, 태스크들(211) 각각은 해제되지 않고 사용되어야 하는 데이터를 정적 메모리(222)의 일부 공간으로부터 할당 받아 사용할 수 있다.Meanwhile, each of the tasks 211 uses a predetermined dynamic memory space allocated from the dynamic memory 221 of the data memory 220. In addition, each of the tasks 211 may receive data to be used without being released from some space of the static memory 222.

동적으로 할당 받은 메모리 공간을 사용하는 태스크는 그 동적 메모리 공간에 있는 데이터를 다른 태스크에서도 사용할 수 있도록 다른 태스크들에게 전달할 수 있으며, 이 때 참조 계수의 숫자가 증가하게 된다. 참조 계수란 동적으로 할당 받은 메모리를 쓰는 태스크의 데이터를 참조하여 사용하는 태스크의 수를 의미한다. 데이터를 전달 받은 태스크가 데이터의 사용을 마쳤거나(즉, 태스크의 연산이 완료되었거나), 데이터를 복사해 가는 경우 참조 계수의 숫자는 감소한다.A task that uses a dynamically allocated memory space can pass data in that dynamic memory space to other tasks for use by other tasks, which increases the number of reference counts. The reference count refers to the number of tasks used by referring to data of a task that uses dynamically allocated memory. If the task that received the data has finished using the data (that is, the task has completed its operation) or is copying the data, the number of reference counts decreases.

예컨대, 태스크는 컨트롤 플로우 엔진(250)에 의해 필요한 동적 메모리 공간을 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받을 수 있으며, 동적으로 할당된 메모리는 다른 태스크로 값(value) 또는 레퍼런스(Reference) 형태로 전달될 수 있다. 이 때, 메모리를 전달 받은 태스크는 해당 메모리를 사용 후 응답(ack)을 처음 동적 메모리(221)로부터 할당 받은 태스크에 전달하여 참조 계수를 감소시키고, 이에 따라, 데이터 메모리(220)는 참조 계수가 0이 되는 시점에 태스크에 동적으로 할당된 메모리를 해제할 수 있다. For example, a task may allocate dynamic memory space required by the control flow engine 250 from the dynamic memory 221 of the data memory 220, and the dynamically allocated memory may be assigned to another task by using a value or reference ( Reference) can be delivered. At this time, the task receiving the memory reduces the reference count by transmitting a response (ack) to the task allocated from the first dynamic memory 221 after using the memory, and accordingly, the data memory 220 has a reference count. At zero, you can free the dynamically allocated memory for the task.

이와 같이, 동적 메모리(221)의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성될 수 있다. As such, after the predetermined space of the dynamic memory 221 is allocated to a specific task, the tasks including the specific task may be configured to be released when the data of the specific task are not used.

도 6은 도 4에 도시된 뉴럴 네트워크 프로세싱 방법의 세부 절차들의 구현예를 셜명하기 위해 도시한 도면이다.FIG. 6 is a diagram illustrating an implementation of detailed procedures of the neural network processing method illustrated in FIG. 4.

도 4 및 도 6을 참조하면, 도 4에 도시된 s410 단계는 데이터 플로우 엔진(240)이 인스트럭션 메모리(210)로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정(s601), 데이터 플로우 엔진(240)이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정(s602), 그리고, 데이터 플로우 엔진(240)이 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 태스크의 순서대로 컨트롤 플로우 엔진(250)으로 전송하는 과정(s603)을 포함할 수 있다.4 and 6, in operation S410 of FIG. 4, the data flow engine 240 receives information of indexes of the tasks and data associated with the tasks from the instruction memory 210. s601), a process in which the data flow engine 240 checks whether data required for each of the tasks is prepared (s602), and the task in which the data flow engine 240 prepares an index of tasks for which data is prepared It may include the step (s603) of transmitting to the control flow engine 250 in the order of.

이후 진행되는 s420 단계는 페치 준비 큐(251)가 데이터 플로우 엔진(240)으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정(s604), 페치 준비 큐(251)가 페치 블록(252)으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 페치 블록(252)은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 데이터 메모리(220)에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터 메모리(220)로 로드하는 과정(s605), 러닝 준비 큐(253)가 페치 블록(252)에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정(s606), 그리고, 러닝 준비 큐(253)가 러닝 블록(254)으로 태스크들의 인덱스를 순차적으로 전송하면(s607), 프로그램 카운터(255)가 러닝 블록(254)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정(s608)을 포함할 수 있다. s607 과정에서 러닝 블록(254)은 러닝 준비 큐(253)로부터 러닝 준비 큐(253)에 마련된 태스크의 인덱스를 순차적으로 전송 받게 되고, 이어서 s608과정에서 프로그램 카운터(255)는 러닝 블록(254)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행한다.In step s420, the fetch preparation queue 251 receives an index of tasks for which data is prepared from the data flow engine 240 (s604), and the fetch preparation queue 251 fetches the tasks to the fetch block 252. When the indexes are sequentially transmitted, the fetch block 252 checks whether data necessary for execution of a task corresponding to the received index exists in the data memory 220, and if not, loads the data from the outside into the data memory 220. In step s605, the running preparation queue 253 receives the index of the task in which the data load is completed in the fetch block 252 (s606), and the running preparation queue 253 transmits the tasks to the running block 254. When the indexes are sequentially transmitted (s607), the program counter 255 executes one or more instructions of a task corresponding to the index transmitted to the running block 254 (s608). Can be included. In operation S607, the running block 254 sequentially receives the indexes of tasks provided in the running preparation queue 253 from the running preparation queue 253, and then, in operation S608, the program counter 255 transmits to the running block 254. Execute one or more instructions of the task corresponding to the sent index.

도 4에 도시된 뉴럴 네트워크 프로세싱 방법을 참고하면, 상술한 s601 내지 s608의 과정들이 진행된 후 데이터 페치 유닛(270)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 데이터 메모리(220)에서 수행 유닛(280)에 페치하는 단계(s430)와, 수행 유닛(280)이 컨트롤 플로우 엔진(250)이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계(s440) 및 컨트롤 플로우 엔진(250)이 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장하는 단계(s450)가 진행될 수 있다.Referring to the neural network processing method illustrated in FIG. 4, after the processes s601 to s608 described above are performed, an operation target according to one or more instructions of a task in which the data fetch unit 270 controls the control flow engine 250 to execute. Fetching data from the data memory 220 to the execution unit 280 (s430), and performing the operation according to one or more instructions of a task for the execution unit 280 to control the control flow engine 250 to execute. In operation S440 and the control flow engine 250, operation S450 of storing the result data according to the calculation of the execution unit 280 in the data memory 220 may be performed.

추가적으로, 수행 유닛(280)의 연산에 따른 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛은 수행 유닛(280)의 연산에 따른 결과 데이터를 로드하여 자신의 프로세싱에 사용할 수 있다.In addition, a processing unit including a data memory in which the result data according to the operation of the execution unit 280 is stored, and another processing unit may load the result data according to the operation of the execution unit 280 and use it in its own processing.

도 7은 도 2에 도시된 데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)의 세부 구성들을 더욱 상세하게 설명하기 위해 도시한 도면이다.FIG. 7 is a diagram illustrating in detail the detailed configurations of the data flow engine 240 and the control flow engine 250 shown in FIG. 2.

도 6 및 도 7을 함께 참조하면, 데이터 플로우 엔진(240)은 태스크들(인덱스 0, 1, 2 ...)에 대한 상태를 관리한다. 예컨대, 데이터 플로우 엔진(240)은 인스트럭션 메모리(210)로부터 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고(s601), 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크한다(s602)). 여기서, 데이터 플로우 엔진(240)은 태스크들의 실행에 필요한 데이터의 어드레스를 별도의 저장소로부터 전송 받을 수 있다.6 and 7 together, the data flow engine 240 manages states for tasks (index 0, 1, 2 ...). For example, the data flow engine 240 receives an index of each task and information of data associated with the tasks from the instruction memory 210 (s601), and checks whether the data required by each of the tasks is prepared. (s602)). Here, the data flow engine 240 may receive an address of data required for executing tasks from a separate storage.

다음, 데이터 플로우 엔진(240)은 하나의 태스크 내에서 필요한 모든 데이터가 준비 상태가 되면, 컨트롤 플로우 엔진(250)에 있는 페치 준비 큐(ready to fetch queue)(251)에 준비 상태가 된 해당 태스크의 정보를 전송한다(s603). 여기서, 데이터 플로우 엔진(240)은 페치 준비 큐(251)로 준비 완료 상태 태스크의 인덱스만을 전송할 수 있다. Next, the data flow engine 240 is ready to the ready to fetch queue 251 in the control flow engine 250, when all the data required in one task is ready state The information of is transmitted (s603). Here, the data flow engine 240 may transmit only the index of the ready state task to the fetch ready queue 251.

다음, 컨트롤 플로우 엔진(250)은 페치 준비 큐(251)에 있는 태스크들을 선입선출법(First In First Out, FIFO) 방식으로 처리한다. 컨트롤 플로우 엔진(250)은 페치 준비 큐(251)의 순서상 가장 앞에 있는 태스크(예컨대, 도 7에서 가장 아래의 큐에 배치된 태스크)의 인덱스를 페치 블록(252)으로 전송한다. 다음, 컨트롤 플로우 엔진(250)은 페치 블록(252)에 전송된 인덱스에 해당하는 태스크가 필요로 하는 메모리를 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받는다. 다음, 컨트롤 플로우 엔진(250)은 동적 메모리(221)의 소정의 공간이 할당된 태스크의 데이터 로드를 수행한다(s604). 여기서, 데이터 로드는 컨트롤 플로우 엔진(250)이 태스크가 실행되기 위해 필요로 하는 데이터를 데이터 메모리(220)에 있는지 확인하여 가져오거나, 해당 데이터가 데이터 메모리(220)에 없는 경우 외부 장치(다른 프로세싱 유닛 또는 저장소 등)에서 해당 데이터를 데이터 메모리(220)로 로드하는 것을 의미한다.Next, the control flow engine 250 processes the tasks in the fetch preparation queue 251 in a first in first out (FIFO) manner. The control flow engine 250 transmits the index of the task in front of the fetch preparation queue 251 (eg, the task placed in the lowest queue in FIG. 7) to the fetch block 252. Next, the control flow engine 250 allocates memory required by the task corresponding to the index transmitted to the fetch block 252 from the dynamic memory 221 of the data memory 220. Next, the control flow engine 250 loads data of a task to which a predetermined space of the dynamic memory 221 is allocated (S604). Here, the data load is obtained by checking whether the data flow 220 is required by the control flow engine 250 to execute a task, or by using an external device (other processing when the data is not present in the data memory 220). Unit or storage) to load the data into the data memory 220.

다음, 컨트롤 플로우 엔진(250)은 페치 블록(252)에서 데이터 로드가 완료된 태스크의 인덱스를 러닝 준비 큐(253)에 전송한다(s605), 그러면, 러닝 준비 큐(253)는 러닝 준비 큐에 있는 태스크들의 인덱스를 순서대로 러닝 블록(254)으로 전달한다(s606), 러닝 블록(254)에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션은 프로그램 카운터(255)에 의해 폰 노이만 방식으로 순차적으로 실행된다(s607). Next, the control flow engine 250 transmits the index of the task in which data loading is completed in the fetch block 252 to the running preparation queue 253 (s605), and the running preparation queue 253 is in the running preparation queue. The indices of the tasks are sequentially transmitted to the running block 254 (s606), and one or more instructions of the tasks corresponding to the indexes transmitted to the running block 254 are sequentially executed in the Phon Neumann manner by the program counter 255. (S607).

도 7에 도시된 페치 준비 큐(251) 및 러닝 준비 큐(253)에는 다수의 태스크들이 할당될 수 있으므로, 페치 준비 큐(251) 및 러닝 준비 큐(253)는 태스크들이 할당되는 블록을 각각 1개 내지 128개 또는 그 이상 구비할 수 있다.Since a plurality of tasks may be allocated to the fetch preparation queue 251 and the running preparation queue 253 illustrated in FIG. 7, the fetch preparation queue 251 and the running preparation queue 253 each designate a block to which tasks are assigned. And from 128 to more.

이해의 편의를 위해, 명령어 형태의 코드(곱하기, 더하기 등)로 구성된 다수의 인스트럭션들을 포함하고 있고 인덱스가 0번인 태스크가 존재하고, 인스트럭션 메모리(210)의 1000, 1004, 1008 등의 번지 수에 해당하는 공간에 각각 0번 태스크의 인스트럭션들이 저장되어 있는 경우를 예로 든다. For the convenience of understanding, there is a task including a plurality of instructions composed of code in the form of instructions (multiply, plus, etc.), index 0, and address number 1000, 1004, 1008, etc. of the instruction memory 210. For example, instructions of task 0 are stored in the corresponding space.

위 예에서, 0번 태스크가 필요로 하는 모든 데이터가 준비되면 데이터 플로우 엔진(240)은 0번 태스크의 인덱스를 컨트롤 플로우 엔진(250)으로 전송한다. 이 때, 컨트롤 플로우 엔진(250)은 데이터 플로우 엔진(240)이 이미 알고 있는 정보에 의해 인스트럭션 메모리(210)의 1000, 1004, 1008 번지에 0번 태스크의 인스트럭션이 존재하는 것을 알 수 있다. 이후, 컨트롤 플로우 엔진(250)은 인스트럭션 메모리(210)의 1000번지에서 0번 태스크의 인스트럭션을 가져와서 실행하고, 그 다음 1004 및 1008번지에서 0번 태스크의 인스트럭션을 가져와서 실행한다. 이 때, 프로그램 카운터(255)에는 컨트롤 플로우 엔진(250)이 현재 실행하고 있는 번지수가 할당될 수 있다. In the above example, when all data required by task 0 is prepared, the data flow engine 240 transmits the index of task 0 to the control flow engine 250. At this time, the control flow engine 250 may know that the instruction of task 0 exists at 1000, 1004, and 1008 of the instruction memory 210 based on the information already known by the data flow engine 240. Thereafter, the control flow engine 250 obtains and executes an instruction of task 0 at address 1000 of the instruction memory 210, and then executes an instruction of task 0 at addresses 1004 and 1008. At this time, the program counter 255 may be assigned a number of addresses that the control flow engine 250 is currently executing.

또한, 컨트롤 플로우 엔진(250)에 의해 실행된 인스트럭션들에 따른 연산 대상 데이터는 데이터 메모리(220)에 저장될 수 있다. 이후, 데이터 페치 유닛(270)은 연산 대상 데이터를 가져와 수행 유닛(280)에 마련된 하나 이상의 연산 모듈(281) 각각에 데이터를 페치할 수 있고, 연산 모듈(281)들은 연산 대상 데이터에 따른 수학적 연산을 수행할 수 있다.In addition, the calculation target data according to the instructions executed by the control flow engine 250 may be stored in the data memory 220. Thereafter, the data fetch unit 270 may fetch data to be calculated and fetch data into each of the one or more calculation modules 281 provided in the execution unit 280, and the calculation modules 281 may perform mathematical operations according to the data to be calculated. Can be performed.

이에 더하여, 컨트롤 플로우 엔진(250)은 수행 유닛(280)의 연산에 따른 결과 데이터를 데이터 메모리(220)에 저장할 수 있고, 이러한 결과 데이터는 추후 상기 결과 데이터를 필요로 하는 태스크에 이용될 수 있다. 또한, 데이터 플로우 엔진(240) 또는 다른 프로세싱 유닛의 데이터 플로우 엔진은 데이터 메모리(220)에 저장된 결과 데이터를 필요로 하는 태스크의 데이터 준비 여부를 체크할 수 있다.In addition, the control flow engine 250 may store the result data according to the calculation of the execution unit 280 in the data memory 220, and the result data may be used later for a task requiring the result data. . In addition, the data flow engine 240 or the data flow engine of another processing unit may check whether data of a task requiring result data stored in the data memory 220 is prepared.

위 내용을 참조하여, 본 발명의 일 실시예에 따라 데이터 플로우 엔진(240)과 컨트롤 플로우 엔진(250)이 수행하는 일련의 과정들의 구체적인 구현예에 대해 설명하면 다음과 같다.Referring to the above, a specific implementation of a series of processes performed by the data flow engine 240 and the control flow engine 250 according to an embodiment of the present invention will be described.

먼저, 프로세싱 유닛(200)은 외부(자신이 보유한 저장소, 자신과 연결된 외부의 저장소, 다른 프로세싱 유닛, 또는 커맨드 프로세서)로부터 데이터 정보 패킷을 전달받는다. 데이터 정보 패킷은 각각 목적지가 되는 태스크의 주소(또는 ID)와 피연산자 주소, 그리고 데이터의 소스 어드레스(source address) 중 적어도 어느 하나 이상을 포함할 수 있다. 프로세싱 유닛(200)의 데이터 플로우 엔진(240)은 전달받은 데이터 정보 패킷의 목적지에 해당하는 태스크의 피연산자 상태를 업데이트한다. 이와 같이, 데이터 플로우 엔진(240)은 태스크의 피연산자 상태, 데이터의 준비 상태 여부 및 데이터의 소스 어드레스를 관리할 수 있다.First, the processing unit 200 receives a packet of data information from the outside (stores that it owns, external storages connected to it, other processing units, or command processors). Each data information packet may include at least one of an address (or ID), an operand address, and a source address of data as a destination. The data flow engine 240 of the processing unit 200 updates an operand state of a task corresponding to a destination of the received data information packet. As such, the data flow engine 240 may manage the operand state of the task, whether the data is ready, and the source address of the data.

다음, 데이터 플로우 엔진(240)은 데이터 정보 패킷을 전송받아 태스크의 피연산자 상태를 체크한다. 이후, 만약 그 태스크가 필요로 하는 모든 피연산자가 준비된 상태라면, 데이터 플로우 엔진(240)은 해당 태스크의 인덱스를 컨트롤 플로우 엔진(250)의 페치 준비 큐(251)에 전송한다.Next, the data flow engine 240 receives the data information packet and checks the operand state of the task. Thereafter, if all operands required by the task are ready, the data flow engine 240 transmits the index of the task to the fetch preparation queue 251 of the control flow engine 250.

다음, 컨트롤 플로우 엔진(250)은 페치 준비 큐(251)의 순서상 가장 앞에 위치한 태스크의 인덱스를 팝(pop)하여 페치 블록(252)으로 전송한다. 또한, 컨트롤 플로우 엔진(250)은 페치 블록(252)에 전송된 인덱스에 해당하는 태스크가 필요로 하는 메모리를 데이터 메모리(220)의 동적 메모리(221)로부터 할당 받는다. 여기서, 컨트롤 플로우 엔진(250)은 페치 블록(252)에 전송된 인덱스에 해당하는 태스크에 대한 데이터를 데이터 플로우 엔진(240)에 저장되어 있는 피연산자의 정보로부터 읽어올 수 있다. 피연산자의 정보에는 데이터의 소스 어드레스가 존재하므로, 컨트롤 플로우 엔진(250)은 데이터의 소스 어드레스로 읽기 요청(read request) 패킷을 전송한다. 읽기 요청 패킷은 소스 어드레스에 따라 다른 프로세싱 유닛 또는 컴퓨팅 모듈의 메모리 컨트롤러 또는 호스트의 메모리 컨트롤러로 전달될 수 있다. 또한, 컨트롤 플로우 엔진(250)은 판독한 소스 어드레스가 자신이 포함된 프로세싱 유닛인 경우 데이터 전송을 생략할 수 있다. Next, the control flow engine 250 pops the index of the task located in front of the fetch preparation queue 251 to the fetch block 252. In addition, the control flow engine 250 allocates the memory required by the task corresponding to the index transmitted to the fetch block 252 from the dynamic memory 221 of the data memory 220. Here, the control flow engine 250 may read data about the 'task' corresponding to the index transmitted to the fetch block 252 from information of operands stored in the data flow engine 240. Since the source address of the data exists in the information of the operand, the control flow engine 250 transmits a read request packet to the source address of the data. The read request packet may be delivered to a memory controller of a host or a memory controller of another processing unit or computing module according to a source address. In addition, the control flow engine 250 may omit data transmission when the read source address is a processing unit included therein.

다음, 컨트롤 플로우 엔진(250)이 페치 블록(252)에 전송된 인덱스에 해당하는 태스크로 전송한 읽기 요청 패킷에 대한 읽기 응답(read response)을 받으면, 프로세싱 유닛(200)은 읽기 응답을 할당 받은 동적 메모리에 저장한다. 컨트롤 플로우 엔진(250)은 자신이 전송한 모든 읽기 요청 패킷에 대한 모든 읽기 응답을 받은 태스크의 인덱스를 러닝 준비 큐(253)에 전송한다. 이후 페치 블록(252)은 전술한 과정들을 반복 수행할 수 있다.Next, when the control flow engine 250 receives a read response to a read request packet transmitted to the task corresponding to the index transmitted to the fetch block 252, the processing unit 200 receives the read response. Store in dynamic memory. The control flow engine 250 transmits to the running preparation queue 253 an index of a task that has received all read responses for all read request packets transmitted by the control flow engine 250. The fetch block 252 may then repeat the above-described processes.

다음, 컨트롤 플로우 엔진(250)은 러닝 준비 큐(253)의 순서상 앞에 위치한 태스크의 인덱스를 팝하여, 러닝 블록(254)에 전송한다. 또한, 컨트롤 플로우 엔진(250)은 러닝 블록(254)에 전송된 인덱스에 해당하는 태스크에 대한 인스트럭션 메모리(210)의 어드레스를 데이터 플로우 엔진(240)으로부터 읽어와 프로그램 카운터(255)에 넣는다. 이후, 컨트롤 플로우 엔진(250)은 해당 태스크의 실행을 위해 해당 태스크의 하나 이상의 인스트럭션을 인스트럭션 메모리(210)에서 읽어와 실행한다. 그리고 프로그램 카운터(255)는 해당 태스크에 포함된 인스트럭션들의 수만큼 참조 계수를 증가시켜 해당 태스크의 모든 인스트럭션들을 수행한다. 수행 과정에서 컨트롤 플로우 엔진(250)은 각 태스크의 연산 결과를 데이터 메모리(220)에 저장할 수 있으며, 데이터 정보 패킷을 통해 데이터 메모리(220)에 저장된 연산 결과를 기 지정된 다음 연산 대상 태스크로 전달할 수 있다. 데이터 정보 패킷을 전달 받은 프로세싱 유닛은 상술한 과정들을 계속해서 수행할 수 있다.Next, the control flow engine 250 pops the index of the task located in front of the running preparation queue 253 and transmits the index to the running block 254. In addition, the control flow engine 250 reads the address of the instruction memory 210 for the task corresponding to the index transmitted to the running block 254 from the data flow engine 240 and puts it into the program counter 255. Thereafter, the control flow engine 250 reads one or more instructions of the task from the instruction memory 210 to execute the task. The program counter 255 performs all instructions of the task by increasing the reference count by the number of instructions included in the task. In the performing process, the control flow engine 250 may store the operation result of each task in the data memory 220, and transfer the operation result stored in the data memory 220 to the next operation target task through the data information packet. have. The processing unit receiving the data information packet may continue to perform the above-described processes.

상술한 과정들은 하나의 프로세싱 유닛을 기준으로 설명되었으나, 컴퓨팅 모듈(160)의 모든 프로세싱 유닛들은 상기한 과정들을 각각 수행할 수 있다. 또한, 상기한 과정들은 반드시 순차적으로 실행될 필요가 없으며, 거의 동시에 진행될 수도 있다.Although the above-described processes are described based on one processing unit, all the processing units of the computing module 160 may perform the above-described processes, respectively. In addition, the above processes do not necessarily need to be executed sequentially, and may be performed almost simultaneously.

도 8은 컨트롤 플로우 엔진(250)과 인스트럭션 메모리(210)간의 상호작용 및 데이터 페치 유닛(270)과 데이터 메모리(220)간의 상호작용을 설명하기 위해 도시한 도면이다. FIG. 8 is a diagram illustrating the interaction between the control flow engine 250 and the instruction memory 210 and the interaction between the data fetch unit 270 and the data memory 220.

도 8을 참조하면, 앞서 도 7을 참조하여 설명한 예에서 컨트롤 플로우 엔진(250)의 프로그램 카운터(255)가 인스트럭션 메모리(210)로부터 특정 번지수에 해당하는 인스트럭션의 명령어를 가져올 수 있음을 알 수 있다. 또한, 같은 예에서, 데이터 페치 유닛(270)이 데이터 메모리(220)에 저장된 태스크 실행에 따른 연산 대상 데이터를 수행 유닛(280)에 페치하고, 복수개의 연산 모듈(281)들 각각은 연산 대상 데이터에 따른 연산을 수행할 수 있음을 알 수 있다.Referring to FIG. 8, it can be seen that in the example described with reference to FIG. 7, the program counter 255 of the control flow engine 250 may obtain an instruction of an instruction corresponding to a specific address from the instruction memory 210. have. Also, in the same example, the data fetch unit 270 fetches the calculation target data according to the execution of the task stored in the data memory 220 to the execution unit 280, and each of the plurality of calculation modules 281 is the calculation target data. It can be seen that the operation according to.

한편, 컨트롤 플로우 엔진(250)이 태스크를 실행하도록 제어하는 과정에서 실행되는 태스크는 다른 태스크로 데이터를 전송할 수 있으며, 이 때 상술한 바와 같이 참조 계수가 증가할 수 있다. 이는 컨트롤 플로우 엔진(250)이 태스크를 실행하도록 제어하는 과정에서 연산 결과가 발생하는데, 본 실시예에 따라 태스크들이 상호 간에 데이터를 주고 받을 때, 동적 메모리의 할당 및 해제를 하드웨어에서 지원함으로써 프로그래밍 모델을 간단하게 구성할 수 있도록 하기 위함이다.Meanwhile, the task executed in the process of controlling the execution of the task by the control flow engine 250 may transmit data to another task, and the reference count may increase as described above. This results in the operation of the control flow engine 250 to control the execution of the task, according to the present embodiment, when the tasks exchange data with each other, according to the present embodiment, the hardware supports the allocation and deallocation of dynamic memory in the programming model This is to simplify the configuration.

예컨대, 순차적인 연산이 복수개의 태스크에 나누어 처리되도록 뉴럴 네트워크 프로세싱 시스템이 구현된 경우, 컨트롤 플로우 엔진(250)은 태스크를 실행하도록 제어하는 과정에서 발생한 연산 결과를 다음 태스크가 받도록 하고, 연산 결과를 받은 태스크는 다음 연산을 수행하도록 수 있다. 컨트롤 플로우 엔진(250)이 태스크를 실행하는 과정에서 연산 결과가 나오면 그 즉시 연산 결과를 필요로 하는 다른 태스크에 전달하고, 연산 결과를 전달 받은 태스크는 다음 연산을 수행할 수 있으므로, 프로세싱 유닛(200)의 연산 처리 속도를 높일 수 있다.For example, when a neural network processing system is implemented such that a sequential operation is divided into a plurality of tasks, the control flow engine 250 causes the next task to receive an operation result generated in the process of controlling to execute the task, and receives the operation result. The received task can perform the following operation. When the control flow engine 250 generates a calculation result while executing a task, the control flow engine 250 immediately transfers the calculation result to another task that requires the calculation result, and the task that has received the calculation result may perform the next operation. Can speed up the computation process.

또한, 본 발명의 실시예들에 따르면, 전체적인 프로세싱의 관점에서 태스크들의 프로세싱 진행 속도 및 실행 속도를 높이기 위해 ,데이터 플로우 엔진이 태스크들의 데이터 준비 완료 여부를 체크하여 태스크들이 실행되도록 컨트롤 플로우 엔진에 전송하는 단계까지는 데이터 플로우 방식을 사용한다. 또한, 본 발명의 실시예들에 따르면, 데이터 플로우 방식에 따른 오버헤드를 제거하기 위해 컨트롤 플로우 엔진에 의해 순차적인 실행이 필요한 태스크들의 실행을 제어하는 단계와 실행하는 단계에서는 폰 노이만 방식을 사용할 수 있다. Further, according to embodiments of the present invention, in order to increase the processing progress speed and execution speed of tasks in terms of overall processing, the data flow engine checks whether the tasks are ready for data and transmits them to the control flow engine for execution of the tasks. Up to this step, the data flow method is used. In addition, according to embodiments of the present invention, in order to remove the overhead according to the data flow method, the von Neumann method may be used in the step of controlling and executing the execution of tasks requiring sequential execution by the control flow engine. have.

상술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.The description of the present invention described above is for illustrative purposes, and it will be understood by those skilled in the art that the present invention may be easily modified in other specific forms without changing the technical spirit or essential features of the present invention. will be. Therefore, it should be understood that the embodiments described above are exemplary in all respects and not restrictive. The scope of the present invention is represented by the following claims, and it should be construed that all changes or modifications derived from the meaning and scope of the claims and their equivalents are included in the scope of the present invention.

Claims (33)

뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 프로세싱 유닛에 있어서,
하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리;
상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리;
상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진에 통지하도록 구성되는 데이터 플로우 엔진;
상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진; 및
상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛.
A processing unit configured to perform processing of a neural network, the processing unit comprising:
An instruction memory configured to store tasks having one or more instructions;
A data memory configured to store data associated with the tasks;
A data flow engine configured to check whether data is prepared for the tasks, and notify a control flow engine of whether the tasks are ready in order of a data ready task;
A control flow engine configured to control execution of a task in an order received from the data flow engine; And
And an execution unit configured to perform an operation according to one or more instructions of a task that the control flow engine controls to execute.
제1항에 있어서,
상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
And a data fetch unit configured to fetch operation target data according to one or more instructions of a task for the control flow engine to execute from the data memory to the performing unit.
제1항에 있어서,
상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
The control flow engine is a neural network processing unit, characterized in that for storing the result data according to the operation of the execution unit in the data memory.
제1항에 있어서,
외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
And a router configured to relay communication between an external device and the processing unit.
제1항에 있어서,
상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
And a register file configured to have at least one register which is a storage space used in the process of executing a task by the control flow engine.
제1항에 있어서,
상기 데이터 메모리는 동적 메모리를 포함하며,
상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
The data memory comprises a dynamic memory,
The predetermined space of the dynamic memory is allocated to a specific task, and the neural network processing unit is configured to be released if the tasks including the specific task do not use the data of the specific task.
제1항에 있어서,
상기 데이터 플로우 엔진은,
상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하며, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
The data flow engine,
Receiving the index of each of the tasks and data associated with the tasks from the instruction memory, checking whether the data required by each of the tasks is prepared, and checking the index of the tasks on which the data is prepared And transmit to the control flow engine as is.
제7항에 있어서,
상기 컨트롤 플로우 엔진은,
상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐;
상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록;
상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐;
상기 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록; 및
상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 7, wherein
The control flow engine,
A fetch preparation queue configured to receive an index of tasks for which data is prepared from the data flow engine;
A fetch block configured to check whether data necessary for execution of a task corresponding to an index received from the fetch preparation queue exists in the data memory, and to load data from the outside into the data memory;
A running preparation queue configured to receive an index of a task in which data loading is completed in the fetch block;
A running block configured to sequentially receive indexes of tasks provided in the running preparation queue from the running preparation queue; And
And a program counter configured to execute one or more instructions of a task corresponding to the index sent to the running block.
제1항에 있어서,
상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 1,
The execution unit is a neural network processing unit, characterized in that the operation module for performing the operation is formed in a form of a specific pattern.
하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 유닛을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서,
(i) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고 데이터 준비가 완료된 순서대로 상기 태스크들의 준비 완료 여부를 상기 컨트롤 플로우 엔진에 통지하는 단계;
(ii) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크를 실행하도록 제어하는 단계; 및
(iii) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법.
Neural using a neural network processing unit comprising an instruction memory configured to store tasks having one or more instructions, a data memory configured to store data associated with the tasks, a data flow engine, a control flow engine and an execution unit In the method of performing the processing of the network,
(i) checking, by the data flow engine, whether the data is ready for the tasks and notifying the control flow engine of whether the tasks are ready in order of completion of data preparation;
(ii) controlling, by the control flow engine, to execute the tasks in the order of notification from the data flow engine; And
(iii) the performing unit performing an operation in accordance with one or more instructions of a task that controls the control flow engine to execute.
제10항에 있어서,
상기 뉴럴 네트워크 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고,
상기 뉴럴 네트워크 프로세싱 방법은 상기 (ii) 단계와 상기 (iii) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 10,
The neural network processing unit further comprises a data fetch unit,
The neural network processing method further comprises, between step (ii) and step (iii), the data fetch unit from the data memory for calculating arithmetic object data according to one or more instructions of a task that the control flow engine executes. And fetching into the performing unit.
제10항에 있어서,
상기 (iii) 단계 이후에, 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 10,
After the step (iii), the control flow engine further comprises storing the result data according to the operation of the performing unit in the data memory.
제10항에 있어서,
상기 (i) 단계는,
상기 데이터 플로우 엔진이, 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정;
상기 데이터 플로우 엔진이, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정; 및
상기 데이터 플로우 엔진이, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 10,
In step (i),
Receiving, by the data flow engine, information of an index of each of the tasks and data associated with the tasks from the instruction memory;
Checking, by the data flow engine, whether data required by each of the tasks is prepared; And
And transmitting, by the data flow engine, the indexes of tasks for which data is prepared to the control flow engine in the order of preparation of data.
제10항에 있어서,
상기 컨트롤 플로우 엔진은 페치 준비 큐, 페치 블록, 러닝 준비 큐, 러닝 블록 및 프로그램 카운터를 더 포함하고,
상기 (ii) 단계는,
상기 페치 준비 큐가 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정;
상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 데이터를 상기 데이터 메모리로 로드하는 과정;
상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정;
상기 러닝 준비 큐가 상기 러닝 블록으로 태스크들의 인덱스를 순차적으로 전송하면, 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 10,
The control flow engine further includes a fetch preparation queue, a fetch block, a running preparation queue, a running block, and a program counter,
Step (ii),
Receiving, by the fetch preparation queue, an index of tasks in which data is prepared from the data flow engine;
When the fetch preparation queue sequentially transmits the indexes of the tasks to the fetch block, the fetch block checks whether data necessary for the execution of the task corresponding to the received index exists in the data memory, and if not, sends the data from the outside. Loading data into the data memory;
Receiving, by the running preparation queue, an index of a task in which data loading is completed in the fetch block;
And when the running preparation queue sequentially transmits indexes of tasks to the running block, the program counter executing one or more instructions of a task corresponding to the index transmitted to the running block. Processing method.
뉴럴 네트워크의 프로세싱을 수행하도록 구성되는 시스템에 있어서,
중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 구비하는 컴퓨팅 모듈을 포함하고,
상기 프로세싱 유닛은,
하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리;
상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리;
상기 태스크들을 대상으로 데이터 준비 여부를 체크하고, 데이터 준비가 완료된 태스크의 순서대로 상기 태스크들의 준비 완료 여부를 컨트롤 플로우 엔진에 통지하도록 구성되는 데이터 플로우 엔진;
상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크의 실행을 제어하도록 구성되는 컨트롤 플로우 엔진; 및
상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하도록 구성되는 수행 유닛을 하나 이상 구비하는 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템.
A system configured to perform processing of a neural network,
A computing module having at least one processing unit and a processing unit performing processing according to the instructions of the processing unit;
The processing unit,
An instruction memory configured to store tasks having one or more instructions;
A data memory configured to store data associated with the tasks;
A data flow engine configured to check whether data is prepared for the tasks, and notify a control flow engine of whether the tasks are ready in order of the data ready tasks;
A control flow engine configured to control execution of a task in an order received from the data flow engine; And
And an execution unit having one or more execution units configured to perform operations according to one or more instructions of a task that the control flow engine controls to execute.
제15항에 있어서,
상기 프로세싱 유닛은
상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를, 상기 데이터 메모리로부터 상기 수행 유닛에 페치하도록 구성되는 데이터 페치 유닛을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
The processing unit
And a data fetch unit configured to fetch operation target data according to one or more instructions of a task that the control flow engine controls to execute from the data memory to the performing unit.
제15항에 있어서,
상기 컨트롤 플로우 엔진은 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
The control flow engine is a neural network processing system, characterized in that for storing the result data according to the operation of the execution unit in the data memory.
제16항에 있어서,
상기 데이터 메모리에 저장된 결과 데이터는 상기 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛의 프로세싱에 사용되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 16,
The resulting data stored in the data memory is used for processing of processing units other than the processing unit including the data memory.
제15항에 있어서,
상기 중앙처리유닛과 상기 컴퓨팅 모듈을 연결하여 상기 중앙처리유닛과 상기 컴퓨팅 모듈간의 통신이 수행되도록 구성되는 호스트 인터페이스를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
And a host interface configured to connect the central processing unit and the computing module to perform communication between the central processing unit and the computing module.
제15항에 있어서,
상기 중앙처리유닛의 명령을 상기 컴퓨팅 모듈로 전달하도록 구성되는 커맨드 프로세서를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
And a command processor configured to deliver instructions of the central processing unit to the computing module.
제15항에 있어서,
상기 중앙처리유닛과 상기 컴퓨팅 모듈 각각의 데이터 전송 및 저장을 제어하도록 구성되는 메모리 컨트롤러를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
And a memory controller configured to control data transfer and storage of each of the central processing unit and the computing module.
제15항에 있어서,
상기 프로세싱 유닛은
외부 장치와 상기 프로세싱 유닛 사이의 통신을 중계하도록 구성되는 라우터와, 상기 컨트롤 플로우 엔진에 의해 태스크가 실행되는 과정에서 사용되는 저장 공간인 레지스터를 하나 이상 구비하도록 구성되는 레지스터 파일을 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
The processing unit
And a register file configured to include a router configured to relay communication between an external device and the processing unit, and one or more registers which are storage spaces used in a process of executing a task by the control flow engine. Neural network processing system.
제15항에 있어서,
상기 데이터 메모리는 동적 메모리를 포함하며,
상기 동적 메모리의 소정의 공간은 특정 태스크에 할당된 후, 상기 특정 태스크를 포함하는 태스크들이 상기 특정 태스크의 데이터를 사용하지 않는 경우 해제되도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
The data memory comprises a dynamic memory,
The predetermined space of the dynamic memory is allocated to a particular task, and the neural network processing system is configured to be released if the tasks including the specific task do not use data of the specific task.
제15항에 있어서,
상기 수행 유닛은 연산을 수행하는 연산 모듈이 특정 패턴을 이룬 형태로 형성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 유닛.
The method of claim 15,
The execution unit is a neural network processing unit, characterized in that the operation module for performing the operation is formed in a form of a specific pattern.
제15항에 있어서,
상기 데이터 플로우 엔진은,
상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받고, 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하며, 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하도록 구성되는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 15,
The data flow engine,
Receiving the index of each of the tasks and data associated with the tasks from the instruction memory, checking whether the data required by each of the tasks is prepared, and checking the index of the tasks on which the data is prepared And transmit to the control flow engine as is.
제25항에 있어서,
상기 컨트롤 플로우 엔진은,
상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받도록 구성되는 페치 준비 큐;
상기 페치 준비 큐로부터 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 외부로부터 데이터를 상기 데이터 메모리로 로드하도록 구성되는 페치 블록;
상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받도록 구성되는 러닝 준비 큐;
상기 러닝 준비 큐로부터 상기 러닝 준비 큐에 마련된 태스크들의 인덱스를 순차적으로 전송 받도록 구성되는 러닝 블록; 및
상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하도록 구성되는 프로그램 카운터를 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 25,
The control flow engine,
A fetch preparation queue configured to receive an index of tasks for which data is prepared from the data flow engine;
A fetch block configured to check whether data necessary for execution of a task corresponding to an index received from the fetch preparation queue exists in the data memory, and to load data from the outside into the data memory;
A running preparation queue configured to receive an index of a task in which data loading is completed in the fetch block;
A running block configured to sequentially receive indexes of tasks provided in the running preparation queue from the running preparation queue; And
And a program counter configured to execute one or more instructions of a task corresponding to the index sent to the running block.
중앙처리유닛 및 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 프로세싱 유닛을 하나 이상 포함하는 컴퓨팅 모듈을 포함하되, 상기 프로세싱 유닛은 하나 이상의 인스트럭션을 구비하는 태스크들을 저장하도록 구성되는 인스트럭션 메모리, 상기 태스크들과 연관된 데이터를 저장하도록 구성되는 데이터 메모리, 데이터 플로우 엔진, 컨트롤 플로우 엔진 및 수행 유닛을 포함하는 뉴럴 네트워크 프로세싱 시스템을 이용하여 뉴럴 네트워크의 프로세싱을 수행하는 방법에 있어서,
(1) 상기 중앙처리유닛이 상기 컴퓨팅 모듈에 명령을 전송하는 단계; 및
(2) 상기 컴퓨팅 모듈이 상기 중앙처리유닛의 명령에 따라 프로세싱을 수행하는 단계를 포함하고,
상기 (2) 단계는,
(2-1) 상기 데이터 플로우 엔진이, 상기 태스크들을 대상으로 데이터 준비 여부를 체크하고 데이터 준비가 완료된 순서대로 상기 태스크들의 준비 완료 여부를 상기 컨트롤 플로우 엔진에 통지하는 단계;
(2-2) 상기 컨트롤 플로우 엔진이, 상기 데이터 플로우 엔진으로부터 통지 받은 순서대로 태스크를 실행하도록 제어하는 단계; 및
(2-3) 상기 수행 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산을 수행하는 단계를 포함하는 뉴럴 네트워크 프로세싱 방법.
A computing module including a central processing unit and one or more processing units for performing processing according to instructions of the central processing unit, wherein the processing unit is configured to store tasks having one or more instructions, the task A method for performing processing of a neural network using a neural network processing system comprising a data memory, a data flow engine, a control flow engine, and an execution unit, configured to store data associated with the data,
(1) the CPU transmitting a command to the computing module; And
(2) the computing module performing processing in accordance with an instruction of the central processing unit,
Step (2),
(2-1) checking, by the data flow engine, whether the data is ready for the tasks and notifying the control flow engine of whether the tasks are ready in the order in which the data preparation is completed;
(2-2) controlling, by the control flow engine, to execute the tasks in the order received from the data flow engine; And
(2-3) The neural network processing method comprising performing, by the performing unit, an operation according to one or more instructions of a task for controlling the control flow engine to execute.
제27항에 있어서,
상기 프로세싱 유닛은 데이터 페치 유닛을 더 포함하고,
상기 뉴럴 네트워크 프로세싱 방법은 상기 (2-2) 단계와 상기 (2-3) 단계 사이에, 상기 데이터 페치 유닛이, 상기 컨트롤 플로우 엔진이 실행하도록 제어하는 태스크의 하나 이상의 인스트럭션에 따른 연산 대상 데이터를 상기 데이터 메모리로부터 상기 수행 유닛에 페치하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 27,
The processing unit further comprises a data fetch unit,
The neural network processing method further comprises a step between the step (2-2) and the step (2-3), wherein the data fetch unit is configured to perform calculation target data according to one or more instructions of a task for the control flow engine to execute. And fetching from the data memory to the execution unit.
제27항에 있어서,
상기 (2) 단계는, 상기 (2-3) 단계 이후에 상기 컨트롤 플로우 엔진이, 상기 수행 유닛의 연산에 따른 결과 데이터를 상기 데이터 메모리에 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 27,
The step (2) further includes, after the step (2-3), the control flow engine storing the result data according to the operation of the execution unit in the data memory. Way.
제29항에 있어서,
상기 결과 데이터가 저장된 데이터 메모리를 포함하는 프로세싱 유닛과 다른 프로세싱 유닛이 상기 결과 데이터를 로드하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 시스템.
The method of claim 29,
And a processing unit other than a processing unit including a data memory in which the result data is stored, to load the result data.
제27항에 있어서,
상기 (1) 단계 이전에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 상태를 초기화하는 단계와, 상기 (2) 단계 이후에 상기 중앙처리유닛이 상기 컴퓨팅 모듈의 연산에 따른 결과 데이터를 상기 중앙처리유닛의 저장소로 저장하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 27,
Initializing a state of the computing module by the central processing unit before the step (1); and outputting result data according to the operation of the computing module by the central processing unit after the step (2). And storing in storage.
제27항에 있어서,
상기 (2-1) 단계는,
상기 데이터 플로우 엔진이 상기 인스트럭션 메모리로부터 상기 태스크들 각각의 인덱스와 상기 태스크들과 연관된 데이터의 정보를 전송 받는 과정;
상기 데이터 플로우 엔진이 상기 태스크들 각각이 필요로 하는 데이터가 준비되었는지 체크하는 과정; 및
상기 데이터 플로우 엔진이 데이터가 준비된 태스크들의 인덱스를 데이터 준비가 완료된 순서대로 상기 컨트롤 플로우 엔진으로 전송하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 27,
Step (2-1),
Receiving, by the data flow engine, information of an index of each of the tasks and data associated with the tasks from the instruction memory;
The data flow engine checking whether data required by each of the tasks is prepared; And
And transmitting, by the data flow engine, the indexes of the tasks for which data is prepared to the control flow engine in the order of preparation of the data.
제27항에 있어서,
상기 컨트롤 플로우 엔진은 페치 준비 큐, 페치 블록, 러닝 준비 큐, 러닝 블록 및 프로그램 카운터를 더 포함하고,
상기 (2-2) 단계는,
상기 페치 준비 큐가 상기 데이터 플로우 엔진으로부터 데이터가 준비된 태스크들의 인덱스를 전송 받는 과정;
상기 페치 준비 큐가 상기 페치 블록으로 상기 태스크들의 인덱스를 순차적으로 전송하면, 상기 페치 블록은 전송 받은 인덱스에 해당하는 태스크의 실행을 위해 필요한 데이터가 상기 데이터 메모리에 존재하는지 확인하고 없으면 데이터를 외부로부터 상기 데이터 메모리로 로드하는 과정;
상기 러닝 준비 큐가 상기 페치 블록에서 데이터 로드가 완료된 태스크의 인덱스를 전송 받는 과정;
상기 러닝 준비 큐가 상기 러닝 블록으로 태스크들의 인덱스를 순차적으로 전송하면, 상기 프로그램 카운터가 상기 러닝 블록에 전송된 인덱스에 해당하는 태스크의 하나 이상의 인스트럭션을 실행하는 과정을 포함하는 것을 특징으로 하는 뉴럴 네트워크 프로세싱 방법.
The method of claim 27,
The control flow engine further includes a fetch preparation queue, a fetch block, a running preparation queue, a running block, and a program counter,
Step (2-2),
Receiving, by the fetch preparation queue, an index of tasks in which data is prepared from the data flow engine;
When the fetch preparation queue sequentially transmits the indexes of the tasks to the fetch block, the fetch block checks whether data necessary for the execution of the task corresponding to the received index exists in the data memory, and if not, sends the data from the outside. Loading into the data memory;
Receiving, by the running preparation queue, an index of a task in which data loading is completed in the fetch block;
And when the running preparation queue sequentially transmits indexes of tasks to the running block, the program counter executing one or more instructions of a task corresponding to the index transmitted to the running block. Processing method.
KR1020180059775A 2018-04-03 2018-05-25 Neural network processor KR102162749B1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US16/124,589 US10698730B2 (en) 2018-04-03 2018-09-07 Neural network processor
PCT/KR2019/003612 WO2019194465A1 (en) 2018-04-03 2019-03-28 Neural network processor

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
KR20190116024A true KR20190116024A (en) 2019-10-14
KR102162749B1 KR102162749B1 (en) 2020-10-07

Family

ID=68171698

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020180059775A KR102162749B1 (en) 2018-04-03 2018-05-25 Neural network processor
KR1020180131156A KR102191408B1 (en) 2018-04-03 2018-10-30 Neural network processor

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020180131156A KR102191408B1 (en) 2018-04-03 2018-10-30 Neural network processor

Country Status (1)

Country Link
KR (2) KR102162749B1 (en)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210157616A (en) 2020-06-22 2021-12-29 주식회사 퓨리오사에이아이 Neural network processor
KR20210157615A (en) 2020-06-22 2021-12-29 주식회사 퓨리오사에이아이 Neural network processor
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

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102480300B1 (en) * 2022-05-25 2022-12-23 리벨리온 주식회사 Neural processing device and Method for job scheduling thereof
KR20230164549A (en) 2022-05-25 2023-12-04 리벨리온 주식회사 Neural processing device and Method for job scheduling thereof

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 (9)

* 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
US11605417B2 (en) 2019-10-31 2023-03-14 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
KR20210157616A (en) 2020-06-22 2021-12-29 주식회사 퓨리오사에이아이 Neural network processor
KR20210157615A (en) 2020-06-22 2021-12-29 주식회사 퓨리오사에이아이 Neural network processor
WO2021261666A1 (en) * 2020-06-22 2021-12-30 주식회사 퓨리오사에이아이 Neural network processor
WO2021261667A1 (en) * 2020-06-22 2021-12-30 주식회사 퓨리오사에이아이 Neural network processor

Also Published As

Publication number Publication date
KR20190116040A (en) 2019-10-14
KR102162749B1 (en) 2020-10-07
KR102191408B1 (en) 2020-12-15

Similar Documents

Publication Publication Date Title
US10698730B2 (en) Neural network processor
KR102191408B1 (en) Neural network processor
TWI803663B (en) A computing device and computing method
Rhodes et al. Real-time cortical simulation on neuromorphic hardware
CN110352434A (en) Utilize the Processing with Neural Network that model is fixed
US11609792B2 (en) Maximizing resource utilization of neural network computing system
US20210201110A1 (en) Methods and systems for performing inference with a neural network
CN111522640A (en) Parallel execution method and equipment of computational graph
CN113469355B (en) Multi-model training pipeline in distributed system
US11921814B2 (en) Method and device for matrix multiplication optimization using vector registers
KR20210006120A (en) Data storing device, Data Processing System and accelerating DEVICE therefor
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 (en) Parallelization method and apparatus of processing neural network model for manycore system
US11409839B2 (en) Programmable and hierarchical control of execution of GEMM operation on accelerator
CN116097273A (en) Collaborative sensor data processing by deep learning accelerator and integrated random access memory
US10997277B1 (en) Multinomial distribution on an integrated circuit
CN112884066A (en) Data processing method and device
WO2019173104A1 (en) Ai accelerator virtualization
WO2019194466A1 (en) Neural network processor
US11741397B2 (en) Artificial neural network emulation of hotspots
Foltin et al. FPGA Demonstrator of a Programmable Ultra-Efficient Memristor-Based Machine Learning Inference Accelerator
US11720417B2 (en) Distributed inferencing using deep learning accelerators with integrated random access memory

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