본 명세서에서 개시되어 있는 특정한 구조적 또는 기능적 설명들은 단지 기술적 개념에 따른 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 실시예들은 다양한 다른 형태로 실시될 수 있으며 본 명세서에 설명된 실시예들에 한정되지 않는다.
제1 또는 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 이해되어야 한다. 예를 들어 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 표현들, 예를 들어 "~간의에"와 "바로~간의에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
실시예들은 퍼스널 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 텔레비전, 스마트 가전 기기, 지능형 자동차, 키오스크, 웨어러블 장치 등 다양한 형태의 제품으로 구현될 수 있다. 이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 일 실시예에 따른 컨볼루션(convolution) 또는 행렬(matrix)연산을 수행하기 위한 시스템을 설명하기 위한 도면이다.
도 1을 참조하면, 일 실시예에 따른 컨볼루션 또는 행렬 연산을 수행하기 위한 시스템은 메모리 장치(110) 및 고속 연산 처리기(140)를 포함할 수 있다. 일 실시예에 따른 컨볼루션 또는 행렬 연산을 수행하기 위한 시스템은 컨볼루션 또는 행렬 연산을 수행하는 컴퓨팅 장치일 수 있다.
컨볼루션은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자일 수 있다. 컨볼루션 연산은 주어진 목적에 상응하는 필터를 선택하고, 선택된 필터로 입력 데이터의 모든 영역을 훑으면서 입력 데이터에 대응하는 특정 특징(feature)을 추출하는 연산을 의미할 수 있다. 일례로, 시스템은 입력 데이터에 필터 데이터를 컨볼루션 연산하여 출력 데이터를 획득할 수 있고, 각 데이터는 행렬 형태로 정의될 수 있다. 데이터가 행렬 형태로 정의되는 경우, 컨볼루션 연산은 행렬 연산으로 구성될 수 있다.
행렬 연산은 행렬의 가감, 행렬의 스칼라 곱셈, 행렬의 곱셈, 행렬의 요소별 곱셈 등 복수의 행렬 사이에 가능한 모든 연산법칙을 포함할 수 있다. 나아가, 행렬 연산은 선형방정식과 같이 행렬의 형태로 표현될 수 있는 체계들의 연산도 포함할 수 있다.
컨볼루션 연산은 행렬의 가감 연산과 행렬의 곱셈 연산의 조합으로 이루어질 수 있는데, 이 중 행렬의 곱셈 연산에 소모되는 시간 및 전력이 행렬의 가감 연산에 소모되는 시간 및 전력보다 훨씬 클 수 있다. 시스템 관점에서, 행렬의 곱셈 연산의 횟수를 줄이는 것이 컨볼루션 연산 처리 속도 향상 및 전력 소모 감소의 중요한 키일 수 있다.
또한, 컨볼루션 연산을 수행하기 위한 기존의 시스템은 메모리에 저장된 데이터를 CPU(Central Processing Unit), GPU(Graphic Processing Unit), DSP(Digital Signal Processor), NPU(Neural Processing Unit), , FPGA(Field Programmable Gate Array)등의 고속 연산 처리기로 이동시켜 처리하고, 처리된 데이터를 다시 메모리에 저장한다. 기존의 시스템에 따르면, 데이터를 저장하는 메모리와 연산을 처리하는 연산 처리기가 분리되어 있고, 메모리에 저장된 데이터를 처리하기 위해서는 연산 처리기로 데이터를 옮겨서 처리해야 하기 때문에 데이터 처리 시간이 오래 걸리는 문제가 있을 수 있다.
일 실시예에 따른 시스템은 컨볼루션 연산의 연산량을 줄이기 위하여 데이터를 변환하여 컨볼루션 연산을 수행하는 알고리즘을 사용할 수 있다. 예를 들어, 시스템은 위노그라드(winograd) 알고리즘을 사용하여 컨볼루션 연산의 곱셈 복잡도(컨볼루션 연산 시 요구되는 곱셈의 수)를 줄일 수 있다. 또는, 시스템은 슈트라센(strassen) 알고리즘을 사용하여 컨볼루션 연산의 곱셈 복잡도를 줄일 수 있다. 다만, 위 알고리즘을 사용하는 경우 데이터 변환과 같은 전처리 또는 후처리가 필요한데, 기존의 시스템의 경우 연산 처리기에서 해당 전처리 또는 후처리를 수행할 수 밖에 없었다.
일 실시예에 따른 시스템은 기능 모듈(130)이 내장된 메모리 장치(110)를 사용할 수 있고, 기능 모듈(130)을 통해 알고리즘의 전처리 또는 후처리를 수행함으로써 컨볼루션 또는 행렬 연산의 처리 속도를 높임과 동시에 전력 효율을 높일 수 있다. 보다 구체적으로, 고속 연산 처리기(140)가 데이터를 처리하기 전에 메모리 장치(110)에 포함된 기능 모듈(예를 들어, 회로의 형태)(130)을 이용하여 알고리즘의 전처리 또는 후처리를 수행함으로써 같은 시간에 좀 더 많은 데이터를 처리할 수 있다.
메모리 장치(110)는 데이터 저장 뿐만 아니라 데이터 처리가 가능한 기능 메모리(FIM; function in memory)를 포함할 수 있다. 기능 모듈(130)은 읽기(read) 또는 쓰기(write) 명령에 대응하는 클럭 사이클(clock cycle) 내에서 알고리즘의 전처리 또는 후처리를 수행할 수 있다. 기능 모듈(130)이 읽기 또는 쓰기 명령에 대응하는 클럭 사이클 내에서 알고리즘의 전처리 또는 후처리를 수행할 수 있기 때문에, 일 실시예에 따른 시스템은 기존의 시스템에 비해 알고리즘의 전처리 또는 후처리 시간을 단축할 수 있다.
일 실시예에 따르면, 읽기 또는 쓰기 명령에 대응하는 클럭 사이클은 메모리 장치의 구동을 위한 클럭의 단일 사이클에 해당할 수 있다. 아래에서 상세하게 설명하겠으나, 이 경우 단일 사이클 내에 기능 모듈(130)의 처리가 완료될 수 있도록 곱셈기(multiplier)를 제외한 회로들이 기능 모듈(130)에 포함될 수 있다.
다른 실시예에 따르면, 읽기 또는 쓰기 명령에 대응하는 클럭 사이클은 메모리 장치의 구동을 위한 클럭의 복수 사이클에 해당할 수 있다. 이 경우 기능 모듈(130)은 곱셈기를 포함할 수 있다. 아래에서 설명하겠으나, 응답 속도(latency)를 향상시키기 위하여, 메모리 장치에 파이프라이닝 기법이 적용될 수 있다.
메모리 장치(110)는 메모리 셀(memory cell)(또는, 메모리 모듈(memory module)로 지칭될 수 있다)(120)과 기능 모듈(130)을 포함할 수 있다. 메모리 셀(120)은 입력 데이터, 필터 데이터 및 출력 데이터를 저장할 수 있다. 입력 데이터는 컨볼루션 연산의 대상이 되는 데이터로, 예를 들어 2차원 함수의 형태로 표현되는 이미지의 픽셀 데이터일 수 있다. 필터 데이터는 입력 데이터의 특징(feature)을 검출하기 위해 사용되는 필터에 관한 데이터로, 예를 들어 필터 데이터는 이미지의 특징을 찾아내기 위한 공용 파라미터일 수 있다. 또한, 필터는 커널(kernel), 마스트(mask), 윈도우(window) 등으로 지칭될 수도 있고, 필터는 일반적으로 (4, 4)이나 (3, 3)과 같은 정사각 행렬로 정의될 수 있다. 시스템은 필터를 이용하여 입력 데이터를 지정된 간격으로 순회하며 컨볼루션 연산을 하여 특징맵(feature map)을 생성할 수 있다. 여기서 필터를 순회하는 지정된 간격을 스트라이드(stride)라고 할 수 있다.
기능 모듈(130)에는 슈트라센, 위노그라드 또는 그의 변형된 알고리즘에서 필요로 하는 변환 수식을 처리하는 변환 회로가 탑재될 수 있다. 변환 회로는 입력 데이터 변환 회로(131), 필터 데이터 변환 회로(133), 출력 데이터 변환 회로(135) 를 포함할 수 있다. 입력 데이터 변환 회로(131)는 입력 데이터 중 적어도 일부의 읽기 명령에 반응하여, 알고리즘의 전처리를 위하여 읽기 명령에 대응하는 클럭 사이클 내에서 입력 데이터 중 적어도 일부의 데이터를 변환(transform)하여 출력할 수 있다. 입력 데이터 변환 회로(131)에 의해 변환된 데이터를 변환된 입력 데이터라 지칭할 수 있다.
필터 데이터 변환 회로(133)는 필터 데이터 중 적어도 일부의 읽기 명령에 반응하여, 알고리즘의 전처리를 위하여 읽기 명령에 대응하는 클럭 사이클 내에서 필터 데이터 중 적어도 일부의 데이터를 변환(transform)하여 출력할 수 있다. 필터 데이터 변환 회로(133)에 의해 변환된 데이터를 변환된 필터 데이터라 지칭할 수 있다.
고속 연산 처리기(140)는 변환된 입력 데이터와 변환된 필터 데이터를 수신하여, 알고리즘에 따른 나머지 연산을 수행할 수 있고, 그 결과로 중간 출력 데이터를 생성할 수 있다. 고속 연산 처리기(140)는 CPU, GPU, DSP, NPU, FPGA 중 적어도 하나를 포함할 수 있으며, 데이터 변환 회로, 필터 변환 회로 중 적어도 하나와 메모리에 내장될 수 있다.
출력 데이터 변환 회로(135)는 중간 출력 데이터 중 적어도 일부의 쓰기 명령에 반응하여, 알고리즘의 후처리를 위하여 쓰기 명령에 대응하는 클럭 사이클 내에서 중간 출력 데이터 중 적어도 일부의 데이터를 변환(transform)하여 출력 데이터를 생성할 수 있고, 생성된 출력 데이터는 메모리 셀(120)에 저장될 수 있다. 출력 데이터는 입력 데이터와 필터 데이터에 대한 컨볼루션 연산의 최종 결과 데이터일 수 있다.
이하에서, 도 2 내지 도 3을 참조하여 위노그라드 알고리즘이 설명되고, 도 4를 참조하여 메모리 장치의 동작 방법이 설명되고, 도 5 내지 도 8을 참조하여 1D 컨볼루션 연산에 있어서, 위노그라드 알고리즘에 따른 메모리 장치의 동작 방법이 설명되고, 도 9를 참조하여 데이터를 정렬(align)하여 저장하는 DMA 모듈이 포함된 컴퓨팅 장치가 설명되고, 도 10 내지 도 14를 참조하여 2D 컨볼루션 연산에 있어서, 위노그라드 알고리즘에 따른 메모리 장치의 동작 방법이 설명되고, 도 15를 참조하여 나눗셈에 의한 정보 손실을 줄일 수 있는 방법이 설명되고, 도 16을 참조하여 슈트라센 알고리즘에 따른 메모리 장치의 동작 방법이 설명된다.
도 2는 일 실시예에 따른 1D 컨볼루션 연산에 따른 위노그라드 알고리즘을 설명하기 위한 도면이다.
컨볼루션 연산을 하는 방법은 여러 가지가 있을 수 있다. 그 중에서 수학식 1과 같이, 컨볼루션 연산을 하고자 하는 두 함수의 푸리에 변환(fourier transform) 함수를 곱한 결과에 역 푸리에 변환(inverse fourier transform)을 취하면 원래 함수의 컨볼루션과 동일한 결과를 얻을 수 있다.
시간 도메인(Time domain)에서 컨볼루션을 하지 않고 수학식 1과 같이 주파수 도메인(frequency domain)에서 연산을 하면 곱셈 연산의 숫자가 줄어들어서 전체 연산의 처리 속도 증가와 이에 따른 전력 효율 증가 효과를 얻을 수 있다.
도 2를 참조하면 전통적인 1D 컨볼루션 연산 방법은 4개의 입력 데이터 k0, k1, k2, k3와 3개의 필터 데이터 w0, w1, w2에 대해 컨볼루션 연산을 수행하여 수학식 2와 같이 2개의 출력 데이터 r0, r1를 출력한다.
수학식 2를 참조하면, 전통적인 1D 컨볼루션 연산은 6번의 곱셈 연산이 사용된다.
일 실시예에 따른 수학식 3의 위노그라드 알고리즘에 따르면, 출력 데이터를 mo 내지 m4의 조합으로 변환하여 나타낼 수 있다.
F(m, n)은 컨볼루션 연산 기반 FIR 필터로, m개의 출력 데이터를 가지고 n개의 필터 데이터를 갖는다는 의미를 나타내는 표기(notation)일 수 있다. 여기서, mo 내지 m4는 각각 수학식 4와 같을 수 있다.
위노그라드 알고리즘에 따른 1D 컨볼루션 연산은 4번의 곱셈 연산이 사용되어, 기존의 6번에 비해 곱셈 연산의 수가 줄어듦을 알 수 있다.
위노그라드 알고리즘에 따른 1D 컨볼루션 연산을 수행하는 방법은 크게 4 단계로 나뉠 수 있다. 먼저, 입력 데이터인 k0, k1, k2, k3를 k0-k2, k1+k2, k1-k3, k2-k1로 변환하는 단계, 두번째로 필터 데이터 w0, w1, w2를 (w0, w0+w1+w2)/2, (w2, w0-w1+w2)/2로 변환하는 단계, 세번째로 변환된 입력 데이터와 변환된 필터 데이터에 대해 요소별 곱셈(elementwise multiplication) 연산을 수행하여 m0 내지 m3를 산출하는 단계 및 마지막은 m0 내지 m4를 이용하여 출력 데이터 r0, r1를 출력하는 단계일 수 있다. 이를 수학식으로 정리하면, 수학식 5와 같이 나타낼 수 있다.
수학식 5에서 S = (r0, r1), w = (w0, w1, w2), k = (k0, k1, k2, k3)일 수 있다.
입력 데이터인 k0, k1, k2, k3를 k0-k2, k1+k2, k1-k3, k2-k1로 변환하는 1단계는 수학식 5의 (CTkT) 연산을 수행하는 단계로, C는 입력 데이터를 변환하는 입력 변환 행렬로 수학식 6과 같을 수 있다.
필터 데이터 w0, w1, w2를 (w0, w0+w1+w2)/2, (w2, w0-w1+w2)/2로 변환하는 2단계는 수학식 5의 (GwT) 연산을 수행하는 단계로, G는 필터 데이터를 변환하는 필터 변환 행렬로 수학식 7과 같을 수 있다.
변환된 입력 데이터와 변환된 필터 데이터에 대해 요소별 곱셈 연산을 수행하여 m0 내지 m3를 산출하는 3단계는 수학식 5의
연산을 수행하여 중간 출력 데이터를 산출하는 단계로, 수학식 1에서 주파수 도메인에서 곱셈하는 단계에 대응될 수 있다. 요소별 곱셈 연산은 두 행렬에서 같은 위치에 있는 원소끼리 곱셈 연산을 수행하는 것을 의미할 수 있다.
m0 내지 m4를 이용하여 출력 데이터 r0, r1를 출력하는 4단계는 수학식 5의 A
T과
사이의 곱셈 연산을 수행하는 단계로, 수학식 1에서 주파수 도메인의 결과를 다시 시간 도메인으로 변경하는 단계에 대응될 수 있다. A는 중간 출력 데이터를 변환하는 출력 변환 행렬로 수학식 8과 같을 수 있다.
입력 데이터인 k0, k1, k2, k3를 k0-k2, k1+k2, k1-k3, k2-k1로 변환하는 1단계 및 필터 데이터 w0, w1, w2를 (w0, w0+w1+w2)/2, (w2, w0-w1+w2)/2로 변환하는 2단계는 전술한 전처리 과정에 해당하고, m0 내지 m4를 이용하여 출력 데이터 r0, r1를 출력하는 4단계는 전술한 후처리 과정에 해당할 수 있다. 일 실시예에 따른 시스템은 메모리 장치에서 1단계, 2단계를 수행하고, 고속 연산 처리기에서 3단계를 수행하며, 다시 메모리 장치에서 4단계를 수행할 수 있다.
도 3은 일 실시예에 따른 2D 컨볼루션 연산에 따른 위노그라드 알고리즘을 설명하기 위한 도면이다.
도 3의 도면(310, 320)을 참조하면, 4x4 입력 데이터에 3x3 필터를 사용하여 전통적인 2D 컨볼루션 연산을 수행할 수 있고, 이 경우 36번의 곱셈 연산이 사용될 수 있다.
위노그라드 알고리즘에 따른 2D 컨볼루션 연산은 위노그라드 알고리즘에 따른 1D 컨볼루션 연산을 2번 반복하여 수행될 수 있고, 이는 수학식 9와 같이 나타낼 수 있다.
일례로 도면(330)을 참조하면, 4x4 입력 데이터에 3x3 필터를 사용하는 경우 위노그라드 알고리즘에 따른 2D 컨볼루션 연산은 수학식 10과 같이 나타낼 수 있고, 이 경우에는 16번의 곱셈 연산만이 사용될 수 있다.
여기서, 입력 변환 행렬, 필터 변환 행렬 및 출력 변환 행렬은 각각 수학식 11 내지 수학식 13과 같이 나타낼 수 있다.
mxn 크기의 입력 데이터를 rxs 크기의 필터로 처리할 시, 전통적인 2D 컨볼루션 연산의 경우
번의 곱셈 연산이 필요하지만, 위노그라드 알고리즘에 따른 2D 컨볼루션 연산의 경우 (m+r-1)(n+s-1)번의 곱셈 연산만 필요할 수 있다.
위노그라드 알고리즘에 따라 컨볼루션 연산을 수행할 경우 행렬의 가산 연산의 수는 늘어나지만, 곱셈 연산의 수가 줄어들 수 있다. 이를 통해, 시스템의 전체적인 연산 처리 속도가 향상되고, 전력 소모가 줄어들 수 있다.
도 4는 일 실시예에 따른 메모리 장치의 동작 방법을 설명하기 위한 도면이다.
도 4를 참조하면, 단계들(410, 420)는 도 1을 참조하여 전술된 메모리 장치(110)에 의해 수행될 수 있다. 일 실시예에 따른 동작은 메모리의 종류에 상관없이 SRAM, DRAM, PRAM, MRAM, Flash 등의 메모리가 들어가는 모든 시스템에서 적용가능 할 수 있다.
단계(410)에서, 기능 모듈(130)은 읽기 명령에 반응하여, 메모리 셀(120)로부터 입력 데이터 및 필터 데이터 중 적어도 일부의 데이터를 수신한다.
단계(420)에서, 기능 모듈(130)은 읽기 명령에 대응하는 클럭 사이클 내에서, 적어도 일부의 데이터를 컨볼루션 연산의 파라미터에 따라 변환하여 출력한다. 기능 모듈(130)은 입력 변환 행렬에 기초하여 입력 데이터 중 적어도 일부의 데이터를 변환하여 출력할 수 있다. 예를 들어, 기능 모듈(130)은 입력 변환 행렬에 대응하여 설계되는 입력 데이터 변환 회로(131)를 포함할 수 있고, 입력 데이터 변환 회로(131)는 입력 데이터 중 적어도 일부의 데이터를 변환하여 변환된 입력 데이터를 출력할 수 있다.
입력 변환 행렬은 컨볼루션 연산의 파라미터 및 입력 데이터 중 적어도 일부의 데이터를 변환하는 알고리즘의 유형의 조합에 기초하여 결정될 수 있다. 컨볼루션 연산의 파라미터는 출력 데이터의 크기, 필터 데이터의 크기, 입력 데이터의 크기, 스트라이드의 간격 및 패딩의 크기 중 적어도 하나에 기초하여 결정될 수 있다. 알고리즘은 컨볼루션 연산의 곱셈 복잡도를 낮추기 위하여 데이터를 변환하는 알고리즘으로, 전술한 위노그라드 알고리즘, 슈트라센 알고리즘 또는 이들의 변형 알고리즘이 적용될 수 있다. 예를 들어, 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행하는 경우, 입력 변환 행렬은 수학식 6과 같을 수 있고, F(2x2, 3x3)에 대한 컨볼루션 연산을 수행하는 경우, 입력 변환 행렬은 수학식 11과 같을 수 있다.
기능 모듈(130)은 필터 변환 행렬에 기초하여 필터 데이터 중 적어도 일부의 데이터를 변환하여 출력할 수 있다. 예를 들어, 기능 모듈(130)은 필터 변환 행렬에 대응하여 설계되는 필터 데이터 변환 회로(133)를 포함할 수 있고, 필터 데이터 변환 회로(133)는 필터 데이터 중 적어도 일부의 데이터를 변환하여 변환된 필터 데이터를 출력할 수 있다. 필터 변환 행렬은 컨볼루션 연산의 파라미터 및 입력 데이터 중 적어도 일부의 데이터를 변환하는 알고리즘의 유형의 조합에 기초하여 결정될 수 있다. 예를 들어, 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행하는 경우, 필터 변환 행렬은 수학식 7과 같을 수 있고, F(2x2, 3x3)에 대한 컨볼루션 연산을 수행하는 경우, 필터 변환 행렬은 수학식 12와 같을 수 있다.
메모리 장치(110)는 멀티플렉서(Mutiplexer)를 이용해서 필터 데이터 변환 회로(133)를 사용할 수도 있고 사용하지 않을 수도 있다. 예를 들어, 필터 데이터는 자주 바뀌지 않는 값이므로, 필터 변환 행렬에 기초하여 미리 계산된 변환된 필터 데이터를 메모리 셀(120)에 저장할 수 있고, 메모리 장치(110)는 멀티플렉서를 이용해서 저장된 필터 데이터를 다이렉트로 로드하여 사용할 수도 있다.
기능 모듈(130)은 변환된 입력 데이터와 변환된 필터 데이터 사이의 연산을 통해 출력된 중간 출력 데이터 중 적어도 일부의 쓰기 명령에 반응하여, 쓰기 명령에 대응하는 클럭 사이클 내에서 적어도 일부의 연산 출력 데이터를 컨볼루션 연산의 파라미터에 따라 변환하여 메모리 셀(120)에 저장할 수 있다.
예를 들어, 기능 모듈(130)은 출력 변환 행렬에 대응하여 설계되는 출력 데이터 변환 회로(135)를 포함할 수 있고, 출력 데이터 변환 회로(135)는 중간 출력 데이터 중 적어도 일부의 데이터를 변환하여 출력 데이터를 출력할 수 있다. 출력 변환 행렬은 컨볼루션 연산의 파라미터 및 입력 데이터 중 적어도 일부의 데이터를 변환하는 알고리즘의 유형의 조합에 기초하여 결정될 수 있다. 예를 들어, 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행하는 경우, 출력 변환 행렬은 수학식 8과 같을 수 있고, F(2x2, 3x3)에 대한 컨볼루션 연산을 수행하는 경우, 출력 변환 행렬은 수학식 13과 같을 수 있다.
기능 모듈(130)은 읽기(read) 또는 쓰기(write) 명령에 대응하는 클럭 사이클(clock cycle) 내에서 알고리즘의 전처리 또는 후처리를 수행할 수 있다. 알고리즘의 전처리는 변환된 입력 데이터 및/또는 변환된 필터 데이터를 생성하는 동작을 포함할 수 있고, 알고리즘의 후처리는 중간 출력 데이터로를 출력 데이터로 변환하는 동작을 포함할 수 있다. 기능 모듈(130)이 읽기 또는 쓰기 명령에 대응하는 클럭 사이클 내에서 알고리즘의 전처리 또는 후처리를 수행할 수 있기 때문에, 일 실시예에 따른 시스템은 기존의 시스템에 비해 매 사이클마다 알고리즘의 전처리 및 후처리에 소모되는 시간만큼 단축할 수 있다.
입력 데이터와 출력 데이터가 하나의 버스를 공유하는 경우, 메모리 장치(110)는 입력 명령 또는 출력 명령을 판별하는 신호에 의해 입력 데이터 변환 회로를 사용할지 출력 데이터 변환 회로를 사용할지 결정할 수 있다. 예를 들어, 상기 신호에 의해 버스를 입력 포트(input port)로 사용하는 경우, 메모리 장치는 입력 데이터 변환 회로를 사용하고, 반대로 상기 신호에 의해 버스를 출력 포트(output port)로 사용하는 경우, 메모리 장치는 출력 데이터 변환 회로를 사용할 수 있다.
도 1 내지 도 4를 참조하여, 컨볼루션 연산의 연산 속도를 향상시킬 수 있는 메모리 장치(110)의 동작 방법을 설명하였다. 아래에서, 도 5 내지 도 8을 참조하여 1D 컨볼루션 연산의 연산 속도를 향상시키기 위한 기능 모듈의 구체적인 구성을, 도 10 내지 도 15를 참조하여 2D 컨볼루션 연산의 연산 속도를 향상시키기 위한 기능 모듈의 구체적인 구성을 설명한다.
도 5는 일 실시예에 따른 위노그라드 알고리즘에 따른 1D 컨볼루션 연산의 전처리를 수행하기 위한 입력 데이터 변환 회로가 포함된 메모리 장치를 도시한 도면이다.
도 5를 참조하면, 일 실시예에 따른 메모리 장치는 메모리 셀(510)과 기능 모듈을 포함할 수 있다. 도 1 내지 4의 설명은 도 5에도 적용 가능하므로, 중복되는 내용의 설명은 생략한다.
일 실시예에 따른 시스템은 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행할 수 있다. 메모리 셀은 4개의 데이터 단위로 입력 데이터를 저장할 수 있다.
기능 모듈은 입력 데이터 변환 회로(520)를 포함할 수 있다. 입력 데이터 변환 회로(520)는 입력 데이터인 k0, k1, k2, k3를 각각 k0-k2, k1+k2, k1-k3, k2-k1로 변환할 수 있다. 입력 데이터 변환 회로(520)는 수학식 6의 입력 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 입력 데이터 변환 회로(520)는 입력 변환 행렬에 대응하는 가산기(adder)들의 조합으로 구성될 수 있다. 2의 보수나 1의 보수를 이용하여 음수를 표현하는 경우, 가산기를 가감산기로 사용할 수 있다.
입력 데이터 변환 회로(520)는 읽기 명령에 대응하는 클럭 사이클 내에서 입력 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 입력 데이터 변환 회로(520)는 상대적으로 구성이 단순하고 속도가 빠른 가산기들의 조합만으로 구성되었기 때문이다.
여기서, 도 5에 도시된 입력 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 입력 변환 행렬에 대응되는 다양한 회로들이 입력 변환 회로로 동작할 수 있다.
도 6은 일 실시예에 따른 위노그라드 알고리즘에 따른 1D 컨볼루션 연산의 전처리를 수행하기 위한 필터 데이터 변환 회로가 포함된 메모리 장치를 도시한 도면이다.
도 6를 참조하면, 일 실시예에 따른 메모리 장치는 메모리 셀(610)과 기능 모듈을 포함할 수 있다.
일 실시예에 따른 시스템은 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행할 수 있다. 메모리 셀은 3개의 데이터 단위로 필터 데이터를 저장할 수 있다.
기능 모듈은 필터 데이터 변환 회로(620)를 포함할 수 있다. 필터 데이터 변환 회로(620)는 필터 데이터인 w0, w1, w2 를 각각 (w0, w0+w1+w2)/2, (w2, w0-w1+w2)/2로 변환할 수 있다. 필터 데이터 변환 회로(620)는 수학식 7의 필터 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 필터 데이터 변환 회로(620)는 필터 변환 행렬에 대응하는 가산기 및 시프터의 조합으로 구성될 수 있다. 시프터(shifter)를 이용하면 상수 나눗셈 연산을 수행할 수 있다. 실시예에 따라, 필터 데이터는 가중치(weight)라고 지칭될 수 있으며, 필터 데이터 변환 회로(620)는 가중치 변환 회로라고 지칭될 수 있다.
필터 데이터 변환 회로(620)는 읽기 명령에 대응하는 클럭 사이클 내에서 필터 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 필터 데이터 변환 회로(620)는 상대적으로 구성이 단순하고 속도가 빠른 가산기 및 시프터의 조합만으로 구성되었기 때문이다.
여기서, 도 6에 도시된 필터 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 필터 변환 행렬에 대응되는 다양한 회로들이 필터 변환 회로로 동작할 수 있다.
도 7은 일 실시예에 따른 위노그라드 알고리즘에 따른 1D 컨볼루션 연산을 수행하기 위한 시스템을 설명하기 위한 도면이다.
도 7를 참조하면, 일 실시예에 따른 시스템은 고속 연산 처리기(710)를 포함할 수 있고, 고속 연산 처리기(710)는 입력 데이터 변환 회로(520)를 통해 변환된 입력 데이터와 필터 데이터 변환 회로(620)를 통해 변환된 필터 데이터에 대해 요소별 곱셈 연산을 수행하여 중간 출력 데이터 m0 내지 m3를 산출할 수 있다. 여기서, mo 내지 m3는 각각 수학식 4와 같을 수 있다.
일 실시예에 따른 고속 연산 처리기(710)는 메모리 장치에 내장될 수도 있다. 예를 들어, 고속 연산 처리기(710)는 곱셈기(Multiplier)일 수 있고, 곱셈기는 메모리 장치에 내장되어 변환된 입력 데이터와 변환된 필터 데이터에 대해 요소별 곱셈 연산을 수행할 수 있다. 도면에는, 메모리 셀(510)과 메모리 셀(610)이 분리되는 것처럼 도시하였으나, 하나의 메모리 셀을 이용하여 입력 데이터와 필터 데이터를 동시에 읽을 수도 있다. 예를 들어, 통상적으로 메모리 인터페이스를 구현할 때, 데이터 버스의 크기(라인 수) 단위로 데이터를 읽게 되는데, 개별 입력 데이터나 개별 필터 데이터의 비트 수가 데이터 버스의 라인 수보다 적어서, 한 번에 데이터를 읽을 때 여러 데이터를 동시에 읽을 수 있다.
또는, 데이터 버스의 채널 수를 늘릴 수도 있다. 예를 들어 8GB 용량의 DRAM 하나를 쓰는 거(1채널) 보다 4GB 용량의 DRAM 두 개를 쓰면(2채널), 데이터 버스의 크기가 두 배가 될 수 있다. 이 경우에는 DMA(Direct Memory Access) 모듈을 이용하여 양쪽 채널에 적절하게 입력 데이터와 필터 데이터를 저장할 수 있다. 데이터를 정렬(align)하여 저장하는 상세한 방법은, 아래에서 도 9를 참조하여 설명된다.
도 8은 일 실시예에 따른 위노그라드 알고리즘에 따른 1D 컨볼루션 연산의 후처리를 수행하기 위한 출력 데이터 변환 회로가 포함된 메모리 장치를 도시한 도면이다.
도 8를 참조하면, 일 실시예에 따른 메모리 장치는 메모리 셀(810)과 기능 모듈을 포함할 수 있다.
일 실시예에 따른 시스템은 위노그라드 알고리즘을 통해 F(2, 3)에 대한 컨볼루션 연산을 수행할 수 있다. 메모리 셀은 2개의 데이터 단위로 출력 데이터를 저장할 수 있다.
기능 모듈은 출력 데이터 변환 회로(820)를 포함할 수 있다. 출력 데이터 변환 회로(820)는 중간 출력 데이터인 m0, m1, m2, m3 를 각각 r0, r1로 변환할 수 있다. 출력 데이터 r0, r1은 메모리 셀(810)에 저장될 수 있다.
출력 데이터 변환 회로(820)는 수학식 8의 출력 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 출력 데이터 변환 회로(820)는 출력 변환 행렬에 대응하는 가산기들의 조합으로 구성될 수 있다.
출력 데이터 변환 회로(820)는 쓰기 명령에 대응하는 클럭 사이클 내에서 중간 출력 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 출력 데이터 변환 회로(820)는 상대적으로 구성이 단순하고 속도가 빠른 가산기들의 조합만으로 구성되었기 때문이다.
여기서, 도 8에 도시된 출력 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 출력 변환 행렬에 대응되는 다양한 회로들이 출력 변환 회로로 동작할 수 있다.
도면에 도시하지 않았으나, 실시예에 따른 메모리 장치는 입력 데이터 변환 회로, 가중치 변환 회로, 곱셈기 및 출력 데이터 변환 회로 중 적어도 하나를 포함할 수 있다. 예를 들어, 메모리 장치는 입력 데이터 변환 회로, 가중치 변환 회로, 곱셈기 및 출력 데이터 변환 회로 중 어느 하나를 포함하거나, 입력 데이터 변환 회로, 가중치 변환 회로, 곱셈기 및 출력 데이터 변환 회로 중 둘 이상을 포함할 수 있다. 실시예에 따라, 메모리 장치는 입력 데이터 변환 회로, 가중치 변환 회로, 곱셈기 및 출력 데이터 변환 회로를 모두 포함할 수도 있다.
만약 고 주파수(high frequency)의 동작이 요구되면, 파이프라이닝(pipelining) 기법을 통하여 메모리 장치의 동작 속도를 향상시킬 수 있다. 예를 들어, 메모리 장치는 메모리 읽기 동작, 입력 데이터 변환 동작, 가중치 변환 동작, 곱셈 동작, 출력 데이터 변환 동작 및 메모리 쓰기 동작을 파이프라이닝 기법으로 처리할 수 있다. 만약 저 주파수(low frequency)의 동작이 가능한 경우, 파이프라이닝 없이 1-클럭 사이클에 메모리 장치의 동작이 처리될 수 있다.
메모리 장치는 메모리 장치 외부의 요청(request)을 차단하도록 읽기/쓰기 신호를 중단시키는 포트(port)를 포함할 수 있다. 예를 들어, 메모리 장치는 해당 포트를 이용하여 비지(busy) 신호를 출력함으로써, 외부의 요청을 차단할 수 있다.
메모리 장치는 메모리 장치 내부에 특정 시간 동안 읽기/쓰기 동작을 하지 않도록 하는 카운터(counter)를 포함할 수 있다. 예를 들어, 카운터에 의하여 설정되는 시간동안 비지 신호가 출력될 수 있다.
메모리 장치는 입력과 가중치가 저장된 영역에서 해당 값을 읽고, 동시에 혹은 시간 차를 두고 입출력 데이터 변환 동작, 곱셈 동작 및/또는 출력 저장 동작을 진행할 수 있다. 예를 들어, 듀얼 포트 SRAM을 이용하여 서로 다른 주소에 읽기 처리 및 쓰기 처리를 수행함으로써 전술한 다양한 동작들이 구현될 수 있다.
도 9는 일 실시예에 따른 데이터를 정렬(align)하여 저장하는 방법을 설명하기 위한 도면이다.
도 9를 참조하면, 일 실시예에 따른 시스템은 DMA 모듈을 더 포함할 수 있다. DMA 모듈은 주변장치들(하드디스크, 그래픽 카드, 네트워크 카드, 사운드 카드 등)이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능으로서, 컴퓨터 내부의 버스가 지원하는 기능일 수 있다.
일 실시예에 따른 DMA 모듈은 위노그라드 알고리즘을 수행하기 위한 입력 데이터와 필터 데이터, 출력 데이터의 정렬을 맞추기 위해 사용될 수 있다. 위노그라드 알고리즘 처리 전에 각 데이터들은 순서에 맞게 배치가 되어있어야 할 수 있다.
다른 실시예에 다르면, 데이터 이동(data moving) 기능을 FPGA에서 동적으로 구현해서 사용할 수도 있고 ASIC으로 만들어서 사용할 수도 있으며, CPU가 이 기능을 대신할 수도 있다.
DMA 모듈 또는 FPGA는 내부의 버퍼(buffer)를 가지고 있어서 여러 개의 데이터를 읽어 들인 후, 원하는 순서로 데이터를 원하는 메모리 위치에 기록할 수 있다.
도 10은 일 실시예에 따른 위노그라드 알고리즘에 따른 2D 컨볼루션 연산의 전처리를 위해 필터 데이터를 변환하는 방법을 설명하기 위한 도면이다.
일 실시예에 따른 메모리 장치는 필터 변환 행렬에 기초하여 실시간으로 필터 데이터 중 적어도 일부의 데이터를 변환하여 출력하거나, 미리 계산된 변환된 필터 데이터를 메모리 셀에 저장할 수 있다.
필터 데이터가 재사용이 된다면 최초 필터 데이터 값을 저장할 때 변환해서 저장하면 두 번째 사용할 때부터 계산할 필요 없이 사용 가능해서 계산에 소모되는 전력을 아낄 수 있고, 읽기 명령에 소모되는 시간도 줄일 수 있다.
일 실시예에 따른 시스템은 위노그라드 알고리즘을 통해 F(2x2, 3x3)에 대한 컨볼루션 연산을 수행할 수 있다. 메모리 장치는 기능 모듈을 통해 w0 내지 w8의 필터 데이터를 변환할 수 있고, 변환된 필터 데이터를 메모리 셀에 저장할 수 있다.
보다 구체적으로, 필터 데이터 및 필터 변환 행렬은 수학식 14, 수학식 15와 같을 수 있다.
변환된 필터 데이터는 수학식 10의 (GwGT) 연산을 수행하여 획득될 수 있고, 이는 수학식 16과 같을 수 있다.
도 10을 참조하면, 메모리 장치는 기능 모듈을 통해 w0 내지 w8의 필터 데이터를 변환할 수 있고, 수학식 16의 변환된 필터 데이터를 메모리 셀에 미리 저장할 수 있다. 또는, 메모리 장치는 필터 변환 행렬에 기초하여 실시간으로 필터 데이터 중 적어도 일부의 데이터를 변환하여 출력할 수도 있다.
도 11은 일 실시예에 따른 위노그라드 알고리즘에 따른 2D 컨볼루션 연산의 전처리를 수행하기 위한 필터 데이터 변환 회로의 예시를 도시한 도면이다.
도 11를 참조하면, 일 실시예에 따른 필터 데이터 변환 회로는 위노그라드 알고리즘을 통해 F(2x2, 3x3)에 대한 컨볼루션 연산의 필터 데이터 변환에 관한 전처리를 수행할 수 있다. 필터 데이터 변환 회로는 도 10을 참조하여 설명한 필터 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 필터 데이터 변환 회로는 필터 변환 행렬에 대응하는 가산기 및 시프터의 조합으로 구성될 수 있다. 시프터(shifter)를 이용하면 상수 나눗셈 연산을 수행할 수 있다.
필터 데이터 변환 회로는 읽기 명령에 대응하는 클럭 사이클 내에서 필터 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 필터 데이터 변환 회로는 상대적으로 구성이 단순하고 속도가 빠른 가산기 및 시프터의 조합만으로 구성되었기 때문이다.
여기서, 도 11에 도시된 필터 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 필터 변환 행렬에 대응되는 다양한 회로들이 필터 변환 회로로 동작할 수 있다.
도 12는 일 실시예에 따른 위노그라드 알고리즘에 따른 2D 컨볼루션 연산의 전처리를 위해 입력 데이터를 변환하는 방법을 설명하기 위한 도면이다.
일 실시예에 따른 시스템은 위노그라드 알고리즘을 통해 F(2x2, 3x3)에 대한 컨볼루션 연산을 수행할 수 있다. 메모리 장치는 기능 모듈을 통해 k0 내지 k15의 입력 데이터를 변환하여 출력할 수 있다.
보다 구체적으로, 입력 데이터 및 입력 변환 행렬은 수학식 17, 수학식 18과 같을 수 있다.
변환된 입력 데이터는 수학식 10의 (CTkC) 연산을 수행하여 획득될 수 있고, 이는 수학식 19와 같을 수 있다.
도 12을 참조하면, 메모리 장치는 기능 모듈을 통해 k0 내지 k15의 입력 데이터를 변환하여 출력할 수 있다.
도 13은 일 실시예에 따른 위노그라드 알고리즘에 따른 2D 컨볼루션 연산의 전처리를 수행하기 위한 입력 데이터 변환 회로의 예시를 도시한 도면이다.
도 13를 참조하면, 일 실시예에 따른 입력 데이터 변환 회로는 위노그라드 알고리즘을 통해 F(2x2, 3x3)에 대한 컨볼루션 연산의 입력 데이터 변환에 관한 전처리를 수행할 수 있다. 입력 데이터 변환 회로는 도 12을 참조하여 설명한 입력 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 입력 데이터 변환 회로는 입력 변환 행렬에 대응하는 가산기들의 조합으로 구성될 수 있다.
입력 데이터 변환 회로는 읽기 명령에 대응하는 클럭 사이클 내에서 입력 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 입력 데이터 변환 회로는 상대적으로 구성이 단순하고 속도가 빠른 가산기들의 조합만으로 구성되었기 때문이다.
여기서, 도 13에 도시된 입력 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 입력 변환 행렬에 대응되는 다양한 회로들이 입력 변환 회로로 동작할 수 있다.
도 14는 일 실시예에 따른 위노그라드 알고리즘에 따른 2D 컨볼루션 연산을 수행하기 위한 시스템을 설명하기 위한 도면이다.
일 실시예에 따른 고속 연산 처리는 도 11을 참조하여 설명된 입력 데이터 변환 회로를 통해 변환된 입력 데이터와 도 13을 참조하여 설명된 필터 데이터 변환 회로를 통해 변환된 필터 데이터에 대해 요소별 곱셈 연산을 수행하여 중간 출력 데이터 m0 내지 m15를 산출할 수 있다.
도 14를 참조하면, 기능 모듈은 출력 데이터 변환 회로를 포함할 수 있다. 출력 데이터 변환 회로는 중간 출력 데이터인 m0 내지 m15 를 r0 내지 r4로 변환할 수 있다. 출력 데이터 r0 내지 r4는 메모리 셀에 저장될 수 있다. 보다 구체적으로, 출력 데이터는 수학식 20과 같을 수 있다.
출력 데이터 변환 회로는 출력 변환 행렬에 대응하여 설계될 수 있다. 예를 들어, 출력 데이터 변환 회로는 출력 변환 행렬에 대응하는 가산기들의 조합으로 구성될 수 있다.출력 데이터 변환 회로는 쓰기 명령에 대응하는 클럭 사이클 내에서 중간 출력 데이터를 변환하여 출력하기에 충분한 속도를 갖을 수 있다. 출력 데이터 변환 회로는 상대적으로 구성이 단순하고 속도가 빠른 가산기들의 조합만으로 구성되었기 때문이다.
여기서, 도 14에 도시된 출력 변환 회로는 예시적인 사항일 뿐, 도시된 회로 이외에 출력 변환 행렬에 대응되는 다양한 회로들이 출력 변환 회로로 동작할 수 있다.
도 15는 일 실시예에 따른 나눗셈 연산에 의한 정보 손실을 줄일 수 있는 방법을 설명하기 위한 도면이다.
일 실시예에 따른 필터 변환 행렬은 정수가 아닌 유리수 형태일 수 있기 때문에 필터 데이터 변환 회로는 시프터를 이용하여 상수 나눗셈 연산을 수행하여야 할 수 있다.
필터 데이터 변환 회로가 시프터를 이용하여 상수 나눗셈 연산을 수행하는 과정에서 정보 손실이 발생할 수 있다. 일 실시예에 따르면, 필터 변환 행렬과 출력 변환 행렬 사이의 관계를 조절하여 나눗셈 연산으로 인해 발생하는 정보 손실을 줄일 수 있다.
나눗셈 연산을 통해 정보가 손실된 데이터를 이용하여 컨볼루션 연산을 수행하는 경우보다, 정보 손실 없이 연산을 수행하고 마지막에 나눗셈 연산을 수행하는 경우가 나눗셈 연산으로 인한 정보 손실을 더 줄일 수 있다. 구체적으로, 필터 변환 행렬의 모든 원소들이 정수가 될 수 있도록 상수 k를 곱해진 필터 변환 행렬을 이용하여 중간 출력 데이터를 산출하고, k로 나눠진 필터 변환 행렬을 이용하여 중간 출력 데이터를 변환할 수 있다.
도 15를 참조하면, 일 실시예에 따른 필터 변환 행렬에 2를 곱하여 모든 원소가 정수인 필터 변환 행렬을 생성하고, 이를 중간 출력 데이터를 산출할 수 있다. 이 후 2로 나눠진 필터 변환 행렬을 이용하여 중간 출력 데이터를 변환할 수 있다. 이를 통해 나눗셈 연산으로 인해 발생하는 정보 손실을 줄일 수 있다.
도 16은 일 실시예에 따른 슈트라센 알고리즘에 따른 메모리 장치의 동작 방법을 설명하기 위한 도면이다.
일 실시예에 따른 슈트라센 알고리즘은 행렬 곱셈 연산의 복잡도를 낮출 수 있는 알고리즘으로, n×n 크기의 두 행렬을 곱하면 기존의 방법에 따르면 O(n3)의 시간이 소요되지만 슈트라센 알고리즘에 따르면 대략 O(n2.807)의 시간이 소요될 수 있다.
도 16을 참조하면, 슈트라센 알고리즘을 적용하면 8번의 곱셈 연산을 7번으로 줄일 수 있다. 중간 출력 데이터 m1 내지 m7을 계산할 때 필요한 중간 연산 결과 중에서 A 데이터(예를 들어, 입력 데이터)에 관련된 연산은 A 데이터가 저장된 메모리 안에서 처리한 후, B 데이터(예를 들어, 필터 데이터)의 중간 연산 결과와 요소별 곱셈 연산을 수행할 수도 있고, A 데이터와 B 데이터를 하나의 메모리에 저장한 후, 도 16에서 나타낸 모든 연산 혹은 위 연산 중에서 일부 연산을 메모리 내부에서 처리할 수 있다. 연산 결과인 C1,1 내지 C2,2(출력 데이터)도 메모리 내부 혹은 외부의 다른 저장 공간을 이용할 수 있다.
도 17은 일 실시예에 따른 MAC 유닛을 포함하는 메모리 장치의 동작 방법을 설명하기 위한 도면이다.
도 17을 참조하면, 일 실시예에 따른 메모리 장치는 MAC(Multiplier Accumulator) 유닛을 포함할 수 있고, MAC 유닛 내부의 곱셈기(Multiplier)와 가산기(adder)를 선택적으로 활용하여 입력 데이터 변환 회로, 필터 데이터 변환 회로 및 출력 데이터 변환 회로 중 적어도 하나를 구현할 수 있다.
또는, MAC 유닛 내부의 곱셈기와 가산기 뿐만 아니라 추가로 곱셈기와 가산기를 부가하여 입력 데이터 변환 회로, 필터 데이터 변환 회로 및 출력 데이터 변환 회로 중 적어도 하나를 구현할 수도 있다.
이렇게 MAC 유닛을 이용하여 변환 회로를 구현하면, 일반적인 행렬의 곱셈 연산, 행렬과 벡터의 곱셈 연산, 벡터의 곱셈 연산 기능과 더불어 위노그라드 알고리즘까지 처리할 수 있는 메모리 장치를 구현할 수 있다.
도시하지는 않았지만, 기능 모듈은 변환된 입력 데이터의 크기가 임계값 이하인 경우, 미리 정해진 값을 출력하는 가지치기(pruning) 회로를 포함할 수 있다.
예를 들어, 기능 모듈은 가지치기 회로를 통해 알고리즘의 입력 값을 메모리 셀에서 읽어올 때, 변환 값이 기준 값 이하일 경우, ‘0’ 값을 메모리의 출력 포트로 내보낼 수 있다. 메모리 장치는 가지치기 회로를 기능 모듈에 내장하여 처리 속도를 높일 수 있다. 메모리 장치는 메모리 내부에 가지치기의 기준이 되는 값을 저장하는 레지스터(register)를 포함할 수 있다.
기능 모듈은 변환된 필터 데이터의 활성화 여부를 결정하는 비선형함수(nonlinear function) 회로를 더 포함할 수 있다. 메모리 장치는 비선형함수 회로를 기능 모듈에 내장하여 추가적인 메모리 액세스(memory access) 없이 처리 속도를 높일 수 있다. 예를 들어, 비선형함수는 딥러닝(Deep Learning)에 사용되는 ReLU 함수, 변형된 ReLU 함수, sigmoid 함수, tanh 함수 등들 포함할 수 있다.
나아가, 기능 모듈에 룩업 테이블(look-up table)을 탑재하여 비선형함수를 저전력으로 처리할 수도 있다. 룩업 테이블에 없는 값은 룩업 테이블에서 그 값과 가장 가까운 값 2개를 읽어 들여서 보간(interpolation)하여 처리할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.