Some content of this application is unavailable at the moment.
If this situation persist, please contact us atFeedback&Contact
1. (WO2019066183) ELECTRONIC DEVICE AND CONTROL METHOD THEREOF
Document

명세서

발명의 명칭

기술분야

1  

배경기술

2   3   4   5   6   7   8   9   10   11   12   13   14   15  

발명의 상세한 설명

기술적 과제

16  

과제 해결 수단

17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35  

발명의 효과

36  

도면의 간단한 설명

37   38   39   40   41   42   43   44  

발명의 실시를 위한 최선의 형태

45  

발명의 실시를 위한 형태

46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   90   91   92   93   94   95   96   97   98   99   100   101   102   103   104   105   106   107   108   109   110   111   112   113   114   115   116   117   118   119   120   121   122   123   124   125   126   127   128   129   130   131   132   133   134   135   136   137   138   139   140   141   142   143   144   145   146   147   148   149   150   151   152   153   154   155   156   157   158   159   160   161   162   163  

청구범위

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15  

도면

1a   1b   2   3a   3b   3c   4a   4b   5a   5b   5c   6   7   8  

명세서

발명의 명칭 : 전자 장치 및 그 제어 방법

기술분야

[1]
본 발명은 전자 장치 및 그 제어 방법에 대한 것으로, 더욱 상세하게는 컨볼루션(convolution) 연산을 수행하는 전자 장치 및 그 제어 방법에 대한 것이다.

배경기술

[2]
머신 러닝(Machine Learning)은 인공 지능의 한 분야로서, 컴퓨터에 데이터를 입력하여 학습하게 함으로써 새로운 지식을 생성하는 기술을 의미한다. 특히, 머신 러닝 기술의 하나인 인공 신경망 분야에서 두드러진 발전이 이루어졌으며, 그 결과로서 딥러닝(Deep Learning)이 탄생하였다.
[3]
딥러닝은 인공 신경망에 기반을 둔 머신 러닝 기술의 한 종류로, 인공 신경망이 다층 구조로 설계되어 깊어지더라도 학습을 위한 데이터들을 비지도 학습(Unsupervised Learning)을 활용한 전처리나, 데이터를 여러 층 너머로 한번에 전달함으로써 학습 효율을 향상시킬 수 있다. 특히, 딥러닝은 인터넷에 의한 빅데이터 및 이를 처리하기 위한 컴퓨팅 능력의 향상으로 최근 비약적인 발전을 보이고 있다.
[4]
이중, 컨볼루션 신경망(Convolutional Neural Network, CNN)은 2차원 데이터의 학습에 적합한 구조를 가지고 있으며, 역전달(Backpropagation algorithm)을 통해 훈련이 가능하다. CNN은 영상 내 객체 분류, 객체 탐지 등 다양한 응용 분야에 폭넓게 활용되고 있다.
[5]
CNN은 대부분의 연산이 컨볼루션(convolution) 연산이므로, 컨볼루션 연산을 효율적으로 수행할 필요가 있으나, 특정한 경우에 효율성이 저하되는 문제가 있다.
[6]
도 1a 및 도 1b는 종래 기술에 따른 컨볼루션 연산의 문제점을 설명하기 위한 도면들이다. 먼저, 도 1a는 스트라이드가 1인 경우이고, 도 1b는 스트라이드가 2인 경우이다. 스트라이드는 대상 데이터(ex : Image)에 커널 데이터가 적용되는 간격을 의미한다.
[7]
도 1a에 도시된 바와 같이, 제1 싸이클에서 커널 데이터는 대상 데이터의 제1 영역(101)과 연산되어 하기와 같은 값을 갖는 Accumulation의 픽셀 데이터 하나가 산출될 수 있다.
[8]
a1 + b2 + c3 + d4 + e5 + f6 + g7 + h8 + i9
[9]
그리고, 제2 싸이클에서 커널 데이터는 동일한 방법으로 대상 데이터의 제2 영역(102)과 연산되며, 이와 같은 과정을 대상 데이터 전체에 수행한 결과가 우측의 Accumulation이다.
[10]
이때, 커널 데이터는 대상 데이터 상을 한 픽셀씩 이동하며 컨볼루션 연산을 수행한다. 반면, 도 1b의 스트라이드가 2인 경우에는 커널 데이터가 대상 데이터 상을 두 픽셀씩 이동하며 컨볼루션 연산을 수행한다.
[11]
즉, 도 1b에 도시된 바와 같이, 제1 싸이클에서 커널 데이터는 대상 데이터의 제3 영역(103)과 연산되어 Accumulation의 픽셀 데이터 하나가 산출될 수 있다.
[12]
그리고, 제2 싸이클에서 커널 데이터는 동일한 방법으로 대상 데이터의 제4 영역(104)과 연산되며, 여기서, 제4 영역은 제3 영역으로부터 두 픽셀의 간격을 갖는 영역일 수 있다. 이와 같은 과정을 대상 데이터 전체에 수행한 결과가 우측의 Accumulation에서 음영 처리된 부분이다. 즉, 스트라이드 2인 경우의 Accumulation의 데이터 크기는 스트라이드 1인 경우의 Accumulation의 데이터 크기의 1/4에 불과하다.
[13]
다만, 도 1a의 경우와 도 1b의 경우에 있어서 하드웨어적인 동작 차이는 크지 않다. 구체적으로, 도 1b의 경우에도 도 1a와 같이 커널 데이터가 대상 데이터 상을 한 픽셀씩 이동하며 컨볼루션 연산을 수행하여, 도 1a와 같은 Accumulation을 산출하게 된다. 이후, 산출된 Accumulation에서 도 1b의 음영 처리된 부분만을 획득하여 스트라이드가 2에 따른 결과가 획득된다.
[14]
즉, 하드웨어적으로는 도 1b의 음영 처리되지 않은 부분까지 연산을 수행하게 되며, 이는 스트라이드가 2의 컨볼루션 연산에서는 불필요한 결과값이다. 그리고, 스트라이드가 2보다 더 커지면 하드웨어의 활용도는 더 떨어지게 된다.
[15]
그에 따라, 스트라이드가 2 이상인 경우에도 하드웨어의 활용도가 저하되지 않는 컨볼루션 연산 방법이 개발될 필요성이 있어왔다.

발명의 상세한 설명

기술적 과제

[16]
본 발명은 상술한 필요성에 따른 것으로, 본 발명의 목적은 컨볼루션 연산 과정에서 하드웨어 활용도를 향상시키기 위한 전자 장치 및 그 제어 방법을 제공함에 있다.

과제 해결 수단

[17]
이상과 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따르면, 전자 장치는 스토리지 및 상기 스토리지에 저장된 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 스트라이드(stride) 정보에 기초하여 상기 대상 데이터 및 상기 커널 데이터를 컨볼루션(convolution) 연산하는 프로세서를 포함하며, 상기 프로세서는 제1 스트라이드 정보에 기초하여 상기 대상 데이터를 복수의 서브 데이터로 분할하고, 상기 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하며, 복수의 연산 결과를 병합하고, 상기 복수의 서브 커널 데이터는 상기 제1 스트라이드 정보에 기초하여 상기 커널 데이터가 분할된 데이터이며, 상기 제2 스트라이드 정보는 상기 대상 데이터에 상기 커널 데이터가 적용되는 간격이 1일 수 있다.
[18]
또한, 상기 프로세서는 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 n × n 개로 분할된 데이터일 수 있다.
[19]
그리고, 상기 프로세서는 상기 n × n 개의 복수의 서브 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 상기 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득하며, 상기 a 및 상기 b는, 각각 0 이상의 자연수일 수 있다.
[20]
또한, 상기 복수의 연산 결과는 서로 크기가 다른 매트릭스 형태이며, 상기 프로세서는 상기 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하고, 상기 제1 매트릭스에 포함된 값과 상기 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합하며, 상기 나머지 매트릭스의 확장된 영역은, 0 값을 가질 수 있다.
[21]
그리고, 상기 프로세서는 각각이 매트릭스 형태로 배열된 복수의 연산 소자(Processing Element)를 포함하는 복수의 연산 소자 유닛, 일측이 상기 스토리지와 연결되며, 타측이 상기 복수의 연산 소자 유닛 각각에 연결된 데이터 스캐터(scatter) 및 일측이 상기 복수의 연산 소자 유닛 각각에 연결되며, 타측이 상기 스토리지와 연결된 어큐뮬레이터(accumulator)를 포함할 수 있다.
[22]
또한, 상기 데이터 스캐터는 상기 스토리지로부터 상기 대상 데이터를 수신하여 상기 복수의 서브 데이터로 분할하고, 상기 복수의 서브 데이터를 각각 상기 복수의 연산 소자 유닛으로 전송하며, 상기 복수의 연산 소자 유닛 각각은 상기 데이터 스캐터로부터 수신된 서브 데이터를 대응되는 서브 커널 데이터에 기초하여 상기 컨볼루션 연산하며, 연산 결과를 상기 어큐뮬레이터로 전송하고, 상기 어큐뮬레이터는 상기 복수의 연산 소자 유닛 각각으로부터 수신된 복수의 연산 결과를 병합할 수 있다.
[23]
그리고, 상기 프로세서는 상기 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는 상기 커널 데이터가 m × n 개로 분할된 데이터일 수 있다.
[24]
또한, 상기 프로세서는 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 커널 데이터를 n × n 개의 복수의 서브 커널 데이터로 분할하고, 상기 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 상기 컨볼루션 연산할 수 있다.
[25]
그리고, 상기 프로세서는 상기 n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 상기 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득하며, 상기 a 및 상기 b는 각각 0 이상의 자연수일 수 있다.
[26]
또한, 상기 프로세서는 상기 스토리지에 기저장된 복수의 서브 커널 데이터 세트 중 상기 제1 스트라이드 정보에 대응되는 서브 커널 데이터 세트에 포함된 상기 복수의 서브 커널 데이터를 이용하여 상기 컨볼루션 연산을 수행하며, 상기 복수의 서브 커널 데이터 세트는, 서로 상이한 스트라이드 정보에 기초하여 상기 커널 데이터가 분할된 데이터 세트일 수 있다.
[27]
한편, 본 발명의 일 실시 예에 따르면, 전자 장치의 제어 방법은 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 제1 스트라이드 정보에 기초하여 상기 대상 데이터를 복수의 서브 데이터로 분할하는 단계, 상기 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하는 단계 및 복수의 연산 결과를 병합하는 단계를 포함하고, 상기 복수의 서브 커널 데이터는 상기 제1 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터이며, 상기 제2 스트라이드 정보는 상기 대상 데이터에 상기 커널 데이터가 적용되는 간격이 1일 수 있다.
[28]
또한, 상기 분할하는 단계는 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 n × n 개로 분할된 데이터일 수 있다.
[29]
그리고, 상기 분할하는 단계는 상기 n × n 개의 복수의 서브 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하는 단계 및 상기 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득하는 단계를 포함하며, 상기 a 및 상기 b는, 각각 0 이상의 자연수일 수 있다.
[30]
또한, 상기 복수의 연산 결과는 서로 크기가 다른 매트릭스 형태이며, 상기 병합하는 단계는 상기 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하는 단계 및 상기 제1 매트릭스에 포함된 값과 상기 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합하는 단계를 포함하며, 상기 나머지 매트릭스의 확장된 영역은 0 값을 가질 수 있다.
[31]
그리고, 상기 분할하는 단계는 상기 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는 상기 커널 데이터가 m × n 개로 분할된 데이터일 수 있다.
[32]
또한, 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 커널 데이터를 n × n 개의 복수의 서브 커널 데이터로 분할하는 단계 및 상기 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 상기 컨볼루션 연산하는 단계를 더 포함할 수 있다.
[33]
그리고, 상기 분할하는 단계는 상기 n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하는 단계 및 상기 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득하는 단계를 포함하며, 상기 a 및 상기 b는 각각 0 이상의 자연수일 수 있다.
[34]
또한, 상기 컨볼루션 연산하는 단계는 기저장된 복수의 서브 커널 데이터 세트 중 상기 제1 스트라이드 정보에 대응되는 서브 커널 데이터 세트에 포함된 상기 복수의 서브 커널 데이터를 이용하여 상기 컨볼루션 연산을 수행하며, 상기 복수의 서브 커널 데이터 세트는, 서로 상이한 스트라이드 정보에 기초하여 상기 커널 데이터가 분할된 데이터 세트일 수 있다.
[35]
한편, 본 발명의 일 실시 예에 따르면, 전자 장치의 동작 방법을 수행하도록 하는 컴퓨터 명령을 저장하는 비일시적 컴퓨터 판독 가능 매체에 있어서, 상기 동작은 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 제1 스트라이드 정보에 기초하여 상기 대상 데이터를 복수의 서브 데이터로 분할하는 단계, 상기 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하는 단계 및 복수의 연산 결과를 병합하는 단계를 포함하고, 상기 복수의 서브 커널 데이터는 상기 제1 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터이며, 상기 제2 스트라이드 정보는 상기 대상 데이터에 상기 커널 데이터가 적용되는 간격이 1일 수 있다.

발명의 효과

[36]
이상과 같은 본 발명의 다양한 실시 예에 따르면, 전자 장치는 대상 데이터에 커널 데이터가 적용되는 간격이 2 이상이더라도 1의 간격으로 컨볼루션 연산을 수행하여 하드웨어 활용도를 향상시킬 수 있다.

도면의 간단한 설명

[37]
도 1a 및 도 1b는 종래 기술에 따른 컨볼루션 연산의 문제점을 설명하기 위한 도면들이다.
[38]
도 2는 본 발명의 일 실시 예에 따른 전자 장치의 구성을 나타내는 블럭도이다.
[39]
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 대상 데이터 및 커널 데이터를 분할하는 방법을 설명하기 위한 도면들이다.
[40]
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 연산 방법을 설명하기 위한 도면들이다.
[41]
도 5a 및 도 5b는 본 발명의 다른 실시 예에 따른 연산 방법을 설명하기 위한 도면들이다.
[42]
도 6은 본 발명의 일 실시 예에 따른 3차원 데이터의 연산 방법을 설명하기 위한 도면이다.
[43]
도 7은 본 발명의 일 실시 예에 따른 프로세서의 세부 구성을 설명하기 위한 도면이다.
[44]
도 8은 본 발명의 일 실시 예에 따른 전자 장치의 제어 방법을 설명하기 위한 흐름도이다.

발명의 실시를 위한 최선의 형태

[45]
-

발명의 실시를 위한 형태

[46]
이하에서, 첨부된 도면을 이용하여 본 발명의 다양한 실시 예들에 대하여 구체적으로 설명한다.
[47]
도 2는 본 발명의 일 실시 예에 따른 전자 장치(100)의 구성을 나타내는 블럭도이다.
[48]
도 2에 도시된 바와 같이, 전자 장치(100)는 스토리지(110) 및 프로세서(120)를 포함한다.
[49]
전자 장치(100)는 컨볼루션(convolution) 연산을 수행할 수 있는 장치일 수 있다. 예를 들어, 전자 장치(100)는 데스크탑 PC, 노트북, 스마트폰, 태블릿 PC, 서버 등일 수 있다. 또는, 전자 장치(100)는 클라우딩 컴퓨팅 환경이 구축된 시스템 자체일 수도 있다. 다만, 이에 한정되는 것은 아니며, 전자 장치(100)는 컨볼루션 연산이 가능한 장치라면 어떤 장치라도 무방하다.
[50]
여기서, 컨볼루션 연산은 딥 러닝(deep learning)에서 매우 높은 비중으로 수행되는 연산이며, 대상 데이터와 커널 데이터의 연산을 통해 대상 데이터로부터 커널 데이터에 대응되는 특성을 부각시키는 연산일 수 있다.
[51]
예를 들어, 대상 데이터는 1920 × 1080의 해상도를 갖는 이미지 데이터이고, 커널 데이터는 3 × 3의 샤픈(sharpen) 필터일 수 있다. 커널 데이터는 대상 데이터의 일측에 위치한 3 × 3의 영역과 엘리먼트별 곱셈 후 그 곱셈 결과를 더하여 하나의 데이터를 생성할 수 있다. 커널 데이터는 대상 데이터 상을 이동하며 이상과 같은 연산을 반복 수행하여 컨볼루션 연산을 수행할 수 있다. 컨볼루션 연산 결과는 제로 패딩(padding)이 수반되는 경우 대상 데이터와 동일한 크기로 형성될 수 있으며, 제로 패딩이 수반되지 않는 경우 대상 데이터보다 약간 작은 크기로 형성될 수 있다. 이상의 이미지 데이터와 샤픈 필터의 컨볼루션 연산을 통해 최초의 이미지 데이터보다 선명한 이미지 데이터가 생성될 수 있다. 다만, 이는 일 실시 예에 불과하고, 얼마든지 다른 유형의 데이터 간 컨볼루션 연산을 수행할 수도 있으며, 딥 러닝 분야에서 이용될 수 있는 컨볼루션 연산이라면 어떠한 것이라도 무방하다.
[52]
스토리지(110)는 대상 데이터, 커널 데이터 및 연산 명령어 등을 저장할 수 있다. 여기서, 연산 명령어가 컨볼루션 연산 명령어인 경우, 연산 명령어는 스트라이드(stride) 정보를 포함할 수 있다. 스트라이드 정보는 대상 데이터에 커널 데이터가 적용되는 간격을 나타낸다.
[53]
스토리지(110)는 적어도 하나의 커널 데이터 자체를 저장할 수 있다.
[54]
또는, 스토리지(110)는 복수의 서브 커널 데이터 세트를 저장할 수도 있다. 여기서, 복수의 서브 커널 데이터 세트 각각은 하나의 커널 데이터가 서로 다른 스트라이드 정보에 기초하여 분할된 복수의 서브 커널 데이터를 포함할 수 있다.
[55]
예를 들어, 복수의 서브 커널 데이터 세트 중 제1 서브 커널 데이터 세트는 커널 데이터가 제1 스트라이드 정보에 기초하여 분할된 복수의 제1 서브 커널 데이터를 포함하고, 복수의 서브 커널 데이터 세트 중 제2 서브 커널 데이터 세트는 커널 데이터가 제2 스트라이드 정보에 기초하여 분할된 복수의 제2 서브 커널 데이터를 포함할 수 있다.
[56]
또는, 스토리지(110)는 복수의 커널 데이터 각각에 대한 복수의 서브 커널 데이터 세트를 저장할 수도 있다. 예를 들어, 스토리지(110)는 제1 커널 데이터에 대한 복수의 제1 서브 커널 데이터 세트 및 제2 커널 데이터에 대한 복수의 제2 서브 커널 데이터 세트를 저장할 수도 있다.
[57]
한편, 복수의 서브 커널 데이터는 전자 장치(100)에 의해 생성될 수도 있고, 전자 장치(100)가 아닌 외부 전자 장치에 의해 생성되어 수신된 정보일 수도 있다.
[58]
이상의 스트라이드 정보에 기초한 컨볼루션 연산 및 복수의 서브 커널 데이터에 대한 구체적인 설명은 후술한다.
[59]
스토리지(110)는 하드디스크, 비휘발성 메모리 및 휘발성 메모리 등으로 구현될 수 있다.
[60]
프로세서(120)는 전자 장치(100)의 동작을 전반적으로 제어한다.
[61]
일 실시 예에 따라 프로세서(120)는 디지털 시그널 프로세서(digital signal processor(DSP), 마이크로 프로세서(microprocessor), TCON(Time controller)으로 구현될 수 있다. 다만, 이에 한정되는 것은 아니며, 중앙처리장치(central processing unit(CPU)), MCU(Micro Controller Unit), MPU(micro processing unit), 컨트롤러(controller), 어플리케이션 프로세서(application processor(AP)), 또는 커뮤니케이션 프로세서(communication processor(CP)), ARM 프로세서 중 하나 또는 그 이상을 포함하거나, 해당 용어로 정의될 수 있다. 또한, 프로세서(140)는 프로세싱 알고리즘이 내장된 SoC(System on Chip), LSI(large scale integration)로 구현될 수도 있고, FPGA(Field Programmable gate array) 형태로 구현될 수도 있다.
[62]
프로세서(120)는 스토리지(110)에 저장된 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 스트라이드 정보에 기초하여 대상 데이터 및 커널 데이터를 컨볼루션 연산할 수 있다.
[63]
프로세서(120)는 제1 스트라이드 정보에 기초하여 대상 데이터를 복수의 서브 데이터로 분할하고, 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 복수의 서브 데이터 및 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하며, 복수의 연산 결과를 병합할 수 있다.
[64]
여기서, 복수의 서브 커널 데이터는 제1 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터일 수 있다. 그리고, 제2 스트라이드 정보는 대상 데이터에 커널 데이터가 적용되는 간격이 1일 수 있다. 즉, 제1 스트라이드 정보는 대상 데이터에 커널 데이터가 적용되는 간격이 2 이상일 수 있다.
[65]
프로세서(120)는 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할하고, 복수의 서브 커널 데이터는 커널 데이터가 n × n 개로 분할된 데이터일 수 있다.
[66]
예를 들어, 프로세서(120)는 제1 스트라이드 정보가 2이면, 대상 데이터를 2 × 2 = 4 개의 복수의 서브 데이터로 분할할 수 있다. 또한, 복수의 서브 커널 데이터는 커널 데이터가 × 2 = 4 개로 분할된 데이터일 수 있다.
[67]
다만, 이에 한정되는 것은 아니며, 제1 스트라이드 정보가 대상 데이터의 로우(row) 및 컬럼(column)에 대하여 서로 다를 수도 있다. 즉, 프로세서(120)는 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할할 수 있다. 그리고, 프로세서(120)는 컨볼루션 연산을 위해 커널 데이터가 m × n 개로 분할된 복수의 서브 커널 데이터를 이용할 수 있다.
[68]
예를 들어, 프로세서(120)는 제1 스트라이드 정보가 로우에 대하여 3이고 컬럼에 대하여 2이면, 대상 데이터를 3 × 2 개의 복수의 서브 데이터로 분할할 수 있다. 그리고, 프로세서(120)는 컨볼루션 연산을 위해 커널 데이터가 3 × 2 개로 분할된 복수의 서브 커널 데이터를 이용할 수 있다.
[69]
프로세서(120)는 n × n 개의 복수의 서브 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득할 수 있다. 여기서, a 및 b는, 각각 0 이상의 자연수일 수 있다. 여기서, 대상 데이터를 분할하는 구체적인 방법은 도면과 통해서 후술하기로 한다.
[70]
한편, 복수의 연산 결과는 서로 크기가 다른 매트릭스 형태이며, 프로세서(120)는 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하고, 제1 매트릭스에 포함된 값과 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합할 수 있다. 여기서, 나머지 매트릭스의 확장된 영역은 0 값을 가질 수 있다.
[71]
예를 들어, 컨볼루션 연산을 통해 4개의 연산 결과가 생성된 경우, 제1 연산 결과는 2 × 2 의 매트릭스 형태이고, 제2 연산 결과는 2 × 3 의 매트릭스 형태이며, 제3 연산 결과는 3 × 2 의 매트릭스 형태이고, 제4 연산 결과는 4 × 4 의 매트릭스 형태일 수 있다. 프로세서(120)는 제1 내지 제3 연산 결과를 4 × 4 의 매트릭스 형태로 확장할 수 있으며, 확장 시 추가된 로우 또는 컬럼의 값은 0일 수 있다.
[72]
프로세서(120)는 연산 결과의 확장 시 매트릭스의 우측 또는 하측을 확장할 수 있다. 상술한 예에서 프로세서(120)는 제1 연산 결과의 우측 및 하측에 0을 추가함으로써 2 × 2 의 매트릭스 형태를 4 × 4 의 매트릭스 형태로 확장할 수 있다.
[73]
프로세서(120)는 제1 매트릭스에 포함된 값과 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합할 수 있다. 즉, 프로세서(120)는 엘리먼트별로 각 값을 합산할 수 있다. 상술한 예에 의하면, 합산 결과는 4 × 4 의 매트릭스 형태일 수 있다.
[74]
다만, 이에 한정되는 것은 아니며, 프로세서(120)는 복수의 연산 결과 중 가장 크기가 작을 제2 매트릭스의 크기를 예측하고, 예측된 크기에 대응되도록 연산을 수행할 수도 있다. 이에 대한 구체적인 설명은 도면을 통해서 후술하기로 한다.
[75]
한편, 프로세서(120)는 각각이 매트릭스 형태로 배열된 복수의 연산 소자(Processing Element)를 포함하는 복수의 연산 소자 유닛, 일측이 스토리지(110)와 연결되며, 타측이 복수의 연산 소자 유닛 각각에 연결된 데이터 스캐터(scatter) 및 일측이 복수의 연산 소자 유닛 각각에 연결되며, 타측이 스토리지(110)와 연결된 어큐뮬레이터(accumulator)를 포함할 수 있다.
[76]
데이터 스캐터는 스토리지(110)로부터 대상 데이터를 수신하여 복수의 서브 데이터로 분할하고, 복수의 서브 데이터를 각각 복수의 연산 소자 유닛으로 전송할 수 있다. 이 경우, 데이터 스캐터는 복수의 서브 데이터를 저장할 저장 소자를 포함할 수 있다.
[77]
또는, 데이터 스캐터는 수신되는 대상 데이터를 실시간으로 복수의 연산 소자 유닛으로 분배할 수도 있다. 예를 들어, 데이터 스캐터는 적어도 하나의 멀티플렉서(multiplexer)로 형성될 수 있으며, 대상 데이터가 순차적으로 입력되면 복수의 연산 소자 유닛으로 순차적으로 분배할 수 있다. 즉, 데이터 스캐터는 실시간으로 입력되는 데이터의 경로만을 변경해줄 수도 있으며, 분배가 완료된 후 복수의 연산 소자 유닛 각각에는 복수의 서브 데이터가 저장될 수 있다.
[78]
복수의 연산 소자 유닛 각각은 데이터 스캐터로부터 수신된 서브 데이터를 대응되는 서브 커널 데이터에 기초하여 컨볼루션 연산하며, 연산 결과를 어큐뮬레이터로 전송할 수 있다.
[79]
어큐뮬레이터는 복수의 연산 소자 유닛 각각으로부터 수신된 복수의 연산 결과를 병합할 수 있다.
[80]
한편, 프로세서(120)는 커널 데이터를 복수의 서브 커널 데이터로 분할할 수 있다. 구체적으로, 프로세서(120)는 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 커널 데이터를 n × n 개의 복수의 서브 커널 데이터로 분할하고, 제2 스트라이드 정보에 기초하여 복수의 서브 데이터 및 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산할 수 있다.
[81]
다만, 이에 한정되는 것은 아니며, 제1 스트라이드 정보가 커널 데이터의 로우 및 컬럼에 대하여 서로 다를 수도 있다. 즉, 프로세서(120)는 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 커널 데이터를 m × n 개의 복수의 서브 커널 데이터로 분할할 수도 있다.
[82]
프로세서(120)는 n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다. 즉, 복수의 서브 커널 데이터를 형성하는 방법은 복수의 서브 데이터를 형성하는 방법과 동일할 수 있다.
[83]
한편, 프로세서(120)는 스토리지(110)에 기저장된 복수의 서브 커널 데이터 세트 중 제1 스트라이드 정보에 대응되는 서브 커널 데이터 세트에 포함된 복수의 서브 커널 데이터를 이용하여 컨볼루션 연산을 수행할 수 있다. 여기서, 복수의 서브 커널 데이터 세트는 서로 상이한 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터 세트일 수 있다.
[84]
즉, 스토리지(110)는 커널 데이터가 서로 다른 스트라이드 정보에 기초하여 기분할된 복수의 서브 커널 데이터 세트를 저장할 수 있고, 프로세서(120)는 스토리지(110)에 저장된 정보에 기초하여 컨볼루션 연산을 수행할 수도 있다. 이 경우, 프로세서(120)는 커널 데이터를 분할하는 동작을 수행하지 않는다. 다만, 복수의 서브 커널 데이터 세트를 생성하는 방법은 프로세서(120)가 직접 커널 데이터를 분할하는 방법과 동일할 수 있으며, 단지 전자 장치(100)가 아닌 외부 전자 장치에 의해 분할 동작이 수행되고, 전자 장치(100)는 외부 전자 장치로부터 이를 수신하여 저장할 뿐이다.
[85]
이상에서는 전자 장치(100)의 컨볼루션 연산 방법에 대하여 간략히 설명하였다. 이하에서는 구체적인 도면을 통해 전자 장치(100)의 컨볼루션 연산 방법을 설명하고, 그에 따른 하드웨어 활용도의 향상에 대하여 설명한다.
[86]
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 대상 데이터 및 커널 데이터를 분할하는 방법을 설명하기 위한 도면들이다.
[87]
먼저, 도 3a는 스트라이드 정보가 2인 경우에 대상 데이터를 분할하는 방법을 설명하기 위한 도면이다.
[88]
프로세서(120)는 스트라이드 정보가 2이면, 대상 데이터를 2 × 2 = 4 개의 복수의 서브 데이터로 분할할 수 있다.
[89]
구체적으로, 프로세서(120)는 2 × 2 = 4 개의 복수의 서브 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별할 수 있다. 여기서, i 및 j는 각각 n 이하의 자연수이므로, i 및 j는 각각 1 및 2일 수 있다.
[90]
예를 들어, 프로세서(120)는 4 개의 복수의 서브 데이터 각각을 (1, 1), (1, 2), (2, 1), (2, 2)로 식별할 수 있다.
[91]
프로세서(120)는 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다.
[92]
예를 들어, (1, 1)로서 식별되는 서브 데이터를 형성하는 경우를 가정하면, 프로세서(120)는 대상 데이터에서 (2 × a + 1)의 로우 및 (2 × b + 1)의 컬럼에 위치한 값을 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수이므로, a 및 b는 각각을 0부터 순차적으로 (2 × a + 1)의 로우 및 (2 × b + 1)의 컬럼에 대입하면, (1)의 로우 및 (1)의 컬럼, (1)의 로우 및 (3)의 컬럼, (1)의 로우 및 (5)의 컬럼, (1)의 로우 및 (7)의 컬럼, (1)의 로우 및 (9)의 컬럼, (3)의 로우 및 (1)의 컬럼, (3)의 로우 및 (3)의 컬럼, (3)의 로우 및 (5)의 컬럼, (3)의 로우 및 (7)의 컬럼, (3)의 로우 및 (9)의 컬럼, ... , (9)의 로우 및 (9)의 컬럼에 위치한 값을 획득할 수 있다. 도 3a의 우측은 4 개의 서브 데이터를 나타내며, 이 중 좌측 상단의 서브 데이터가 (1, 1)로서 식별되는 서브 데이터를 나타낸다.
[93]
한편, 이상의 예에서는 a, b가 각각 4 이하인 경우만을 설명하였다. 다만, a 또는 b가 5 이상이면 대상 데이터에 대응되는 값이 없으므로 고려할 필요가 없다.즉, 프로세서(120)는 a 또는 b가 5 이상인 경우에 대하여는 대상 데이터로부터 획득할 수 있는 값이 없음을 알고 a 및 b 중 적어도 하나의 수치를 변경하거나 서브 데이터의 생성을 종료할 수 있다.
[94]
예를 들어, 프로세서(120)는 a가 1이고 b를 1부터 순차적으로 확대해 가다가 a가 1이고 b가 5가 되면 대상 데이터에 대응되는 값이 없으므로, a를 2로, b를 1로 변경하여 대상 데이터에서 대응되는 값을 획득할 수 있다.
[95]
하나의 예를 더 추가하여 (1, 2)로서 식별되는 서브 데이터를 형성하는 경우를 가정하면, 프로세서(120)는 대상 데이터에서 (2 × a + 1)의 로우 및 (2 × b + 2)의 컬럼에 위치한 값을 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수이므로, a 및 b는 각각을 0부터 순차적으로 (2 × a + 1)의 로우 및 (2 × b + 2)의 컬럼에 대입하면, (1)의 로우 및 (2)의 컬럼, (1)의 로우 및 (4)의 컬럼, (1)의 로우 및 (6)의 컬럼, (1)의 로우 및 (8)의 컬럼, (1)의 로우 및 (10)의 컬럼, (3)의 로우 및 (2)의 컬럼, (3)의 로우 및 (4)의 컬럼, (3)의 로우 및 (6)의 컬럼, (3)의 로우 및 (8)의 컬럼, (3)의 로우 및 (10)의 컬럼, ... , (9)의 로우 및 (10)의 컬럼에 위치한 값을 획득할 수 있다. 도 3a에서 우측 상단의 서브 데이터가 (1, 2)로서 식별되는 서브 데이터를 나타낸다.
[96]
이상과 같은 방법을 통해 프로세서(120)는 나머지 2 개의 서브 데이터를 형성할 수 있다.
[97]
도 3b는 스트라이드 정보가 2인 경우에 커널 데이터를 분할하는 방법을 설명하기 위한 도면이다. 다만, 커널 데이터를 분할하는 방법은 도 3a의 대상 데이터를 분할하는 방법과 동일하므로 중복 설명은 생략한다.
[98]
도 3c는 스트라이드 정보가 3인 경우에 커널 데이터를 분할하는 방법을 설명하기 위한 도면이다.
[99]
프로세서(120)는 스트라이드 정보가 3이면, 커널 데이터를 3 × 3 = 9 개의 복수의 서브 커널 데이터로 분할할 수 있다.
[100]
구체적으로, 프로세서(120)는 3 × 3 = 9 개의 복수의 서브 커널 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별할 수 있다. 여기서, i 및 j는 각각 n 이하의 자연수이므로, i 및 j는 각각 1, 2 및 3일 수 있다.
[101]
예를 들어, 프로세서(120)는 9 개의 복수의 서브 커널 데이터 각각을 (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)로 식별할 수 있다.
[102]
프로세서(120)는 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다.
[103]
예를 들어, (2, 3)로서 식별되는 서브 커널 데이터를 형성하는 경우를 가정하면, 프로세서(120)는 커널 데이터에서 (3 × a + 2)의 로우 및 (3 × b + 3)의 컬럼에 위치한 값을 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수이므로, a 및 b는 각각을 0부터 순차적으로 (3 × a + 2)의 로우 및 (3 × b + 3)의 컬럼에 대입하면, (2)의 로우 및 (3)의 컬럼, (2)의 로우 및 (6)의 컬럼, (5)의 로우 및 (3)의 컬럼, (5)의 로우 및 (6)의 컬럼에 위치한 값을 획득할 수 있다. 도 3c의 하측은 9 개의 서브 커널 데이터를 나타내며, 이 중 우측 가운데의 서브 커널 데이터가 (2, 3)로서 식별되는 서브 커널 데이터를 나타낸다.
[104]
즉, 스트라이드 정보가 3인 경우에는 2인 경우와 비교하여 생성되는 복수의 서브 커널 데이터의 개수가 달라질 수 있다. 다만, 생성 방법에는 큰 차이가 없으며, 대상 데이터에 대하여도 동일하다. 즉, 프로세서(120)는 컨볼루션 연산 시의 스트라이드 정보가 2 이상인 경우에 대상 데이터 및 커널 데이터를 이상과 같은 방법을 통해 각각 복수의 서브 데이터 및 복수의 서브 커널 데이터로 분할할 수 있다. 여기서, 프로세서(120)는 동일한 스트라이드 정보에 기초하여 대상 데이터 및 커널 데이터를 분할할 수 있다. 즉, 복수의 서브 데이터 각각에 대응되는 서브 커널 데이터의 크기는 다를 수 있으나, 복수의 서브 데이터의 개수 및 복수의 서브 커널 데이터의 개수는 동일할 수 있다.
[105]
한편, 스트라이드 정보는 로우 및 컬럼 별로 다를 수 있다. 다만, 이 경우에도, 프로세서(120)는 스트라이드 정보가 로우에 대하여 3이고 컬럼에 대하여 2이면, 대상 데이터를 3 × 2 개의 복수의 서브 데이터로 분할할 수 있다.
[106]
그리고, 프로세서(120)는 3 × 2 = 6 개의 복수의 서브 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별할 수 있다. 여기서, i 및 j는 각각 n 이하의 자연수이므로, i는 1, 2 및 3이고, j는 1 및 2일 수 있다.
[107]
프로세서(120)는 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다.
[108]
즉, 스트라이드 정보가 로우 및 컬럼별로 다르더라도 이상과 같은 방법을 통해 대상 데이터 및 커널 데이터를 분할할 수 있다.
[109]
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 연산 방법을 설명하기 위한 도면들이다. 도 4a 및 도 4b에서는 도 3a의 복수의 서브 데이터 및 도 3b의 복수의 서브 커널 데이터를 연산하는 것으로 가정하였다.
[110]
프로세서(120)는 n × n 개의 복수의 서브 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별할 수 있다.
[111]
즉, 프로세서(120)는 4 개의 복수의 서브 데이터 각각을 (1, 1), (1, 2), (2, 1), (2, 2)의 2차원 정보로 식별하고, 4 개의 복수의 서브 커널 데이터 각각을 (1, 1), (1, 2), (2, 1), (2, 2)의 2차원 정보로 식별할 수 있다.
[112]
그리고, 프로세서(120)는 복수의 서브 데이터 및 복수의 서브 데이터 각각에 대응되는 서브 커널 데이터를 컨볼루션 연산할 수 있다. 즉, 도 4a에 도시된 바와 같이, 프로세서(120)는 (1, 1)의 서브 데이터를 (1, 1)의 서브 커널 데이터와 컨볼루션 연산을 수행하고, (1, 2)의 서브 데이터를 (1, 2)의 서브 커널 데이터와 컨볼루션 연산을 수행하며, (2, 1)의 서브 데이터를 (2, 1)의 서브 커널 데이터와 컨볼루션 연산을 수행하고, (2, 2)의 서브 데이터를 (2, 2)의 서브 커널 데이터와 컨볼루션 연산을 수행할 수 있다. 이때, 프로세서(120)는 스트라이드 1의 컨볼루션 연산을 병렬적으로 수행할 수 있다.
[113]
특히, 프로세서(120)는 복수의 서브 커널 데이터 중 가장 크기가 큰 서브 커널 데이터의 컨볼루션 연산에 기초하여 나머지 서브 커널 데이터의 컨볼루션 연산을 동기화할 수 있다. 예를 들어, 도 4a에서 복수의 서브 커널 데이터 중 가장 크기가 큰 (1, 1)의 서브 커널 데이터의 경우, 서브 커널 데이터는 우측으로 한 번 이동한 뒤, 로우를 변경하고, 다시 우측으로 한 번 이동하며 컨볼루션 연산을 수행할 수 있다.
[114]
그리고, 프로세서(120)는 (1, 1)의 서브 커널 데이터의 움직임에 동기화하여 (1, 2), (2, 1), (2, 2)의 서브 커널 데이터의 움직임을 동기화할 수 있다. (2, 2)의 서브 커널 데이터를 예로 들면, 프로세서(120)는 (2, 2)의 서브 커널 데이터를 최초 우측으로 이동한 뒤, 한 번 더 우측으로 이동할 수 있으나 이를 생략하고, (1, 1)의 서브 커널 데이터와 같이 로우를 변경하고, 다시 우측으로 한 번 이동하며 컨볼루션 연산을 수행할 수 있다. 또한, 프로세서(120)는 (2, 2)의 서브 커널 데이터가 두 번째 로우에서도 한 번 더 우측으로 이동할 수 있으며, 세 번째 로우로도 이동할 수 있으나, 이 역시 생략할 수 있다.
[115]
도 4b는 (1, 1), (1, 2), (2, 1), (2, 2) 각각의 연산 결과를 나타낸다. 프로세서(120)가 복수의 서브 커널 데이터 중 가장 크기가 큰 서브 커널 데이터의 컨볼루션 연산에 기초하여 나머지 서브 커널 데이터의 컨볼루션 연산을 동기화함에 따라 연산 결과의 크기는 모두 동일할 수 있다.
[116]
프로세서(120)는 복수의 연산 결과를 엘리먼트별로 병합할 수 있다. 병합에 따른 최종 컨볼루션 연산 결과는 대상 데이터 및 커널 데이터를 스트라이드 2에 기초하연 컨볼루션 연산한 결과와 동일할 수 있다.
[117]
도 5a 및 도 5b는 본 발명의 다른 실시 예에 따른 연산 방법을 설명하기 위한 도면들이다. 도 5a 및 도 5b에서는 도 4a 및 도 4b와 같이 도 3a의 복수의 서브 데이터 및 도 3b의 복수의 서브 커널 데이터를 연산하는 것으로 가정하였다. 다만, 도 5a에서는 복수의 서브 커널 데이터를 생략하였다.
[118]
프로세서(120)는 이상에서 설명한 바와 동일하게 복수의 서브 데이터 및 복수의 서브 커널 데이터를 2차원 정보로 식별하고, 복수의 서브 데이터 및 복수의 서브 데이터 각각에 대응되는 서브 커널 데이터를 컨볼루션 연산할 수 있다. 이때, 프로세서(120)는 스트라이드 1의 컨볼루션 연산을 병렬적으로 수행할 수 있다.
[119]
한편, 프로세서(120)는 도 4a 및 도 4b의 동기화된 컨볼루션 연산이 아닌 비동기화된 컨볼루션 연산을 수행할 수도 있다. 이 경우, 프로세서(120)는 복수의 서브 커널 데이터 중 가장 크기가 큰 서브 커널 데이터를 검출할 필요 없이, 복수의 서브 데이터 및 복수의 서브 데이터 각각에 대응되는 서브 커널 데이터를 개별적으로 컨볼루션 연산할 수 있다.
[120]
그에 따라, 서브 커널 데이터의 크기가 상대적으로 작은 (1, 2), (2, 1), (2, 2)의 서브 커널 데이터는 대응되는 서브 데이터 상의 이동이 도 4a 및 도 4b의 경우보다 더 많을 수 있다.
[121]
예를 들어, (1, 2)의 서브 커널 데이터는 로우 별로 우측으로 한번 이동한 뒤, 한번 더 우측으로 이동하여 컨볼루션 연산을 수행할 수 있다. 즉, 도 4a와 비교하여 도 5a의 (1, 2)의 서브 커널 데이터는 두 번의 연산이 추가될 수 있다. 이와 유사하게 도 4a와 비교하여 도 5a의 (2, 1)의 서브 커널 데이터는 두 번의 연산이 추가되고, (2, 2)의 서브 커널 데이터는 다섯 번의 연산이 추가될 수 있다.
[122]
도 5b는 (1, 1), (1, 2), (2, 1), (2, 2) 각각의 연산 결과를 나타낸다. 프로세서(120)가 비동기화된 컨볼루션 연산을 수행함에 따라 연산 결과의 크기는 모두 다를 수 있다.
[123]
프로세서(120)는 도 5c에 도시된 바와 같이, 복수의 연산 결과 중 가장 크기가 큰 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장할 수 있다. 프로세서(120)는 확장된 영역이 0 값을 가지도록 나머지 매트릭스의 크기를 확장할 수 있다.
[124]
프로세서(120)는 복수의 연산 결과를 엘리먼트별로 병합할 수 있다. 확장 후에는 매트릭스의 크기가 모두 동일하므로, 병합 방법은 도 4b에서 설명한 바와 동일하다.
[125]
이후, 프로세서(120)는 복수의 연산 결과 중 가장 크기가 작은 매트릭스에 기초하여 병합 결과로부터 최종 컨볼루션 연산 결과를 획득할 수 있다. 예를 들어, 프로세서(120)는 도 5c에 도시된 바와 같이, 복수의 연산 결과 중 가장 크기가 작은 (1, 1)의 연산 결과인 2 × 2의 매트릭스에 기초하여 3 × 3의 병합 결과로부터 좌측 상단의 2 × 2의 값만을 최종 컨볼루션 연산 결과로서 획득할 수 있다.
[126]
병합에 따른 최종 컨볼루션 연산 결과는 대상 데이터 및 커널 데이터를 스트라이드 2에 기초하연 컨볼루션 연산한 결과와 동일할 수 있다.
[127]
도 6은 본 발명의 일 실시 예에 따른 3차원 데이터의 연산 방법을 설명하기 위한 도면이다.
[128]
도 6에 도시된 바와 같이, 대상 데이터(Feature Map) 및 커널(Kernel) 데이터 각각은 로우 및 컬럼 뿐만 아니라 뎁스(depth)를 갖는 3차원 데이터일 수 있다.
[129]
프로세서(120)는 대상 데이터 및 커널 데이터 각각을 스트라이드 정보에 기초하여 분할할 수 있다. 이때, 프로세서(120)는 뎁스는 무관하게 로우 및 컬럼만을 고려하여 대상 데이터 및 커널 데이터 각각을 분할할 수 있다.
[130]
그에 따라, 프로세서(120)는 도 6에 도시된 바와 같이, 4개의 서브 데이터 및 4개의 서브 커널 데이터를 생성할 수 있으며, 각 데이터는 로우 및 컬럼 뿐만 아니라 뎁스를 갖는 3차원 데이터일 수 있다.
[131]
그리고, 프로세서(120)는 스트라이드 1의 컨볼루션 연산을 병렬적으로 수행하고, 복수의 연산 결과를 엘리먼트별로 병합할 수 있다. 여기서, 엘리먼트별 병합 시 프로세서(120)는 로우 및 컬럼 뿐만 아니라 뎁스도 고려할 수 있다.
[132]
도 7은 본 발명의 일 실시 예에 따른 프로세서(120)의 세부 구성을 설명하기 위한 도면이다.
[133]
도 7에 도시된 바와 같이, 프로세서(120)는 데이터 스캐터(Data Scatter, 121), 복수의 연산 소자 유닛(122) 및 어큐뮬레이터(Accumulator, 123)를 포함한다.
[134]
데이터 스캐터(121)는 일측이 스토리지(110)와 연결되며, 스토리지(110)로부터 대상 데이터를 수신하여 복수의 서브 데이터로 분할할 수 있다.
[135]
그리고, 데이터 스캐터(121)는 타측이 복수의 연산 소자 유닛(122) 각각에 연결되며, 복수의 서브 데이터를 각각 복수의 연산 소자 유닛(122)으로 전송할 수 있다.
[136]
복수의 연산 소자 유닛(122)은 각각 매트릭스 형태로 배열된 복수의 연산 소자(Processing Element)를 포함할 수 있다. 즉, 제1 연산 소자 유닛(122-1), 제2 연산 소자 유닛(122-2), 제3 연산 소자 유닛(122-3) 및 제4 연산 소자 유닛(122-4)은 각각 매트릭스 형태로 배열된 복수의 연산 소자를 포함할 수 있다.
[137]
도 7에서는 제1 연산 소자 유닛(122-1), 제2 연산 소자 유닛(122-2), 제3 연산 소자 유닛(122-3) 및 제4 연산 소자 유닛(122-4)의 4개만을 도시하였으나, 이에 한정되는 것은 아니며, 얼마든지 다른 개수로 연산 소자 유닛이 형성될 수도 있다. 또한, 제1 연산 소자 유닛(122-1), 제2 연산 소자 유닛(122-2), 제3 연산 소자 유닛(122-3) 및 제4 연산 소자 유닛(122-4)은 모두 동일할 수도 있고, 서로 다를 수도 있다.
[138]
각 연산 소자 유닛 내부의 인접한 연산 소자 간에는 데이터의 일방향 시프트 또는 양방향 시프트가 가능하다. 도 7에서는 인접한 연산 소자 중 일부는 아래쪽 방향으로만 데이터를 시프트하는 것으로 도시되었으나, 이는 일 실시 예에 불과하고, 양방향 시프트도 가능하다.
[139]
연산 소자 각각은 기본적으로 곱셈기(multiplier) 및 산술 논리 연산 장치(Arithmetic Logic Unit, ALU)를 포함하며, ALU는 적어도 하나 이상의 가산기(adder)를 포함할 수 있다. 연산 소자는 곱셈기 및 ALU를 이용하여 사칙 연산을 수행할 수 있다. 다만, 이에 한정되는 것은 아니며, 사칙 연산 및 시프트 등과 같은 기능을 수행할 수 있다면 얼마든지 다른 구조로 형성될 수도 있다.
[140]
연산 소자 각각은 데이터를 저장하기 위한 레지스터를 포함할 수 있다. 예를 들어, 연산 소자 각각은 특정 싸이클에서의 연산 결과를 저장하기 위한 레지스터를 포함할 수 있다. 또는, 연산 소자 각각은 특정 싸이클에서의 연산 결과를 인접한 연산 소자로 시프트하고, 인접한 연산 소자로부터 시프트된 연산 결과를 저장하기 위한 레지스터를 포함할 수도 있다.
[141]
복수의 연산 소자 유닛(122) 각각은 데이터 스캐터(121)로부터 수신된 서브 데이터를 대응되는 서브 커널 데이터에 기초하여 컨볼루션 연산하며, 연산 결과를 어큐뮬레이터(123)로 전송할 수 있다.
[142]
여기서, 대응되는 서브 커널 데이터가 스토리지(110)에 기저장된 경우라면, 복수의 연산 소자 유닛(122) 각각은 스토리지(110)로부터 대응되는 서브 커널 데이터를 수신할 수 있다.
[143]
또는, 스토리지(110)에 대응되는 서브 커널 데이터가 저장된 것이 아니라, 커널 데이터만이 저장된 상태일 수도 있다. 이 경우, 프로세서(120)는 커널 데이터를 분할하기 위한 커널 데이터 스캐터(미도시)를 더 포함할 수 있다.
[144]
커널 데이터 스캐터(미도시)는 스토리지(110)로부터 커널 데이터를 수신하고, 이를 분할하여 대응되는 연산 소자 유닛으로 전송할 수 있다.
[145]
또는, 데이터 스캐너(121) 및 커널 데이터 스캐터(미도시)가 하나로 구현될 수도 있다. 이 경우, 통합 구현된 스캐터는 대상 데이터 및 커널 데이터를 순차적으로 입력받고, 적절한 싸이클에 각 데이터를 분할하여 대응되는 연산 소자 유닛으로 전송할 수도 있다.
[146]
연산 소자를 통한 컨볼루션 연산 방법은 일반적으로 알려진 기술이므로 이에 대한 구체적인 설명은 생략한다.
[147]
어큐뮬레이터(123)는 일측이 복수의 연산 소자 유닛(122) 각각에 연결되고 타측이 스토리지(110)와 연결되며, 복수의 연산 소자 유닛(122) 각각으로부터 복수의 연산 결과를 수신하고, 수신된 복수의 연산 결과를 병합할 수 있다.
[148]
도 8은 본 발명의 일 실시 예에 따른 전자 장치의 제어 방법을 설명하기 위한 흐름도이다.
[149]
먼저, 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 제1 스트라이드 정보에 기초하여 대상 데이터를 복수의 서브 데이터로 분할한다(S810). 그리고, 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 복수의 서브 데이터 및 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산한다(S820). 그리고, 복수의 연산 결과를 병합한다(S830). 여기서, 복수의 서브 커널 데이터는 제1 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터이며, 제2 스트라이드 정보는 대상 데이터에 커널 데이터가 적용되는 간격이 1일 수 있다.
[150]
한편, 분할하는 단계(S810)는 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할할 수 있다. 여기서, 복수의 서브 커널 데이터는 커널 데이터가 n × n 개로 분할된 데이터일 수 있다.
[151]
또한, 분할하는 단계(S810)는 n × n 개의 복수의 서브 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하는 단계 및 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득하는 단계를 포함할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다.
[152]
한편, 복수의 연산 결과는 서로 크기가 다른 매트릭스 형태이며, 병합하는 단계(S830)는 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하는 단계 및 제1 매트릭스에 포함된 값과 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합하는 단계를 포함할 수 있다. 여기서, 나머지 매트릭스의 확장된 영역은 0 값을 가질 수 있다.
[153]
그리고, 분할하는 단계(S810)는 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할할 수 있다. 여기서, 복수의 서브 커널 데이터는 커널 데이터가 m × n 개로 분할된 데이터일 수 있다.
[154]
한편, 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 커널 데이터를 n × n 개의 복수의 서브 커널 데이터로 분할하는 단계 및 제2 스트라이드 정보에 기초하여 복수의 서브 데이터 및 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하는 단계를 더 포함할 수 있다.
[155]
여기서, 분할하는 단계(S810)는 n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(i 및 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하는 단계 및 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득하는 단계를 포함할 수 있다. 여기서, a 및 b는 각각 0 이상의 자연수일 수 있다.
[156]
한편, 컨볼루션 연산하는 단계(S820)는 기저장된 복수의 서브 커널 데이터 세트 중 제1 스트라이드 정보에 대응되는 서브 커널 데이터 세트에 포함된 복수의 서브 커널 데이터를 이용하여 컨볼루션 연산을 수행할 수 있다. 여기서, 복수의 서브 커널 데이터 세트는 서로 상이한 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터 세트일 수 있다.
[157]
이상과 같은 본 발명의 다양한 실시 예에 따르면, 전자 장치는 대상 데이터에 커널 데이터가 적용되는 간격이 2 이상이더라도 1의 간격으로 컨볼루션 연산을 수행하여 하드웨어 활용도를 향상시킬 수 있다.
[158]
한편, 본 발명의 일시 예에 따르면, 이상에서 설명된 다양한 실시 예들은 기기(machine)(예: 컴퓨터)로 읽을 수 있는 저장 매체(machine-readable storage media)에 저장된 명령어를 포함하는 소프트웨어로 구현될 수 있다. 기기는, 저장 매체로부터 저장된 명령어를 호출하고, 호출된 명령어에 따라 동작이 가능한 장치로서, 개시된 실시 예들에 따른 전자 장치(예: 전자 장치(A))를 포함할 수 있다. 명령이 프로세서에 의해 실행될 경우, 프로세서가 직접, 또는 프로세서의 제어 하에 다른 구성요소들을 이용하여 명령에 해당하는 기능을 수행할 수 있다. 명령은 컴파일러 또는 인터프리터에 의해 생성 또는 실행되는 코드를 포함할 수 있다. 기기로 읽을 수 있는 저장매체는, 비일시적(non-transitory) 저장매체의 형태로 제공될 수 있다. 여기서, '비일시적'은 저장매체가 신호(signal)를 포함하지 않으며 실재(tangible)한다는 것을 의미할 뿐 데이터가 저장매체에 반영구적 또는 임시적으로 저장됨을 구분하지 않는다.
[159]
또한, 본 발명의 일 실시 예에 따르면, 이상에서 설명된 다양한 실시 예들에 따른 방법은 컴퓨터 프로그램 제품(computer program product)에 포함되어 제공될 수 있다. 컴퓨터 프로그램 제품은 상품으로서 판매자 및 구매자 간에 거래될 수 있다. 컴퓨터 프로그램 제품은 기기로 읽을 수 있는 저장 매체(예: compact disc read only memory (CD-ROM))의 형태로, 또는 어플리케이션 스토어(예: 플레이 스토어TM)를 통해 온라인으로 배포될 수 있다. 온라인 배포의 경우에, 컴퓨터 프로그램 제품의 적어도 일부는 제조사의 서버, 어플리케이션 스토어의 서버, 또는 중계 서버의 메모리와 같은 저장 매체에 적어도 일시 저장되거나, 임시적으로 생성될 수 있다.
[160]
또한, 본 발명의 일 실시 예에 따르면, 이상에서 설명된 다양한 실시 예들은 소프트웨어(software), 하드웨어(hardware) 또는 이들의 조합을 이용하여 컴퓨터(computer) 또는 이와 유사한 장치로 읽을 수 있는 기록 매체 내에서 구현될 수 있다. 일부 경우에 있어 본 명세서에서 설명되는 실시 예들이 프로세서 자체로 구현될 수 있다. 소프트웨어적인 구현에 의하면, 본 명세서에서 설명되는 절차 및 기능과 같은 실시 예들은 별도의 소프트웨어 모듈들로 구현될 수 있다. 소프트웨어 모듈들 각각은 본 명세서에서 설명되는 하나 이상의 기능 및 동작을 수행할 수 있다.
[161]
한편, 상술한 다양한 실시 예들에 따른 기기의 프로세싱 동작을 수행하기 위한 컴퓨터 명령어(computer instructions)는 비일시적 컴퓨터 판독 가능 매체(non-transitory computer-readable medium)에 저장될 수 있다. 이러한 비일시적 컴퓨터 판독 가능 매체에 저장된 컴퓨터 명령어는 특정 기기의 프로세서에 의해 실행되었을 때 상술한 다양한 실시 예에 따른 기기에서의 처리 동작을 특정 기기가 수행하도록 한다. 비일시적 컴퓨터 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 비일시적 컴퓨터 판독 가능 매체의 구체적인 예로는, CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등이 있을 수 있다.
[162]
또한, 상술한 다양한 실시 예들에 따른 구성 요소(예: 모듈 또는 프로그램) 각각은 단수 또는 복수의 개체로 구성될 수 있으며, 전술한 해당 서브 구성 요소들 중 일부 서브 구성 요소가 생략되거나, 또는 다른 서브 구성 요소가 다양한 실시 예에 더 포함될 수 있다. 대체적으로 또는 추가적으로, 일부 구성 요소들(예: 모듈 또는 프로그램)은 하나의 개체로 통합되어, 통합되기 이전의 각각의 해당 구성 요소에 의해 수행되는 기능을 동일 또는 유사하게 수행할 수 있다. 다양한 실시예들에 따른, 모듈, 프로그램 또는 다른 구성 요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱하게 실행되거나, 적어도 일부 동작이 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다.
[163]
이상에서는 본 개시의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 개시는 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 개시의 요지를 벗어남이 없이 당해 개시에 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 개시의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.

청구범위

[청구항 1]
스토리지; 및 상기 스토리지에 저장된 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 스트라이드(stride) 정보에 기초하여 상기 대상 데이터 및 상기 커널 데이터를 컨볼루션(convolution) 연산하는 프로세서;를 포함하며, 상기 프로세서는, 제1 스트라이드 정보에 기초하여 상기 대상 데이터를 복수의 서브 데이터로 분할하고, 상기 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하며, 복수의 연산 결과를 병합하고, 상기 복수의 서브 커널 데이터는, 상기 제1 스트라이드 정보에 기초하여 상기 커널 데이터가 분할된 데이터이며, 상기 제2 스트라이드 정보는, 상기 대상 데이터에 상기 커널 데이터가 적용되는 간격이 1인, 전자 장치.
[청구항 2]
제1항에 있어서, 상기 프로세서는, 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 n × n 개로 분할된 데이터인, 전자 장치.
[청구항 3]
제2항에 있어서, 상기 프로세서는, 상기 n × n 개의 복수의 서브 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 상기 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득하며, 상기 a 및 상기 b는, 각각 0 이상의 자연수인, 전자 장치.
[청구항 4]
제1항에 있어서, 상기 복수의 연산 결과는, 서로 크기가 다른 매트릭스 형태이며, 상기 프로세서는, 상기 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하고, 상기 제1 매트릭스에 포함된 값과 상기 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합하며, 상기 나머지 매트릭스의 확장된 영역은, 0 값을 가지는, 전자 장치.
[청구항 5]
제1항에 있어서, 상기 프로세서는, 각각이 매트릭스 형태로 배열된 복수의 연산 소자(Processing Element)를 포함하는 복수의 연산 소자 유닛; 일측이 상기 스토리지와 연결되며, 타측이 상기 복수의 연산 소자 유닛 각각에 연결된 데이터 스캐터(scatter); 및 일측이 상기 복수의 연산 소자 유닛 각각에 연결되며, 타측이 상기 스토리지와 연결된 어큐뮬레이터(accumulator);를 포함하는, 전자 장치.
[청구항 6]
제5항에 있어서, 상기 데이터 스캐터는, 상기 스토리지로부터 상기 대상 데이터를 수신하여 상기 복수의 서브 데이터로 분할하고, 상기 복수의 서브 데이터를 각각 상기 복수의 연산 소자 유닛으로 전송하며, 상기 복수의 연산 소자 유닛 각각은, 상기 데이터 스캐터로부터 수신된 서브 데이터를 대응되는 서브 커널 데이터에 기초하여 상기 컨볼루션 연산하며, 연산 결과를 상기 어큐뮬레이터로 전송하고, 상기 어큐뮬레이터는, 상기 복수의 연산 소자 유닛 각각으로부터 수신된 복수의 연산 결과를 병합하는, 전자 장치.
[청구항 7]
제1항에 있어서, 상기 프로세서는, 상기 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 m × n 개로 분할된 데이터인, 전자 장치.
[청구항 8]
제1항에 있어서, 상기 프로세서는, 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 커널 데이터를 n × n 개의 복수의 서브 커널 데이터로 분할하고, 상기 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 상기 컨볼루션 연산하는, 전자 장치.
[청구항 9]
제8항에 있어서, 상기 프로세서는, 상기 n × n 개의 복수의 서브 커널 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하고, 상기 커널 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 커널 데이터의 값으로 획득하며, 상기 a 및 상기 b는, 각각 0 이상의 자연수인, 전자 장치.
[청구항 10]
제1항에 있어서, 상기 프로세서는, 상기 스토리지에 기저장된 복수의 서브 커널 데이터 세트 중 상기 제1 스트라이드 정보에 대응되는 서브 커널 데이터 세트에 포함된 상기 복수의 서브 커널 데이터를 이용하여 상기 컨볼루션 연산을 수행하며, 상기 복수의 서브 커널 데이터 세트는, 서로 상이한 스트라이드 정보에 기초하여 상기 커널 데이터가 분할된 데이터 세트인, 전자 장치.
[청구항 11]
전자 장치의 제어 방법에 있어서, 대상 데이터에 커널 데이터가 적용되는 간격을 나타내는 제1 스트라이드 정보에 기초하여 상기 대상 데이터를 복수의 서브 데이터로 분할하는 단계; 상기 제1 스트라이드 정보와 상이한 제2 스트라이드 정보에 기초하여 상기 복수의 서브 데이터 및 상기 복수의 서브 데이터에 각각 대응되는 복수의 서브 커널 데이터를 컨볼루션 연산하는 단계; 및 복수의 연산 결과를 병합하는 단계;를 포함하고, 상기 복수의 서브 커널 데이터는, 상기 제1 스트라이드 정보에 기초하여 커널 데이터가 분할된 데이터이며, 상기 제2 스트라이드 정보는, 상기 대상 데이터에 상기 커널 데이터가 적용되는 간격이 1인, 제어 방법.
[청구항 12]
제11항에 있어서, 상기 분할하는 단계는, 상기 제1 스트라이드 정보가 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 n × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 n × n 개로 분할된 데이터인, 제어 방법.
[청구항 13]
제12항에 있어서, 상기 분할하는 단계는, 상기 n × n 개의 복수의 서브 데이터 각각을 (i, j)(상기 i 및 상기 j는, 각각 n 이하의 자연수)의 2차원 정보로 식별하는 단계; 및 상기 대상 데이터에서 (n × a + i)의 로우 및 (n × b + j)의 컬럼에 위치한 값을 (i, j)에 대응되는 서브 데이터의 값으로 획득하는 단계;를 포함하며, 상기 a 및 상기 b는, 각각 0 이상의 자연수인, 제어 방법.
[청구항 14]
제11항에 있어서, 상기 복수의 연산 결과는, 서로 크기가 다른 매트릭스 형태이며, 상기 병합하는 단계는, 상기 복수의 연산 결과 중 가장 크기가 큰 제1 매트릭스에 기초하여 나머지 매트릭스의 크기를 확장하는 단계; 및 상기 제1 매트릭스에 포함된 값과 상기 크기가 확장된 나머지 매트릭스에 포함된 값 중 동일한 위치의 값을 병합하는 단계;를 포함하며, 상기 나머지 매트릭스의 확장된 영역은, 0 값을 가지는, 제어 방법.
[청구항 15]
제11항에 있어서, 상기 분할하는 단계는, 상기 제1 스트라이드 정보가 로우에 대하여 m(m은 1보다 큰 정수)이고 컬럼에 대하여 n(n은 1보다 큰 정수)이면, 상기 대상 데이터를 m × n 개의 복수의 서브 데이터로 분할하고, 상기 복수의 서브 커널 데이터는, 상기 커널 데이터가 m × n 개로 분할된 데이터인, 제어 방법.

도면

[도1a]

[도1b]

[도2]

[도3a]

[도3b]

[도3c]

[도4a]

[도4b]

[도5a]

[도5b]

[도5c]

[도6]

[도7]

[도8]