KR102397100B1 - 텐서 데이터를 액세스하는 방법 및 장치 - Google Patents
텐서 데이터를 액세스하는 방법 및 장치 Download PDFInfo
- Publication number
- KR102397100B1 KR102397100B1 KR1020190168867A KR20190168867A KR102397100B1 KR 102397100 B1 KR102397100 B1 KR 102397100B1 KR 1020190168867 A KR1020190168867 A KR 1020190168867A KR 20190168867 A KR20190168867 A KR 20190168867A KR 102397100 B1 KR102397100 B1 KR 102397100B1
- Authority
- KR
- South Korea
- Prior art keywords
- buffer
- row
- memory
- data
- data items
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7839—Architectures of general purpose stored program computers comprising a single central processing unit with memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/454—Vector or matrix data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Molecular Biology (AREA)
- Computer Hardware Design (AREA)
- Neurology (AREA)
- Human Computer Interaction (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Complex Calculations (AREA)
Abstract
텐서 데이터에 액세스하기 위한 방법 및 장치가 개시된다. 이 방법은 텐서 데이터의 논리 구조에서 액세스될 하나 이상의 제1 데이터 항목들이 제1 행 어드레스에 저장되는 제1 메모리에서 제1 행 어드레스를 결정하는 단계, 제1 메모리에서의 제1 행 어드레스에서의 데이터 항목들을 제1 버퍼의 제1 버퍼 행에 복사하는 단계, 제1 버퍼의 제1 버퍼 행에서의 각각의 제1 데이터 항목을 적어도 제2 버퍼의 제1 버퍼 행에서 대응하는 위치로 이동시키는 단계, 및 제2 버퍼의 제1 버퍼 행에서의 데이터 항목들을 제2 메모리에서의 대응하는 타겟 위치들로 저장하는 단계를 포함할 수 있다.
Description
상호 참조
본 개시물은 본 명세서에 그 전문이 분명히 참조로 통합되어 있고, 2018년 12월 17일에 출원된 중국 특허 출원 201811541065.1호의 이익과 우선권을 주장한다.
본 개시물은 텐서 데이터(tensor data)에 액세스하기 위한 방법 및 장치에 관한 것이다.
인공 지능(AI: artificial intelligence) 애플리케이션들에서 대규모 계산 작업을 위해 다양한 인공 지능 칩이 개발되었다. 더 많은 기술 분야들에서 AI 기술들을 적용함에 따라, 더 높은 성능을 갖는 AI 칩들이 예상된다.
데이터 접근 시간들과 대역폭과 같은 성능 표시기(indicator)들을 포함하는 데이터 액세스의 성능은 AI 칩들의 성능의 중대한 애로점들 중 하나이다. AI 칩에서의 개선된 데이터 흐름은 AI 칩에서의 데이터 액세스의 효율을 개선시킬 수 있다.
일 양태에서, 텐서 데이터에 액세스하기 위한 방법이 개시된다. 이러한 방법은 제1 메모리에서의 제1 행(row) 어드레스를 결정하는 단계를 포함할 수 있고, 이 경우 그러한 텐서 데이터의 논리 구조에서 액세스될 하나 이상의 제1 데이터 항목들이 제1 메모리에서 제1 행 어드레스에 저장된다. 이러한 방법은 또한 제1 메모리에서의 제1 행 어드레스에서의 데이터 항목들을 제1 버퍼의 제1 버퍼 행으로 복사하는 단계를 포함할 수 있다. 이러한 방법은 또한 제1 버퍼의 제1 버퍼 행에서의 각 제1 데이터 항목을 적어도 제2 버퍼의 제1 버퍼 행에서의 대응하는 위치로 이동시키는 것을 포함할 수 있고, 이 경우 각 제1 데이터 항목에 대한 제2 버퍼의 적어도 제1 버퍼 행에서의 대응하는 위치는 제1 데이터 항목에 할당된 제2 메모리에서의 타겟(target) 위치에 의존한다. 이러한 방법은 또한 제2 메모리에서의 대응하는 목표 위치들로 제2 버퍼의 제1 버퍼 행에서의 데이터 항목들을 저장하는 단계를 포함할 수 있다.
또 다른 점에서는, 텐서 데이터에 액세스하기 위한 장치가 개시된다. 이러한 장치는 제1 버퍼, 제2 버퍼, 및 제어기를 포함할 수 있다. 이러한 제어기는 제1 메모리, 제2 메모리, 제1 버퍼, 및 제2 버퍼에 결합될 수 있다. 이러한 제어기는 그러한 제어기가 활성화될 때 명령어들에 따라 적어도 위 방법을 수행하도록 구성될 수 있다.
또 다른 점에서는, 프로그램 명령어들을 저장한 비일시적 컴퓨터 판독 가능한 매체가 개시된다. 저장된 프로그램 명령어들은, 프로세서나 제어기에 의해 실행될 때, 프로세서나 제어기로 하여금 적어도 위 방법을 수행하게 할 수 있다.
본 개시물의 위 그리고 다른 목적득, 특징들 및 장점들은 도면들을 참조하여 더 상세하게 본 개시물의 실시예들을 설명함으로써 더 분명해질 것이다. 그러한 도면들은 본 개시물의 실시예들의 추가 이해를 제공하고 본 명세서의 일부를 구성한다. 이러한 도면들은 본 개시물의 실시예들과 함께, 본 개시물을 설명하기 위해 사용되지만 본 개시물의 제한들을 구성하지는 않는다. 도면들에서 일반적으로 동일한 부분 또는 단계에 대해 동일한 참조 번호가 이용된다.
도 1은 일 실시예에서의 시스템 예를 도시하는 도면.
도 2는 일 실시예에서의 온-칩(on-chip) 메모리의 일 예를 도시하는 도면.
도 3은 일 실시예에서의 방법 예를 도시하는 도면.
도 4는 일 실시예에서의 방법 예를 도시하는 도면.
도 5는 일 실시예에서의 방법 예를 도시하는 도면.
도 6은 일 실시예에서의 방법 예를 도시하는 도면.
도 7은 일 실시예에서의 방법 예를 도시하는 도면.
도 8은 일 실시예에서의 방법 예를 도시하는 도면.
도 9는 일 실시예에서의 방법 예를 도시하는 도면.
도 10은 일 실시예에서의 방법 예를 도시하는 도면.
도 11은 일 실시예에서의 방법 예를 도시하는 도면.
도 12는 일 실시예에서의 방법 예를 도시하는 도면.
도 13은 일 실시예에서의 방법 예를 도시하는 도면.
도 14는 일 실시예에서의 방법 예를 도시하는 도면.
도 15는 일 실시예에서의 방법 예를 도시하는 도면.
도 16은 일 실시예에서의 방법 예를 도시하는 도면.
도 17은 일 실시예에서의 장치 예를 도시하는 도면.
도 1은 일 실시예에서의 시스템 예를 도시하는 도면.
도 2는 일 실시예에서의 온-칩(on-chip) 메모리의 일 예를 도시하는 도면.
도 3은 일 실시예에서의 방법 예를 도시하는 도면.
도 4는 일 실시예에서의 방법 예를 도시하는 도면.
도 5는 일 실시예에서의 방법 예를 도시하는 도면.
도 6은 일 실시예에서의 방법 예를 도시하는 도면.
도 7은 일 실시예에서의 방법 예를 도시하는 도면.
도 8은 일 실시예에서의 방법 예를 도시하는 도면.
도 9는 일 실시예에서의 방법 예를 도시하는 도면.
도 10은 일 실시예에서의 방법 예를 도시하는 도면.
도 11은 일 실시예에서의 방법 예를 도시하는 도면.
도 12는 일 실시예에서의 방법 예를 도시하는 도면.
도 13은 일 실시예에서의 방법 예를 도시하는 도면.
도 14는 일 실시예에서의 방법 예를 도시하는 도면.
도 15는 일 실시예에서의 방법 예를 도시하는 도면.
도 16은 일 실시예에서의 방법 예를 도시하는 도면.
도 17은 일 실시예에서의 장치 예를 도시하는 도면.
실시예들의 예시적인 방법 및 장치에서, 예를 들어, 데이터는 제1 버퍼를 통한 데이터 정렬을 통해 제1 메모리로부터 효율적으로 판독될 수 있고, 제2 버퍼를 통해, 액세스될 데이터 항목들은 원하는 포맷에 따라 효율적으로 조정될 수 있으며, 데이터는 데이터 정렬을 통해 효율적으로 제1 메모리에 기입될 수 있다. 따라서, AI 칩 내의 데이터 액세스 효율이 개선되어 AI 칩의 성능이 개선되고 AI 칩의 전력 소비가 감소될 수 있다.
또한, 실시예들에서의 예시적인 방법 및/또는 장치는 파이프라인 프로세싱을 용이하게 할 수 있다. 따라서, AI 칩 내의 데이터 액세스 효율이 더 개선될 수 있고, 따라서 AI 칩의 성능이 더욱 개선될 수 있고 AI 칩의 전력 소비가 더 감소될 수 있다.
이하, 도면을 참조하여 본 발명에 따른 실시예를 상세히 설명하기로 한다. 설명된 실시예는 모두가 아니라 본 개시의 일부 실시예인 것이 명백하며, 본 개시는 여기에 설명된 예시적인 실시예에 제한되지 않는 것으로 이해된다.
비용 및 칩 치수들과 같은 다양한 양태들로 인해, AI 칩의 온-칩 메모리는 일반적으로 제한된 용량(예를 들어 수백 킬로바이트 내지 수 메가바이트)을 가지며, 따라서 처리될 완전한 텐서 데이터를 저장 또는 버퍼링할 수 없다. 또한, 콘볼루션 가속 코어(convolution acceleration core)와 같은 구성요소는 일반적으로 제한된 개수의 승산기-누산기(multiplier-accumulator)들을 포함한다. 따라서 AI 칩은 일반적으로 제한된 하드웨어 자원들로 매번 전체 텐서 데이터의 데이터 항목들 중 일부를 처리할 수 있다.
하드웨어 자원들로부터의 제한들, 감소된 동작들(예를 들어, 데이터 후-처리에서)에 대한 기대, 인공 신경망의 복수의 계층에 대한 퓨전 계산의 기대 등과 같은 다양한 양태들로 인해, 예를 들어, 전체 텐서 데이터는 각각 저장되도록(예를 들어, 복수의 부분 텐서 데이터를 연속적으로 저장하기 위해), 또는 완전한 텐서의 데이터 항목의 일부를 매번 처리하기 위해 AI 칩에 제공하도록 복수의 부분들로 분할될 수 있다.
한편, 텐서에 대한 분할 또는 다른 프로세스들로 인해, 하나 이상의 텐서 데이터 항목에 대한 스플라이싱 또는 다른 조합이 필요할 수 있다. 예를 들어, 콘볼루션 가속 코어에 의한 각각의 로컬 텐서 출력은 최종적으로 완전한 텐서 데이터를 얻기 위해 스플라이싱 또는 조합될 수 있다.
따라서, 가능한 해결책은 AI 칩 내의 프로세서 또는 제어기의 소프트웨어 용량을 이용하여 프로세서 또는 제어기가 소정의 명령어 시퀀스들에 따라 텐서 데이터를 분할/조합/조정하는 동작을 제어할 수 있는 것이다. 예를 들어, 이러한 동작들은 오프-칩 메모리로부터 온-칩 메모리로 완전한 텐서 데이터의 데이터 항목들(일반적으로 하드웨어 자원들의 제한들로 인한 데이터 항목들 중 일부)을 판독한 다음, 온-칩 메모리로 판독된 데이터 항목들을 분할/조합하는 것을 포함할 수 있다.
하지만, 예를 들어 이러한 동작들은 AI 칩에서 프로세서 또는 제어기의 동작 부하를 증가시킬 수 있고, AI 칩에서 프로세서 또는 제어기의 다른 제어 동작들을 위해 추가 지연이 야기될 수 있다. 또한, 이러한 동작들에서 하드웨어 자원을 효율적으로 활용할 수 없다. 예를 들어, 이러한 동작들은 파이프라인 방식에는 적합하지 않다.
또한, 온-칩 메모리의 제한된 용량으로 인해, 프로세서 또는 제어기가 위 동작들을 수행하는 동안 오프-칩 메모리와 온-칩 메모리 사이에 추가적인 데이터 교환/전송이 수반될 수 있다. 예를 들어, 프로세서 또는 제어기는 위 동작들에 대해 충분한 남아 있는 온-칩 메모리 용량을 확보하도록 일부 중간 프로세싱 결과들을 오프-칩 메모리에 일시적으로 출력하도록 제어하게 구성될 수 있으며, 이는 AI 칩 내의 다른 동작들 또는 프로세스들에 대한 추가적인 지연을 야기할 수 있고 AI 칩에 대한 성능 저하 및 전력 소비 증가를 가져올 수 있다.
본 발명의 실시예들에서의 예시적인 방법 및 장치는 AI 칩에서의 프로세서 또는 제어기의 작업 부하를 감소시키고, 오프-칩 메모리와 온 칩 메모리 간의 데이터 교환/전송을 감소시키며, 예를 들면 효율적인 파이프라인 방식을 활용하기 위해 제한된 하드웨어 자원들을 효율적으로 활용하기 위해 온-칩 메모리에 직접 로딩된 텐서 데이터로부터 그리고 예상되는 데이터 항목 배열에 따라 액세스될 데이터 부분을 획득하는 것을 허용함으로써 AI 칩의 성능이 개선될 수 있고 AI 칩의 전력 소비가 감소될 수 있다.
비록 본 개시물의 실시예들에서의 예시적인 방법 및 장치가 AI 칩의 맥락에서 설명되지만, 본 개시물의 실시예들에서의 예시적인 방법 및 장치는 용량이 큰 저속 저장 시스템(예를 들면, AI 칩의 오프-칩 메모리)과 용량이 작은 고속 저장 시스템(예를 들면, AI 칩의 온-칩 메모리) 사이에 데이터 교환들이 예상되고, 낮은 용량을 갖는 고속 저장 시스템에서의 데이터 항목들이 원하는 배열을 가질 것으로 예상되는 임의의 상황 또는 시스템에도 적용 가능하다.
본 개시물의 실시예들에서의 방법 및 장치 예의 설명들을 용이하게 하기 위해, 그러한 실시예들에서의 방법 및 장치 예가 적용될 수 있는 시스템의 일 예가 도 1에 도시된다.
도 1에 도시된 바와 같이, 이러한 시스템 예는 방법 예에서의 몇몇 구성요소들 또는 모듈들 또는 회로들 또는 유닛들 또는 구성요소들 그리고 제어기(CON), 제1 버퍼(BIF1), 및 제2 버퍼(BUF2)와 같은 실시예들에서의 장치를 포함할 수 있다.
도 1에 도시된 바와 같은 시스템 예에서의 제1 메모리(SRAM1)와 제2 메모리(SRAM2)는 고속 저장 시스템 또는 실시예들에서의 시스템 예에서의 고속 저장 시스템의 일부를 형성할 수 있다.
다양한 실시예들에서, 고속 저장 시스템에서의 제1 메모리(SRAM1)와 제2 메모리(SRAM2) 모두는 정적인 랜덤 액세스 저장 구성요소들/모듈들 또는 2차원 데이터로의 액세스 및/또는 데이터로의 2차원 액세스를 지원하는 고속 버퍼 구성요소들/모듈들일 수 있다.
일 실시예에서, 제1 메모리(SRAM1) 및 제2 메모리(SRAM2) 각각은 복수의 1 차원 정적 랜덤 액세스 메모리들(예를 들면, 복수의 선형 정적 랜덤 액세스 메모리들)을 포함할 수 있다. 각각의 1차원 정적 랜덤 액세스 메모리에서 동일한 어드레스에서의 저장 유닛들은 제1 메모리(SRAM1) 또는 제2 메모리(SRAM2)의 저장 행에 대응할 수 있다.
예를 들면, 제1 메모리(SRAM1)는 4개의 1차원 정적 메모리를 포함할 수 있고, 각각의 1차원 정적 메모리의 각 저장 유닛은 32비트일 수 있다. 따라서, 이 예에서, 제1 메모리(SRAM1)에서의 저장 행은 128 비트의 데이터를 저장하는데 사용될 수 있거나, 제1 메모리(SRAM1)의 저장 폭은 128 비트이다.
또 다른 실시예에서, 제1 메모리(SRAM1) 및 제2 메모리(RAM2) 각각은 또한 2차원 데이터에 대한 액세스 및/또는 데이터에 대한 2차원 액세스를 직접 지원하도록 2차원 메모리일 수 있다.
비록 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)가 별개로 구성된 2개의 저장 구성요소/모듈로서 도 1에 도시되어 있지만. 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)는 또한 2차원 데이터에 대한 액세스를 지원하는 동일한 저장 구성요소/모듈의 2개의 상이한 부분일 수 있고, 이는 2차원 데이터에 대한 액세스 및/또는 데이터에 대한 2차원 액세스를 지원하도록 복수의 1차원 정적 랜덤 액세스 메모리들이나 하나 이상의 2차원 메모리들을 포함할 수 있다.
예를 들어, AI 칩의 경우, 도 1의 예에서의 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)는 2개의 온-칩 정적 랜덤 액세스 메모리 또는 온-칩 캐시(cache)들일 수 있고, 또한 2차원 데이터에 대한 및/또는 데이터에 대한 2차원 액세스를 지원하는 하나 이상의 저장 구성요소들을 포함하는 저장 시스템일 수 있는 동일한 온-칩 메모리 상의 2개의 부분일 수 있다.
예를 들어, 도 2에 도시된 바와 같이, 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)는 각각 상단 좌측 코너에서의 부분(즉, R0로부터 Rm까지의 행 어드레스 및 C0로부터 Cp까지의 열 어드레스에 대응하는 저장 영역/저장부) 및 온-칩 메모리 시스템(MEM)에 따라 결정된 하부 우측 코너에서의 부분(즉, Rn으로부터 끝 행 어드레스까지의 행 어드레스 및 Cq로부터 끝 열 어드레스까지의 열 어드레스에 대응하는 저장 영역/저장부)에 대응할 수 있다.
또한 다양한 실시예들에서, 고속 저장 시스템에서 2개의 고정된 저장 구성요소 또는 저장 영역이 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)로서 사용될 수 있거나, 예를 들면, 제어기(CON)가 2개의 저장 구성요소 또는 저장 영역들을 시스템의 동작들 전 또는 동작들 동안 미리 정해진 프로그램 명령어들에 따라 동적으로 제1 메모리(SRAM1) 및 제2 메모리(SRAM)(2)로서 결정할 수 있다.
일 실시예에서, 제어기(CON), 제1 메모리(SRAM1), 제2 메모리(SRAM2), 제1 버퍼(BUF1) 및 제2 버퍼(BUF2)를 포함하는 도 1에서의 굵은 프레임 내의 부분은 하나의 칩에서 구현될 수 있고, 텐서 데이터에 액세스하기 위한 온-칩 시스템을 형성할 수 있다. 예를 들면 AI 칩의 경우, 도 1의 굵은 프레임 내의 부분은 AI 칩 상에 구현될 수 있고 텐서 데이터에 효율적으로 액세스하는데 사용될 수 있다. 따라서, 메모리 DDR은 동적 랜덤 액세스 메모리일 수 있으며, 오프-칩 메모리로 지칭될 수 있다.
제어기(CON)는 소정의 명령어 시퀀스들(예를 들어, 실행 가능한 프로그램 명령어 시퀀스)에 따라 또는 외부로부터의 명령어에 반응하여 동작 및 제어를 수행할 수 있다.
간략화를 위해, 도 1은 명령어 타이밍들을 제어하기 위한 타이밍 제어기, 명령어 중단들을 제어하기 위한 중단 제어기, 콘볼루션 신경망에서의 콘볼루션 계산 및 풀링 계산과 같은 미리 결정된 계산을 효율적으로 수행하는데 전용인 계산 가속 코어, 구성요소들 사이의 상호 연결을 구현하기 위한 크로스바 및/또는 멀티플렉서, 코프로세서(coprocessor), 오프-칩 메모리의 데이터에 대한 액세스를 제어하는 데 전용인 오프-칩 데이터 전송 관리자와 같은 다른 구성요소/모듈/회로/유닛/소자가 생략된, 저장과 연관련된 일부 양태들을 도시한다.
다양한 실시예들에서, 도 1의 제어기(CON)는 메모리 액세스 제어기와 같은 데이터 액세스를 제어하기 위해 전용인 상술된 제어기에 대응할 수 있거나, 또한 위에서 생략된 하나 이상의 구성요소/모듈/회로/유닛/소자의 기능들을 포함하거나 구현할 수 있다.
예를 들면 AI 칩의 경우, 제어기(CON)는 GPU(Graphics Processing Unit), ARM 프로세서, FPGA(Field Programmable Gate Array) 등과 사전에 설계된 인공 신경망에 대해 미리 컴파일된 실행 가능한 명령어 시퀀스들에 기초하여 개발된 프로세서 또는 제어기일 수 있고, 그러한 제어기(CON)는 예를 들면 인공 신경망의 계산들 외의 동작들을 수행하고/수행하거나 제어 명령어 및 연관된 파라미터를 데이터 액세스 제어기와 콘볼루션 가속 코어와 같은 AI 칩에서의 다른 구성요소들 또는 회로들에 제공할 수 있어서, 칩 내의 다른 구성요소들 또는 회로들은 수신된 명령어에 반응하여 오프-칩 메모리 및/또는 또는 칩내 메모리에서 데이터에 액세스하는 것과 같은 대응하는 동작들을 수행할 수 있고 승산기-누산기가 콘볼루션 계산들을 수행할 수 있게 한다.
또 다른 예에서, AI 칩의 경우에, 제어기(CON)는 또한 FPGA에 기초하여 개발된 RISC(reduced instruction set calculations) 소프트 프로세서 코어와 같이, 오프-칩 메모리 및/또는 온-칩 메모리에 대한 액세스를 제어하기 위한 전용 칩 상의 액세스 제어기 또는 데이터 전송 제어기일 수 있고, 오프-칩 메모리 및/또는 온-칩 메모리에서의 데이터에 대한 액세스를 독립적으로 제어할 수도 있거나, 예를 들면 메인 프로세서와 협력하거나 메인 프로세서로부터의 명령어들에 반응하여 오프-칩 메모리 및/또는 온-칩 메모리에서의 데이터에 대한 액세스를 제어할 수도 있다.
제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 모두는 데이터 액세스 속도(rate)들이 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)를 포함하는 고속 저장 시스템의 데이터 액세스 속도와 일치할 수 있는 캐시들 또는 정적 랜덤 액세스 메모리들일 수 있다.
여기서, 용어 "매치(match)"는 제1 버퍼(BUF1), 제2 버퍼(BUF2), 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)가 동일하거나 유사한 데이터 액세스 속도를 가질 수 있음을 의미할 수 있다. 예를 들면, 제1 버퍼(BUF1), 제2 버퍼(BUF2), 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)의 데이터 액세스 속도들 사이의 차이들은 소정의 문턱값 미만일 수 있으며, 예를 들어 허용 오차 범위 내에 있을 수 있고 따라서 실제 응용예에서는 무시될 수 있다.
일 실시예에서, 제1 버퍼(BUF1)는 하나 이상의 버퍼 행들을 포함할 수 있고, 제2 버퍼(BUF2)는 2개 이상의 버퍼 행들을 포함할 수 있다.
또 다른 실시예에서, 제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 각각은 데이터에 액세스하는 동안에 프로세서 효율을 보장하도록 적어도 2개의 버퍼 행들을 포함할 수 있다.
또 다른 실시예에서, 제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 각각은 낮은 비용의 하드웨어 구조를 통해 데이터에 액세스하는 동안 프로세스 효율을 보장하도록 2개의 버퍼 행들을 포함할 수 있다.
또 다른 실시예에서, 제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 각각은 경계가 없는 저장 공간을 제공하고 저장 제어들을 단순화하도록 버퍼 행들에 의해 순환적으로 어드레스되는 버퍼일 수 있다.
또 다른 실시예에서, 제1 버퍼(BUF1)의 각 버퍼 행의 용량은 제1 메모리(SRAM1)에서 동일한 행 어드레스를 갖는 복수의 저장 유닛의 총 용량(즉, 제1 메모리(SRAM1)의 저장 폭)과 동일할 수 있고, 지정(designation)을 단순화하고 제어 로직의 복잡성을 줄이도록 제2 버퍼(BUF2)의 각 버퍼 행의 용량은 제2 메모리(SRAM2)에서의 동일한 행 어드레스를 갖는 복수의 저장 유닛의 총 용량(즉, 제2 메모리(SRAM2)의 저장 폭)과 동일할 수 있다.
또, 제1 버퍼(BUF1)의 각 버퍼 행의 용량은 제2 버퍼(BUF2)의 각 버퍼 행의 용량 또는 제1 버퍼(BUF1)의 각 버퍼 행의 용량, 제2 버퍼(BUF2)의 각 버퍼 행의 용량과 동일할 수 있고, 제1 메모리(SRAM1)의 저장 폭과 제2 메모리(SRAM2)의 저장 폭은 동일할 수 있어서, 제1 메모리(SRAM1) 및 제2 메모리(SRAM2)가 동적으로 결정될 수 있는 경우에 적응될 수 있다.
간략화를 위해, 본 개시의 실시예 또는 예는 예시적인 구성으로 설명될 것이며, 여기서 제어기(CON)는 미리 결정된 명령어 시퀀스들을 수행하고 메모리 DDR로부터의 데이터의 적어도 일부 또는 시스템의 다른 계산 구성요소들(예를 들면, 콘볼루션 가속 코어)로부터의 데이터의 적어도 일부를 제1 메모리(SRAM1)에 저장하고 메모리 DDR에 출력하도록 제어한 다음 순서대로, 즉 제1 메모리(SRAM1)-> 첫 번째 버퍼(BUF1)-> 제2 버퍼(BUF2)-> 제2 메모리(SRAM2)로 데이터 흐름을 제어하여, 제1 메모리(SRAM1)의 데이터 항목들의 일부가 원하는 방식으로 제2 메모리(SRAM2)에 저장되고, 제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 각각이 버퍼 행들에 의해 순환적으로 어드레스되는 2개의 버퍼 행들을 포함할 수 있다.
전술한 바와 같이, 제1 메모리(SRAM1)와 제2 메모리(SRAM2)는 또한 동적으로 결정될 수 있다. 예를 들면, 제어기(CON)는 미리 결정된 프로그램 명령어에 따라 시스템의 동작 전 또는 동작 중에 데이터 흐름을 동적으로 결정할 수 있어서, 실제 동작의 프로세스 동안 데이터의 흐름 방향은 실제로 제1 메모리(SRAM1)-> 제1 버퍼(BUF1)-> 제2 버퍼(BUF2)-> 제2 메모리(SRAM2) 및/또는 제2 메모리(SRAM2)-> 제1 버퍼(BUF1)-> 제2 버퍼(BUF2)-> 제1 메모리(SRAM1)를 포함할 수 있다.
도 3은 일 실시예에서 텐서 데이터에 액세스하기 위한 방법 예를 보여준다. 예를 들면, 그러한 방법 예는 도 1의 시스템 예에서 제어기(CON)에 의해 수행될 수 있다.
도 3에 도시된 바와 같이, 실시예에서의 그러한 방법 예는 단계들(S10, S20, S30, S40)을 포함할 수 있다.
단계(S10)에서, 제1 메모리(SRAM1)의 제1 행 어드레스가 결정되고, 이 경우 텐서 데이터의 로직 구조에서 액세스될 적어도 하나의 제1 데이터 항목은 제1 메모리(SRAM1)의 제1 행 어드레스에 저장된다.
단계(S20)에서, 제1 메모리(SRAM1)에서의 제1 행 어드레스에서의 데이터 항목들은 제1 버퍼(BUF1)의 제1 버퍼 행으로 복사될 수 있다. 다양한 예들에서, 제1 버퍼(BUF1)의 제1 버퍼 행으로 복사된 데이터 항목들은 단계(S10)에서 적어도 하나의 제1 데이터 항목을 포함할 수 있고, 또한 액세스될 것으로 예상되지 않는 다른 데이터 항목들을 포함할 수 있다.
단계(S30)에서는, 제1 버퍼(BUF1)의 제1 버퍼 행에서 각각의 제1 데이터 항목은 적어도 제2 버퍼(BUF2)의 제1 버퍼 행에서 대응하는 위치로 이동될 수 있다. 각각의 제1 데이터 항목에 대해, 적어도 제2 버퍼(BUF2)의 제1 버퍼 행에서의 대응하는 위치는 제1 데이터 항목에 할당된 제2 메모리(SRAM2)에서의 타겟 위치에 의존할 수 있다.
제1 데이터 항목들의 제2 버퍼(BUF2)에서의 대응하는 위치에 따라, 제1 버퍼(BUF1)로부터 제2 버퍼(BUF2)로 이동된 제1 데이터 항목들은 제2 버퍼(BUF2)의 제1 버퍼 행을 점유할 수 있고 또한 제2 버퍼(BUF2)의 제1 버퍼 행 및 다른 하나 이상의 버퍼 행들 모두를 점유할 수 있다.
제1 버퍼(BUF1)로부터 제2 버퍼(BUF2)로 이동된 제1 데이터 항목들이 제1 메모리(SRAM1)에서 제1 버퍼 행과 제2 버퍼(BUF2)의 다른 하나 이상의 버퍼 행들 모두를 점유할 때, 제2 버퍼(BUF2)의 제1 버퍼 행에서의 각각의 제1 데이터 항목은 제2 버퍼의 각각 다른 버퍼 행에서의 각각의 제1 데이터 항목 앞에 위치된다.
단계(S40)에서, 제2 버퍼(BUF2)의 제1 버퍼 행에서의 데이터 항목들은 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들에 저장된다.
다양한 상황들에서, 이 단계에서 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장될 데이터 항목들은 제2 버퍼(BUF2)의 제1 버퍼 행에서의 적어도 제1 데이터 항목들을 포함하고, 또한 이전 프로세스 후 제2 버퍼(BUF2)의 제1 버퍼 행에 남아 있고 액세스될 것으로 예상되지만 여전히 제2 메모리(SRAM2)에서의 타겟 위치들로 출력되지 않은 데이터 항목들을 포함할 수 있다(이후 설명된 바와 같이, 위 단계들(S10 내지 S40)은 반복될 수 있다).
위 제1 행 어드레스가 도 4에 도시된 바와 같이 처리될 제1 메모리(SRAM1)에서의 마지막 하나의 행 어드레스일 때에는, 일 실시예에서의 방법 예는 단계(S50)를 더 포함할 수 있다.
단계(S50)에서, 제2 버퍼(BUF2)의 제2 버퍼 행이 적어도 하나의 제1 데이터 항목을 포함할 때, 제2 버퍼(BUF2)의 제2 버퍼 행의 각 제1 데이터 항목은 제2 메모리(SRAM2)의 대응하는 타겟 위치에 저장될 수 있다. 제1 메모리(SRAM1)에서, 제2 버퍼(BUF2)의 제2 버퍼 행의 각각의 제1 데이터 항목은 제2 버퍼(BUF2)의 제1 버퍼 행의 각 제1 데이터 항목 이후에 위치된다.
예를 들면 도 5에 도시된 바와 같이, 위 제1 행 어드레스 이후에 계속 처리될 제2 행 어드레스가 있을 때와 같이, 제1 메모리(SRAM1)가 처리될 추가 행 어드레스를 포함할 때, 일 실시예의 예시적인 방법은 단계들(S10', S20', S30' 및 S40')을 더 포함할 수 있다.
단계(S10')에서, 제1 메모리(SRAM1)의 제2 행 어드레스가 결정될 수 있고, 이 경우 텐서 데이터의 논리 구조에서 액세스될 적어도 하나의 제2 데이터 항목은 제1 메모리(SRAM1)에서의 제2 행 어드레스에 저장된다.
단계(S20')에서, 제1 메모리(SRAM1)에서의 제2 행 어드레스에서의 데이터 항목들은 제1 버퍼(BUF1)의 제2 버퍼 행으로 복사될 수 있다.
전술한 바와 같이, 제1 버퍼(BUF1)는 또한 하나의 버퍼 행을 포함할 수 있고, 단계(S20')에서, 제1 메모리(SRAM1)의 제2 행 어드레스에서의 데이터 항목들은 제1 버퍼(BUF1)의 하나의 버퍼 행으로 복사될 수 있다. 단계들(S40, S10')이 도 5에 도시된 바와 같은 순서대로 수행될 때에는. 하나의 버퍼 행을 포함하는 제1 버퍼(BUF1)가 사용될 수도 있다.
하지만 파이프라인 방식(이후에 상세히 설명될)을 채택할 때, 제1 메모리(SRAM1)에서 제2 행 어드레스에서의 데이터 항목들을 제1 버퍼(BUF1)에서의 하나의 버퍼 행으로 복사하기 전에, 이전에 단계(S20)에서 제1 버퍼(BUF1)로 복사된 데이터 항목들은 단계(S30)에서 제2 버퍼(BUF2)로 이동될 필요가 있다.
그러므로 하나의 버퍼 행을 포함하는 제1 버퍼(BUF1)를 활용하는 경우에, 파이프라인 방식을 채택할 때, 단계들(S20', S40)이 나란히 수행되도록 제어될 수 있다.
만약 제1 버퍼(BUF1)가 서로 교환 가능하게 사용될 수 있거나 버퍼 행들에 의해 순환적으로 어드레스지정 가능할 수 있는 2개의 버퍼 행들을 포함한다면, 파이프라인 방식을 채택할 때 단계(S20')(아마도 단계(S10')를 포함하는)가 단계들(S10, S20, S30 및 S40) 중 임의의 것과 나란히 수행될 수 있다. 그러한 제어는 훨씬 더 유연성이 있을 수 있고 더 효율적인 파이프라인 제어가 구현될 수 있다. 또한, 하나의 버퍼 행만이 추가되고 이는 하드웨어 비용들 측면에서 받아들일 수 있다. 또, 비용면에서 허용 가능한 경우 제1 버퍼(BUF1)가 더 많은 버퍼 행들을 포함할 수 있고, 경계가 없는 저장 공간을 얻도록 버퍼 행들에 의해 순환적으로 어드레스될 수 있다.
단계(S30')에서, 제1 버퍼(BUF1)의 제2 버퍼 행에서의 각각의 데이터 항목은 적어도 제2 버퍼(BUF2)의 제2 버퍼 행에서의 대응하는 위치로 이동될 수 있다. 적어도 각각의 제2 데이터 항목에 대한 제2 버퍼(BUF2)의 제2 버퍼 행에서의 대응하는 위치는 이러한 제2 데이터 항목에 할당된 제2 메모리(SRAM2)에서의 타겟 위치에 의존할 수 있다.
단계(S30')에서 위 단계들(S30, S40)로 인해, 제2 메모리(SRAM2)에서의 타겟 위치들에 아직 출력되지 않은 하나 이상의 제1 데이터 항목들이 제2 버퍼(BUF2)의 제2 버퍼 행에 포함될 수 있다. 그러므로 단계(S30')에서 각각의 제2 데이터 항목은 적어도 제2 버퍼(BUF2)의 제2 버퍼 행으로 이동된다. 그러므로 액세스될 모든 데이터는 간단한 방식으로 제2 메모리(SRAM2)로 최종적으로 출력될 수 있다.
위 단계(S30)와 유사하게, 제2 데이터 항목들의 제2 버퍼(BUF2)에서의 대응하는 위치들에 따라서, 제1 버퍼(BUF1)로부터 제2 버퍼(BUF2)로 이동된 제2 데이터 항목들은 제2 버퍼(BUF2)의 제2 버퍼 행을 점유할 수 있고, 제2 버퍼(BUF2)의 제2 버퍼 행과 제2 버퍼(BUF2)의 다른 하나 이상의 다른 버퍼 행들 모두를 점유할 수 있다. 만약 제1 버퍼(BUF1)로부터 제2 버퍼(BUF2)로 이동된 제2 데이터 항목들이 제2 버퍼 행과 제2 버퍼(BUF2)의 하나 이상의 다른 버퍼 행들 모두를 점유한다면, 제1 메모리(SRAM1)에서 제2 버퍼(BUF2)의 제2 버퍼 행에서의 각각의 제2 데이터 항목은 제2 버퍼(BUF2)의 하나 이상의 다른 버퍼 행들 각각에서의 각각의 제2 데이터 항목 전에 위치한다.
그러므로 전술한 바와 같이, 제2 버퍼(BUF2)는 버퍼 행들에 의해 순환적으로 어드레스될 수 있는 2개의 버퍼 행들을 포함할 수 있다. 비용이 허용하는 경우, 제2 버퍼(BUF2)는 버퍼 행들에 의해 순환적으로 어드레스될 수 있는 더 많은 버퍼 행들을 포함할 수 있다. 또, 제2 버퍼(BUF2)는 하나의 판독-기입(read-write) 사이클 내에서 데이터의 읽기와 쓰기를 지원할 수 있다. 예를 들면, 제2 버퍼(BUF2)는 읽기-쓰기 사이클의 제1 시점(time point)(예를 들면, 판독-기입 클록의 라이징 에지(rising edge))에서 하나의 버퍼 행으로부터의 데이터를 출력하는 것과 판독-기입 사이클의 제2 시점에서 또 다른 버퍼 행으로의 데이터를 입력하는 것을 지원할 수 있다. 그러므로 칩의 성능은 더 개선될 수 있다.
단계(S40')에서, 제2 버퍼(BUF2)의 제2 버퍼 행에서의 데이터 항목들은 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장될 수 있다.
위 단계(S40)와 유사하게, 다양한 예들에서 단계(S40')에서 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장될 데이터 항목들은 적어도 제2 버퍼(BUF2)의 제2 버퍼 행에서의 제2 데이터 항목들을 포함하고 또한 단계들(S30, S40) 후 제2 버퍼(BUF2)의 제2 버퍼 행에는 남아 있지만 여전히 제2 메모리(SRAM2)에서의 타겟 위치들로 출력되지 않는 액세스될 제1 데이터 항목들을 포함할 수 있다.
만약 위 제2 행 어드레스가 도 6에 도시된 바와 같이 제1 메모리(SRAM1)에서 처리될 마지막 행 어드레스이라면, 실시예에서의 방법 예는 단계(S50')를 더 포함할 수 있다.
단계(S50')에서, 만약 제2 버퍼(BUF2)의 제1 버퍼 행이 적어도 하나의 제2 데이터 항목을 포함한다면, 제2 버퍼(BUF2)의 제1 버퍼 행에서의 각각의 제2 데이터 항목은 제2 메모리(SRAM2)에서의 대응하는 타겟 위치로 저장될 수 있다. 제1 메모리(SRAM1)에서는 제2 버퍼(BUF2)의 제1 버퍼 행에서의 각각의 제1 데이터 항목이 제2 버퍼(BUF2)의 제2 버퍼 행에서의 각각의 제1 데이터 항목 뒤에 위치한다.
예를 들면 도 7에 도시된 바와 같이 위 제2 행 어드레스 후 처리될 제3 행 어드레스가 존재할 때와 같이, 처리될 추가적인 행 어드레스가 제1 메모리(SRAM1)에서 포함될 때에는, 제3 행 어드레스로 위 제1 행 어드레스를 대체함으로써 제3 행 어드레스에 대해 단계들(S10 내지 S40)이 반복될 수 있다. 만약 제3 행 어드레스가 처리될 마지막 행 어드레스이라면, 단계(S50)가 단계(S40) 후 수행될 수 있다. 그렇지 않으면, 만약 위 제3 행 어드레스 후 처리될 제4 행 어드레스가 여전히 존재한다면, 단계(S40) 후 위 제2 행 어드레스를 제4 행 어드레스로 대체함으로써 제4 행 어드레스에 대해 단계들(S10' 내지 S40')이 반복될 수 있다. 만약 제4 행 어드레스가 처리될 마지막 행 어드레스이라면, 단계(S50')가 단계(S40') 후 수행될 수 있다. 제1 메모리(SRAM1)에서 처리될 행 어드레스 전부가 처리될 때까지 유사한 프로세스들이 반복될 수 있다.
예를 들면, 도 8에 도시된 것처럼 도 7의 방법 예에서 단계(S10)를 수행하기 전 또는 수행할 때, 텐서 데이터의 데이터 항목들의 한 부분이 제1 메모리(SRAM1)에 순차적으로 저장된다. 예를 들면, H1c1w9는 텐서 데이터의 논리 구조(데이터 큐브(cube)일 수 있고, 이 예에서는 0부터 카운트되는 행들, 열들, 및 채널들일 수 있는)에서의 Voxel의 데이터 값을 나타내고, 이는 제1 행(H1), 제1 채널(c1) 및 제9 열(w9)에 위치한다.
도 8의 예에서, 텐서 데이터의 논리 구조에서의 제1 채널(c1)에서 0번째 행으로부터 1번째 행까지(H0 내지 H1) 그리고 2번째 열부터 11번째 열까지(w2 내지 w11)의 데이터 항목들, 즉 도 8의 SRAM1에서의 볼드 프레임(bold frame)들에서의 데이터 항목들만이 액세스될 것으로 예상된다. 또한, 데이터 항목들의 이러한 부분이 이어지는 동작들에서 효율적으로 얻어지고 처리될 것으로 예상된다. 예를 들면, 데이터 항목들의 그러한 부분은 하드웨어의 데이터 정렬(alignment)의 요구 조건을 만족시키면서 콘볼루션 계산을 위한 콘볼루션 계산 코어에 의해 정확하게 얻어질 것으로 예상된다. 예를 들면, 데이터 항목들의 부분은 직접적으로 그리고 간단하게 특징 데이터의 겹쳐 잇기 또는 조합을 더 구현하도록 있는 그대로 소정의 저장 영역에서 소정의 위치에 출력되거나 채워질 것으로 예상된다. 그러므로 데이터 항목들의 이러한 부분은, 예를 들면 도 8의 SRAM2에서 볼드 프레임에 의해 도시된 것과 같은 방식으로, 예상된 방식으로 온-칩 메모리에 저장될 것으로 예상된다.
도 8에 도시된 것처럼, 단계(S10)에서 제어기(CON)는 제1 메모리(SRAM1)의 제1 행 어드레스(R1)를 결정할 수 있다.
제1 행 어드레스(R1)에서의 데이터 항목들은 H0c1w0, H0c1w1, H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, 및 H0c1w7를 포함하고, 이 경우 H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, 및 H0c1w7은 처리될 텐서 데이터의 논리 구조에서의 액세스될 데이터 항목들, 즉 제1 데이터 항목들이다.
일 실시예에서, 제1 메모리(SRAM1)의 제1 행 어드레스는 처리될 텐서 데이터의 논리 구조에서 액세스될 데이터 범위(scope)에 따라 결정될 수 있다. 예를 들면 그러한 범위는 명령어 파라미터들에 의해 제공될 수 있다.
예를 들면, 도 8의 예에서 텐서 데이터의 데이터 항목들은 제1 메모리(SRAM1)에서 계속해서 저장된다. 그러므로 만약 제1 메모리(SRAM1)의 저장 폭이 알려진다면(도 8의 예에서, 제1 메모리(SRAM1)의 하나의 행은 8개의 데이터 항목들을 저장할 수 있다), 제어기(CON)는 각각의 데이터 항목에 대해 제1 메모리(SRAM1)에서의 위치를 결정할 수 있어서, 하나 이상의 행 어드레스들이 처리될 텐서 데이터의 논리 구조에서 액세스될 데이터 범위에 따라 결정될 수 있다. 그런 다음, 각 단계(S10)에서 제어기(CON)는 행 어드레스 레지스터 및/또는 행 어드레스 카운터를 통해 제1 메모리(SRAM1)의 제1 행 어드레스를 결정할 수 있다.
또 다른 예에서, 제어기(CON)는 제1 메모리(SRAM1)에서의 참조 어드레스(reference address)를 기록할 수 있고, 그런 다음 제1 메모리(SRAM1)에서 참조 어드레스로부터 그리고 행 어드레스 전의 저장 영역이 액세스될 데이터 범위에서의 데이터 항목들을 포함하지 않도록 처리될 텐서 데이터의 논리 구조에서 액세스될 데이터 범위에 따라 단계(S10)에서 행 어드레스를 결정할 수 있다. 그런 다음, 그러한 참조 어드레스는 결정된 행 어드레스 후 다음 행 어드레스로 갱신될 수 있다.
도 8에 도시된 것처럼, 단계(S20)에서 제어기(CON)는 제1 메모리(SRAM1)의 행 어드레스(R1)에서의 모든 데이터 항목들을 제1 버퍼(BUF1)의 제1 버퍼 행(L11)으로 복사하하는 명령어들을 수행할 수 있고, 이 경우 H0c1w0 및 H0c1w1는 액세스될 데이터 항목들이 아니다.
일 실시예에서, 데이터가 단계(S10)에서 제1 메모리(SRAM1)로부터 제1 버퍼(BUF1)로 간단하고 효율적으로 판독될 수 있도록, 제1 버퍼(BUF1)의 각 버퍼 행의 용량은 동일한 행 어드레스를 갖는 제1 메모리(SRAM1)에서의 복수의 저장 유닛들의 총 용량과 동일할 수 있다.
도 8에 도시된 것처럼, 단계(S30)에서는 제어기(CON)가 제1 데이터 항목들(H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, H0c1w7)에 대한 제2 메모리(SRAM2)에서의 타겟 위치들로서 제2 메모리(SRAM2)에서의 제1 이용 가능한 저장 영역(즉, 도 4의 SRAM2에서의 제2 저장 행에서의 "XX" 후 영역)을 결정하기 위한 명령어들을 수행할 수 있다.
또 다른 예에서는 제어기(CON)가 또한 명령어 파라미터들에 의해 표시될 수 있거나 타겟 텐서에서의 로컬 텐서(local tensor)의 예상된 위치에 따라 결정될 수 있는 타겟 텐서에서의 패딩(padding) 위치들에 따라 결정될 수 있는 타겟 센서에서의 패딩(padding) 위치들에 따라, 제1 데이터 항목들(H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, H0c1w7)에 대한 제2 메모리(SRAM2)에서의 타겟 위치들을 결정하기 위한 명령어들을 수행할 수 있다.
도 8에 도시된 것처럼 단계(S30)에서는 제어기(CON)가 제1 버퍼(BUF1)의 제1 버퍼 행(L11)에서의 제1 데이터 항목들(H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, H0c1w7)을 적어도 제2 버퍼(BUF2)의 제1 버퍼 행(L21)으로 이동시키기 위한 명령어들을 수행할 수 있고, 이 경우 제1 데이터 항목들(H0c1w2, H0c1w3, H0c1w4, H0c1w5)은 제2 버퍼(BUF2)의 제1 버퍼 행(L21)을 점유하고, H0c1w6과 H0c1w7은 제2 버퍼(BUF2)의 제2 버퍼 행(L22)을 점유한다. 도 8에 도시된 것처럼, 제2 버퍼(BUF2)에서 제1 데이터 항목들의 대응하는 위치들은 H0c1w2, H0c1w3, H0c1w4, H0c1w5, H0c1w6, H0c1w7에 대한 제2 메모리(SRAM2)에서 할당된 타겟 위치들에 의존할 수 있다.
본 명세서에서, 제1 버퍼(BUF1)의 제1 버퍼 행(L11)의 데이터 항목들을 제2 버퍼(BUF2)로 이동시키는 것은 제1 버퍼(BUF1)의 제1 버퍼 행(L11)에서의 데이터 항목들을 제2 버퍼(BUF2)에 복사하는 것을 의미할 수 있고, 또한 제2 버퍼(BUF2)로의 제1 버퍼(BUF1)의 제1 버퍼 행(L11)에서의 데이터 항목들을 복사한 후 제1 버퍼(BUF1)의 제1 버퍼 행(L11)에서의 모든 내용물들을 깨끗히 치우는 것을 의미할 수 있다.
도 8에 도시된 것처럼, 단계(S40)에서는 제어기(CON)가 제2 버퍼(BUF2)의 제1 버퍼 행(L21)에서의 데이터 항목들(H0c1w2, H0c1w3, H0c1w4, 및 H0c1w5)을 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장 또는 채우기 위한 명령어들을 수행할 수 있다.
위 단계들(S10 내지 S40)에서, 제1 버퍼(BUF1)는 데이터에 액세스할 때 하드웨어의 데이터 정렬을 만족시키고 데이터에 효율적으로 액세스하도록 제1 메모리(SRAM1)의 데이터 항목들의 완전한 행을 버퍼링하기 위해 사용될 수 있고, 제2 버퍼(BUF2)는 데이터 포맷 변환이 하드웨어에 의해 직접 가능하게 될 수 있도록 예상된 배열(arrangement)로 액세스될 데이터 항목들을 버퍼링하기 위해 사용될 수 있다. 그런 다음, 제2 버퍼(BUF2)에서의 데이터 항목들은 데이터 정렬을 갖는 제2 메모리(SRAM2)로 직접 출력될 수 있다. 그러므로 액세스될 데이터 항목들은 예상된 데이터 배열에 따라 직접 하드웨어에 의해 텐서 데이터로부터 얻어질 수 있다.
도 8의 예에서는, 또 다른 행 어드레스 또는 제1 메모리(SRAM1)에서의 제2 행 어드레스(R2)가 처리될 수 있다. 도 7을 참조하면, 단계들(S10' 내지 S40)이 제2 행 어드레스(R2)에 대해 반복될 수 있다.
도 9에 도시된 바와 같이, 단계(S10')에서 제1 메모리(SRAM1)의 제2 행 어드레스(R2)가 결정될 수 있다. 제2 행 어드레스(R2)에서의 데이터 항목들은 H0c1w8, H0c1w9, H0c1w10, H0c1w11, H0c1w12, H0c1w13, H0c1w14, 및 H0c1w15를 포함하며, 여기서 H0c1w8, H0c1w9, H0c1w10, 및 H0c1w11은 처리될 텐서 데이터의 논리 구조에서 액세스될 데이터에 속한다.
도 9에 도시된 바와 같이, 단계(S20')에서는 제1 메모리(SRAM1)에서의 제2 행 어드레스(R2)에서의 데이터 항목들이 제1 버퍼(BUF1)의 제2 버퍼 행(L12)으로 복사될 수 있다. 예를 들면, 제어기(CON)는 제1 메모리(SRAM1)의 행 어드레스(R2)에 있는 모든 데이터 항목들을 제1 버퍼(BUF1)의 제2 버퍼 행(L12)으로 복사하는 명령어들을 수행할 수 있고(이 실시예에서, 데이터 항목들은 또한 제1 버퍼(BUF1)의 제1 버퍼행(L11)으로 복사될 수 있고, 제1 버퍼(BUF1)는 단지 하나의 버퍼 행을 포함 할 수 있다), 여기서 H0c1w12, H0c1w13, H0c1w14, 및 H0c1w15는 액세스될 데이터 항목들이 아니다.
도 9에 도시된 바와 같이, 단계(S30')에서는 제1 버퍼(BUF1)의 제2 버퍼 행(L12)에서 액세스될 데이터 부분에 속하는 각각의 제2 데이터 항목은 적어도 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서의 대응하는 위치로 이동될 수 있다. 각각의 제2 데이터 항목에 대해, 적어도 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서의 대응하는 위치는 이러한 제2 데이터 항목에 할당된 제2 메모리(SRAM2)에서의 타겟 위치에 의존한다.
예를 들면 도 9에 도시된 것처럼, 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서 에서 현재 완충된 H0c1w8, H0c1w9, H0c1w10, H0c1w11 및 데이터 항목들(H0c1w6 및 H0c1w7)은 결과로서 생기는 데이터 항목들이다. 그러므로 제어기(CON)는 제1 버퍼(BUF1)의 제2 버퍼 행(L12)에서의 H0c1w8, H0c1w9, H0c1w10, 및 H0c1w11을 H0c1w6 및 H0c1w7 뒤에서 제2 버퍼(BUF2)의 제2 버퍼 행(L22)으로 이동시키는 명령어들을 수행할 수 있다.
도 9의 예에서, 제1 버퍼(BUF1)의 제2 버퍼 행(L12)에서 액세스될 데이터 부분에 속하는 제2 데이터 항목들은 제2 버퍼(BUF2)의 제2 버퍼 행(L22)만을 점유한다.
도 9에 도시된 바와 같이, 단계(S40)에서 제어기(CON)는 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에 있는 데이터 항목들을 제2 메모리(SRAM2)의 대응하는 타겟 위치들에 저장하거나 채우는 명령어들을 수행할 수 있다.
또, 도 10에 도시된 바와 같이 R3, R4, R5, 및 R6와 같은 또 다른 행 어드레스에 대해서는 도 7에 도시된 바와 같은 제어 흐름에 따라 단계들(S10 내지 S40 및/또는 S10' 내지 S40')이 계속해서 반복될 수 있어서, 액세스될 데이터 항목들이 제1 메모리(SRAM1)로부터 제2 메모리(SRAM2)로 제1 메모리(SRAM1)->제1 버퍼(BUF1)->제2 버퍼(BUF2)->제2 메모리(SRAM2)의 흐름 방향으로 계속해서 흐를 수 있고 원하는 배열로 제2 메모리(SRAM2)에 저장될 수 있다.
실시예들의 방법 예에서, 제1 메모리(SRAM1)에서의 데이터의 하나의 행은 각각의 사이클 내에서 처리되어 제1 메모리(SRAM1)에서 액세스될 데이터 항목들은 하드웨어의 데이터 정렬의 요구조건을 만족시키면서 간단하고 효율적으로 얻어질 수 있다. 그런 다음, 액세스될 데이터 항목들이 원하는 배열로 제2 메모리(SRAM2)로 저장될 수 있어서, 이어지는 프로세스들 동안에 예를 들면 콘볼루션 계산들을 수행하기 위한 콘볼루션 계산 코어(core)가 예상된 데이터 항목들을 효율적으로 그리고 정밀하게 얻을 수 있고, 적어도 제1 메모리(SRAM1)로 이미 로드된 데이터 항목들을 처리하는 동안 외부 메모리 DDR과 내부 고속 저장 시스템(제1 메모리(SRAM1)와 제2 메모리(SRAM2)를 포함하는) 사이의 데이터 교환/전송이 무시될 수 있어서, AI 칩의 성능이 개선될 수 있고, AI 칩의 전력 소비가 감소될 수 있다.
또, 복수의 부분적인 텐서 데이터를 합병 또는 겹쳐 잇기 위해 구성될 타겟 텐서의 구조에 따라 제2 메모리(SRAM2)에서의 데이터 항목들의 타겟 위치들이 결정될 수 있을 때에는, 특징 데이터를 합병하거나 겹쳐 잇는 것은 실시예들에서의 방법 예에 의해 직접 구현될 수 있다. 그러므로 적어도 제어기(CON)에 의해 텐서 데이터를 합병 또는 겹쳐 잇기 위한 동작들이 생략될 수 있거나 간략화될 수 있고, 제어기(CON)가 다른 더 많은 제어들과 프로세스들에 대해 작용할 수 있도록 제어기(CON)의 작용 부하(working load)가 감소될 수 있다. 그러므로 AI 칩의 성능이 개선될 수 있다.
또, 위 예들에서 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 행들에 의해 순환적으로 어드레스될 수 있는 2개의 버퍼 행들을 포함할 수 있고, 이는 제1 버퍼(BUF1) 및/또는 제2 버퍼(BUF2)가 어드레스 경계선(boundary) 없이 저장 공간을 제공할 수 있게 한다. 또 다른 예에서는, 만약 비용이 허용된다면, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각이 또한 더 많은 융통성 있는 액세스 제어를 구현하도록 행들에 의해 순환적으로 어드레스될 수 있는 더 많은 버퍼 행들을 포함할 수 있다.
또 다른 예에서, 만약 제어기(CON)가 도 7 내지 도 10에 도시된 바와 같은 프로세스들 예에 따른 명령어들을 수행한다면, 제1 버퍼(BUF1)는 또한 비용을 절감하도록 하나의 버퍼 행만을 포함할 수 있다.
또 다른 실시예에서는, 방법 예가 더 높은 프로세스 효율을 달성하도록 파이프라인(pipeline) 방식으로 수행될 수도 있다. 예를 들면, 실시예들에서의 방법 예의 단계들은 간단하게 하기 위해 단계들(S50, S50')이 도 11에 도시되지 않은 도 11에 도시된 바와 같은 파이프라인 방식으로 수행될 수 있다. 예를 들면, 행 어드레스(R2)에 대한 단계(S30')는 행 어드레스(R1)에 대한 단계(S40)와 병렬로 수행될 수 있고, 행 어드레스(R3)에 대한 단계(S30)는 행 어드레스(R2)에 대한 단계(S40')와 병렬로 수행될 수 있는 등의 식으로 행해진다.
제1 메모리(SRAM1)에서 처리될 행 어드레스는, 예를 들면 자연수들의 순서에 따라 1부터 번호가 매겨질 수 있다.
일 예에서, 단계(S10 내지 S40)는 위의 제1 행 어드레스 및 제3 행 어드레스와 같이 홀수들을 갖는 행 어드레스들에 대해 수행될 수 있다. 만약 처리될 마지막 행 어드레스가 홀수로 번호가 매겨진 것이라면, 단계(S50)가 이러한 방법의 끝에서 수반될 수 있다. 단계들(S10' 내지 S40')은 위의 제2 행 어드레스 및 제4 행 어드레스와 같이 짝수들을 갖는 행 어드레스들에 대해 수행될 수 있다. 만약 처리될 마지막 행 어드레스가 짝수로 번호가 매겨진 것이라면, 단계(S50')가 이러한 방법의 끝에서 수반될 수 있다.
따라서, 파이프라인식(pipelined) 제어 흐름에서 짝수 번호가 매겨진 행 어드레스(R2i)에 대한 단계(S30')는 홀수 번호가 매겨진 행 어드레스(R2i-1)에 대한 단계(S40)와 병렬로 수행될 수 있고, 홀수 번호가 매겨진 행 어드레스(R2i+1)에 대한 단계(S30)는 만약 필요하다면 짝수 번호가 매겨진 행 어드레스(R2i)에 대한 단계(S40')와 병렬로 또한 수행될 수 있으며, 여기서 i는 임의의 자연수이다.
위 번호 매김(numbering)은 일 예라는 것을 알아야 한다. 예를 들면, 그러한 번호 매김은 또한 0부터 시작될 수 있다.
따라서, 일 실시예에서의 방법 예의 일 예는 만약 처리될 마지막 행 어드레스가 홀수 번호가 매겨진다면 단계(S50)가 방법 예의 끝에서 수반될 수도 있는 위 제1 행 어드레스 및 제3 행 어드레스와 같은 홀수 번호가 매겨진 행 어드레스들에 대해 단계들(S10 내지 S40)을 수행하는 것과, 만약 처리될 마지막 행 어드레스가 홀수 번호가 매겨진다면 단계(S50')가 방법 예의 끝에서 수반될 수도 있는 위 제2 행 어드레스 및 제4 행 어드레스와 같은 짝수 번호가 매겨진 행 어드레스들에 대해 단계들(S10' 내지 S40')을 수행하는 것을 포함할 수 있다.
따라서, 파이프라인식 제어 흐름에서는 행 어드레스(R2i-1)에 대한 단계(S30')가 홀수 번호가 매겨진 행 어드레스(R2i)에 대한 단계(S40)와 병렬로 수행될 수 있고, 홀수 번호가 매겨진 행 어드레스(R2i)에 대한 단계(S30)는 만약 필요하다면 홀수 번호가 매겨진 행 어드레스(R2i-1)에 대한 단계(S40')와 병렬로 또한 수행될 수 있으며, 여기서 i는 임의의 자연수이다.
예를 들면, 역시 도 8의 예에서 제1 메모리(SRAM1)에서의 데이터에 대해서는, 도 12가 도 11의 파이프라인된 제어 흐름의 일 예를 보여주고, 이 경우 제어기(CON)는 실시예들에서의 방법 예를 구현하도록 시간 기간(time period)들(t0, t1, t2, ...)의 순서대로 파이프라인에서 명령어들을 수행할 수 있다. 도 11 및 도 13에 도시된 바와 같이, 시간 기간(t0)에서 제1 메모리(SRAM1)에서의 행 어드레스(R1)에서의 모든 데이터를 판독하거나 제1 버퍼(BUF1)의 제1 버퍼 행(L11)으로 복사하기 위해 단계들(S10, S20)이 수행될 수 있다.
그런 다음, 도 11 및 도 14에 도시된 것처럼, 단계(S30)가 시간 기간(t0) 바로 다음에 오는 시간 기간(t1)에서 수행될 수 있어, 제1 버퍼(BUF1)의 제1 버퍼 행(L11)에서 액세스될 데이터에 속하는 각각의 제1 데이터 항목(H0c1w2 내지 H0c1w7)을 적어도 제2 버퍼(BUF2)의 제1 버퍼 행(L21)에서의 대응하는 위치로 이동시킨다. 병렬로, 제1 메모리(SRAM1)에서의 행 어드레스(R2)에서의 모든 데이터를 판독하거나 제1 버퍼(BUF1)의 제2 버퍼 행(L12)으로 복사하기 위해 단계들(S10', S20')이 수행될 수 있다.
이 실시예에서, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 행들에 의해 순환적으로 어드레스되는 적어도 2개의 버퍼 행들을 포함할 수 있다. 예를 들면, 비용을 절감하기 위해, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 행들에 의해 순환적으로 어드레스되는 오직 2개의 버퍼 행들을 포함할 수 있다. 또, 일 실시예에서 제1 버퍼(BUF1) 및/또는 제2 버퍼(BUF2)는 하나의 판독/기입 사이클(oner read-write cycle)에서 구 데이터를 판독하고 신 데이터를 기입하는 것을 지원하는 버퍼일 수 있다.
도 14에 도시된 것처럼, 시간 기간(t1)에서 만약 제2 버퍼(BUF2)의 제2 버퍼 행(L22)이 적어도 하나의 제1 데이터 항목(H0c1w6, H0c1w7)을 포함한다면, 제2 버퍼(BUF2)의 제1 버퍼 행(L21)에서 제1 데이터 항목들(H0c1w2 내지 H0c1w5)에 대한 제1 메모리(SRAM1)에서의 저장 위치들은 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서의 제1 데이터 항목들(H0c1w6, H0c1w7)에 대한 제1 메모리(SRAM1)에서의 저장 위치들 전에 존재한다.
도 11과 도 15에 도시된 것처럼, 단계(S40)는 시간 기간(t1) 바로 다음에 오는 시간 기간(t2) 동안에 수행될 수 있어, 제2 버퍼(BUF2)의 제1 버퍼 행(L21)에서의 데이터 항목들(H0c1w2 내지 H0c1w5)을 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장시킨다. 병렬로, 제1 버퍼(BUF1)의 제2 버퍼 행(L12)에 있고 액세스될 데이터에 속하는 제2 데이터 항목들(H0c1w8 내지 H0c1w11)을 제2 버퍼(BUF2)의 제2 버퍼 행(L22)으로 이동시키기 위해 단계(S30')가 수행될 수 있으며, 이 경우 적어도 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서의 각각의 제2 데이터 항목들(H0c1w8 내지 H0c1w11)의 대응하는 위치는 이러한 제2 데이터 항목에 할당된 제2 메모리(SRAM2)에서의 타겟 위치에 의존한다. 병렬로, 제1 메모리(SRAM1)에서의 행 어드레스(R3)에서의 모든 데이터 항목들을 판독하거나 제1 버퍼(BUF1)의 제1 버퍼 행(L11)으로 복사하기 위해 단계들(S10과 S20)이 더 수행될 수 있다.
이 예에서, 시간 기간(t2) 동안 제2 버퍼(BUF2)로 이동된 제2 데이터 항목들(H0c1w8 내지 H0c1w11)은 오직 제2 버퍼(BUF2)의 제2 버퍼 행(L22)을 점유한다.
도 11과 도 16에 도시된 것처럼, 단계(S40')는 시간 기간(t2) 바로 다음에 오는 시간 기간(t3) 동안 수행될 수 있어, 제2 버퍼(BUF2)의 제2 버퍼 행(L22)에서의 데이터 항목들(H0c1w6 내지 H0c1w11)을 제2 메모리(SRAM2)에서의 대응하는 타겟 위치들로 저장시킨다. 병렬로, 제1 버퍼(BUF2)의 제1 버퍼 행(L11)에 있고 액세스될 데이터에 속하는 데이터 항목들(H1c1w2 내지 H1c1w7)을 적어도 제2 버퍼(BUF2)의 제1 버퍼 행(L21)으로 이동시키기 위해 단계(S30)가 수행될 수 있고, 이 경우 신 데이터 항목들(H1c1w6 내지 H1c1w7)은 제2 버퍼(BUF2)의 제2 버퍼 행(L22)을 점유한다. 그러한 경우, 제2 버퍼(BUF2)로부터의 구 데이터를 판독한 후 신 데이터가 제2 버퍼(BUF2)에 기입될 수 있거나, 제2 버퍼(BUF2)가 하나의 판독-기입 사이클 내에서 신 데이터를 기입하고 데이터를 판독하는 것을 지원하는 버퍼일 수 있다. 병렬로, 도 16에 도시된 것처럼, 제1 메모리(SRAM1)에서의 행 어드레스(R4)에서 모든 데이터 항목들을 판독하거나 제1 버퍼(BUF1)의 제2 버퍼 행(L12)으로 복사하기 위해 단계들(S10' 및 S20')(도 11에서는 미도시)이 더 수행될 수 있다.
단계들(S10 및 S20 또는 S10' 및 S20')을 수행하기 위해 시간 T1이 필요하고, 단계(S30 또는 S30')을 수행하기 위해 시간 T2가 필요하고, 단계(S30 또는 S30')을 수행하기 위해 시간 T3이 필요하다고 가정하면, 제1 메모리(SRAM1)의 M 행 어드레스들을 처리하기 위해, 도 7에 도시된 방식으로 예시적인 방법을 수행할 때 적어도 (M×T1+M×T2+M×T3)이 걸리고, 도 12에 도시된 것처럼 파이프라인된 방식으로 예시적인 방법을 수행할 때 (T1+T2+T3+max(T1, T2, T3)*(M-1))이 걸리며 여기서, max()는 최대값을 페치(fetch)하는 것을 나타낸다. 일반적으로, T1, T2, 및 T3은 하나의 사이클과 같을 수 있다. 따라서, 도 7에 도시된 방식으로 예시적인 방법을 수행할 때 적어도 3M 사이클이 걸리고, 도 11에 도시된 바와 같이 파이프라인된 방식으로 예시적인 방법을 수행할 때에는 (M + 2) 사이클이 걸린다. 파이프라인된 제어 흐름은 제어기(CON)의 실행 시간을 상당히 감소시킬 수 있어서, 시스템의 전체 성능이 개선될 수 있고 전력 소비가 감소될 수 있다.
파이프라인된 제어는 도 11 및 도 12에 도시된 바와 같이 흐른다는 것이 이해된다. 도 11 및 도 12에서의 예들에 제한되지 않는, 이 실시에들에서의 방법 예를 수행하도록 다른 파이프라인된 제어 흐름들이 채택될 수 있다.
이 실시예들의 방법 예에서는, 적합한 하드웨어 구조들(제1 버퍼(BUF1), 제2 버퍼(BUF2))과 개선된 데이터 흐름 제어(제1 메모리(SRAM1)→제1 버퍼(BUF1)→제2 버퍼(BUF2)→제2 메모리(SRAM2) 및/또는 제2 메모리(SRAM2)→제1 버퍼(BUF1)→제2 버퍼(BUF2)→제1 메모리(SRAM1))에 의해, 액세스될 데이터 부분은 예상된 데이터 배열에서의 온-칩 메모리로 로드되는 텐서 데이터로부터 직접 획득될 수 있다. 그러므로, 메인 프로세서 또는 제어기의 작업 부하(working load)가 감소될 수 있고, 오프-칩 메모리와 온-칩 메모리 사이의 데이터 교환/전송 빈도가 감소될 수 있으며, 파이프라인된 방식에 의해 프로세스 효율이 개선될 수 있어서, AI 칩의 성능이 개선되될 수 있고 AI 칩의 전력 소비가 감소될 수 있다.
또, 실시예들에서의 방법 예에서는, 제1 메모리(SRAM1)에서의 데이터의 하나의 행이 사이클마다 처리되어, 파이프라인된 프로세스가 적합한 하드웨어 구조들과 개선된 데이터 흐름 제어들을 통해 지원될 수 있다. 따라서, AI 칩 내의 데이터 액세스 효율이 개선될 수 있고, AI 칩의 성능들이 개선될 수 있으며 AI 칩의 전력 소비가 감소될 수 있다.
또 다른 실시예에서, 위 단계들 전에, 방법 예는 텐서 데이터에 액세스하기 위해 명령어들을 수신하는 단계와, 논리 구조에서 액세스될 데이터 항목들 중 하나 이상, 제1 행 어드레스, 논리 구조에서 액세스될 데이터 항목들의 제2 메모리(SRAM2)에서의 타겟 위치들을 결정하기 위해 명령어들을 분석하는 단계를 더 포함할 수 있다.
예를 들면, 제어기(CON)는 명령어 인터페이스를 통해 텐서 데이터와 연관된 파라미터들을 액세스하기 위한 명령어를 수신할 수 있고, 이러한 명령어 인터페이스는 I/O 장치를 통해 사용자에 의한 명령어들 입력을 수신하기 위한 포트이거나 명령어 버스에 결합하기 위한 포트 등일 수 있다.
예를 들면, 수신된 명령어의 운영 코드(operation code)는 완전한 텐서 데이터로부터 데이터의 부분(part)을 얻을 것을 지시할 수 있다. 따라서, 그러한 명령어의 어드레스 코드 또는 파라미터는 외부 메모리 DDR에서의 완전한 텐서 데이터의 저장 위치, 완전한 텐서 데이터의 논리 구조, 완전한 텐서 데이터의 논리 구조에서 액세스될 데이터의 위치 등 중 하나 이상에 지시할 수 있다.
예를 들면, 수신된 명령어의 운영 코드는 또한 또 다른 완전한 텐서 데이터의 부분으로서 제1 메모리(SRAM1)에서의 데이터 항목들(예를 들면, 콘볼루션 계산 코어와 같은 시스템에서의 다른 구성요소들로부터의 데이터 출력)을 구성하도록 지시할 수 있다. 따라서, 그러한 명령어의 어드레스 코드 또는 파라미터는 제1 메모리(SRAM1)에서의 데이터 항목들의 저장 위치들, 또 다른 텐서 데이터의 논리 구조, 또 다른 완전한 텐서 데이터의 논리 구조에서 액세스될 데이터의 위치 등 중 하나 이상에 지시할 수 있다.
그런 다음, 제어기(CON)는 수신된 명령어들을 분석하거나, 그러한 명령어의 운영 코드에 따른 추가 프로세스들의 운영 유형 및 연관된 파라미터들을 결정하도록 수신된 명령어를 분석할 것을 전용 명령어 분석기(parser)에 지시할 수 있다.
따라서, 제어기(CON)는 외부 메모리 DDR에서의 항목들 또는 액세스될 데이터에 속하는 제1 메모리(SRAM1) 중 어느 것, 액세스될 데이터의 행 어드레스(예를 들면, 위 제1 행 어드레스, 제2 행 어드레스 등), 액세스될 데이터 항목들에 대한 제2 메모리(SRAM2)에서의 타겟 위치들 등 중 하나 이상을 결정할 수 있다.
예를 들면, 전술한 바와 같이, 만약 제어기(CON)가 데이터 항목들에 대한 제2 메모리(SRAM2)에서의 타겟 위치로서 제2 메모리(SRAM2)에서 제1 이용 가능한 저장 영역을 결정하기 위한 명령어들을 수행하거나 명령어들을 제공한다면, 제어기(CON)에 의해 결정된 정보는 액세스될 데이터에서의 데이터 항목들에 대한 제2 메모리(SRAM2)에서의 타겟 위치들과 같은 정보를 포함할 필요는 없다.
또, 수신된 명령어의 운영 코드가 완전한 텐서 데이터로부터 데이터의 부분을 얻을 것을 지시할 때, 실시예들에서의 방법 예는 외부 메모리 DDR로부터 완전한 텐서 데이터의 적어도 일부를 판독하거나 제1 메모리(SRAM1)로의 로딩(loading)을 더 포함할 수 있다.
실시예들에서의 방법 예의 단계들은 반복적으로(예를 들면, 도 5 내지 도 7에 도시된 것처럼) 또는 파이프라인된 방식으로(예를 들면, 도 11에 도시된 바와 같이) 수행될 수 있다.
또, 수신된 명령어의 운영 코드가 또 다른 완전한 텐서 데이터의 부분으로서 제1 메모리(SRAM1)에서의 데이터 항목들을 구성하도록 지시할 때, 실시예들에서의 방법 예는 제2 메모리(SRAM2)에서의 데이터를 외부 메모리 DDR에 출력하는 것을 더 포함할 수 있다.
일 실시예에서, 수신된 명령어는 시스템에 의해 지원 가능한 하드웨어 명령어일 수 있다. 제어기(CON)가 하드웨어 명령어를 수신한 후, 실시예들에서의 방법 예의 단계들은 텐서 데이터에 효율적으로 액세스하도록 반복적으로(예를 들면, 도 5 내지 도 7에 도시된 바와 같이) 또는 파이프라인된 방식으로(예를 들면, 도 11에 도시된 바와 같이) 수행될 수 있다.
도 17은 일 실시예에서 텐서 데이터에 액세스하기 위한 장치 예를 보여준다. 이러한 장치 예는 제1 버퍼(BUF1), 제2 버퍼(BUF2), 및 제어기(CON)를 포함할 수 있고, 이 경우 제어기(CON)는 제1 메모리(SRAM1), 제2 메모리(SRAM2), 제1 버퍼(BUF1), 및 제2 버퍼(BUF2)에 결합될 수 있다.
일 실시예에서, 제어기(CON)는 적어도 실시예들에서 방법 예를 수행하도록 활성화될 때 소정의 명령어 시퀀스(sequence)를 수행하도록 구성될 수 있다. 예를 들면, 제어기(CON)는 명령어들에 기초하고 도 3 내지 도 7 그리고 도 11에 도시된 바와 같은 임의의 제어 흐름들에 따른 실시예들에서 그러한 방법 예를 수행하도록 구성될 수 있다.
다양한 실시예들에서, 예를 들면 AU 칩의 경우에 제어기(CON)는 GPU, ARM 프로세서, 및 FPGA에 기초하여 개발된 프로세서 또는 제어기일 수 있고, 또한 FPGA에 기초하여 개발된 RISC 소프트 프로세서와 같은 온-칩 메모리 및/또는 오프-칩 메모리로의 액세스를 제어하는 것에 전용인 칩 상의 데이터 전송 제어기 또는 액세스 제어기일 수 있다. 또, 일 실시예에서의 제어기(CON)는 오프-칩 메모리 및/또는 온-칩 메모리에 대한 데이터 액세스를 독립적으로 관리하도록 구성될 수 있고, 또한 메인 프로세서를 가지고 돕거나 오프-칩 메모리 및/또는 온-칩 메모리로의 데이터 액세스를 관리하기 위해 메인 프로세서로부터의 명령어들에 반응하도록 구성될 수 있다.
제1 버퍼(BUF1) 및 제2 버퍼(BUF2) 각각은 캐시(cache) 또는 SRAM(static random access memory)일 수 있고, 이들의 데이터 액세스 레이트(data access rate)는 제1 메모리(SRAM1)와 제2 메모리(SRAM2)를 포함하는 고속 저장 시스템의 데이터 액세스 레이트들과 매치될 수 있다.
다양한 실시예들에서, 제1 버퍼(BUF1)는 하나 이상의 버퍼 행들을 포함할 수 있고, 제2 버퍼(BUF2)는 2개 이상의 버퍼 행들을 포함할 수 있다.
일 실시예에서, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 효율적인 데이터 액세스를 달성하도록 적어도 2개의 버퍼 행들을 포함할 수 있다.
일 실시예에서, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 낮은 비용의 하드웨어 구조들을 통해 효율적인 데이터 액세스를 달성하도록 2개의 버퍼 행들을 포함할 수 있다. 이 실시예에서, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 중 적어도 제2 버퍼(BUF2)는 도 16에 도시된 것처럼 가능한 판독-기입 충돌(conflict)을 회피하도록 하나의 판독-기입 사이클 내에서 구 데이터를 판독하는 것과 신 데이터를 기입하는 것을 지원할 수 있다.
비용이 허용되는 또 다른 실시예에서는, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각이 도 16에 도시된 바와 같은 가능한 판독-기입 충돌을 회피하도록 3개 이상(예를 들면, 3개 또는 4개)의 버퍼 행들을 포함할 수 있다.
또, 제1 버퍼(BUF1)와 제2 버퍼(BUF2) 각각은 경계가 없는(borderless) 저장 공간을 제공하고 저장 제어들을 간단하게 하도록, 버퍼 행들에 의해 순환적으로 어드레스될 수 있는 버퍼일 수 있다.
일 실시예에서, 제1 버퍼(BUF1)의 각 버퍼의 용량은 제1 메모리(SRAM1)에서의 동일한 행 어드레스를 갖는 복수의 저장 유닛들의 총 용량(즉, 제1 메모리(SRAM1)에서의 저장 폭)과 동일할 수 있고, 제2 버퍼(BUF2)의 각 버퍼의 용량은 제2 메모리(SRAM2)에서의 동일한 행 어드레스를 갖는 복수의 저장 유닛들의 총 용량(즉, 제2 메모리(SRAM2)에서의 저장 폭)과 동일할 수 있어서, 지정을 단순화하고 제어 로직의 복잡성을 감소시킨다.
다양한 실시예들에서, 제1 버퍼(BUF1)와 제2 버퍼(BUF2)는 도 17에서의 장치 예의 외측 또는 내측에 있게 구성될 수 있다. 예를 들면, 실시예들에서의 장치 예는 제1 메모리(SRAM1)와 제2 메모리(SRAM2)를 포함하거나 포함하지 않을 수 있다.
다양한 실시예들에서, 제1 메모리(SRAM1)와 제2 메모리(SRAM2) 각각은 정적 랜덤 액세스 저장 구성요소/모듈이거나 2차원 데이터로의 액세스를 지원하고/지원하거나 데이터로의 2차원 액세스를 지원하는 고속 버퍼 구성요소/모듈일 수 있다. 예를 들면, AI 칩의 경우에, 제1 메모리(SRAM1)와 제2 메모리(SRAM2) 각각은 적어도 온-칩 메모리의 부분을 형성하기 위해 사용될 수 있는 메모리의 임의의 적합한 유형 또는 형태일 수 있다.
또, 다양한 실시예들에서, 제1 메모리(SRAM1)와 제2 메모리(SRAM2)는 예를 들면 도 1 또는 도 17에 도시된 것처럼 별개로 구성될 수 있고 또한 예를 들면 도 2에 도시된 바와 같이, 2차원 데이터로의 액세스를 지원할 수 있는 동일한 저장 구성요소/모듈의 2개의 상이한 부분들일 수 있으며, 이 경우 그러한 저장 구성요소/모듈은 2차원 데이터로의 액세스 및/또는 데이터로의 2차원 액세스를 지원하도록 복수의 1차원 정적 랜덤 액세스 메모리들 또는 하나 이상의 2차원 메모리들을 포함할 수 있다.
일 실시예에서, 예를 들면 AI 칩의 경우 SoC(System on Chip)에서의 저장 시스템의 적어도 일부를 형성하도록, 제1 버퍼(BUF1), 제2 버퍼(BUF2), 제어기(CON), 제1 메모리(SRAM1), 및 제2 메모리(SRAM)가 하나의 칩에 구현될 수 있다.
실시예들의 장치 예에서는, 제1 메모리(SRAM1)에서 액세스될 데이터 항목들이 간단하게 그리고 효율적으로 얻어질 수 있고, 하드웨어의 데이터 정렬의 요구사항을 만족시키도록 제1 메모리(SRAM1)에서의 데이터의 하나의 행이 각각의 사이클 내에서 처리된다. 그런 다음, 이어지는 프로세스 동안에, 예를 들면 콘볼루션 계산들을 수행하기 위한 콘볼루션 계산 코어가 예상되는 데이터 항목들을 효율적으로 그리고 정밀하게 얻을 수 있도록 바라는 배열에서 액세스될 데이터 항목들이 제2 메모리(SRAM2)로 저장될 수 있으며, 적어도 제1 메모리(SRAM1) 내로 이미 로드된 데이터 항목들의 처리 동안에는 AI 칩의 성능이 개선되고 AI 칩의 전력 소비가 감소될 수 있도록 외부 메모리 DDR와 내부 고속 저장 시스템(제1 메모리(SRAM1)와 제2 메모리(SRAM2)를 포함하는) 사이의 데이터 교환/전송이 무시될 수 있다.
또, 복수의 부분적인 텐서 데이터를 합병 또는 겹쳐 이을 때, 제2 메모리(SRAM2)에서의 데이터 항목들의 타겟 위치는 구성될 타겟 텐서의 구조에 따라 결정될 수 있고, 그럴 경우 특징 데이터의 합병 또는 겹쳐 잇는 것이 실시예들에서의 방법 예에 의해 직접 구현될 수 있다. 그러므로 적어도 제어기(CON)에 의해 텐서 데이터를 합병 또는 겹쳐 잇기 위한 동작들이 생략될 수 있거나 단순화 될 수 있고, 제어기(CON)의 작용 부하가 감소될 수 있어서, 제어기(CON)가 다른 더 많은 제어들과 프로세스들에 대해 작용할 수 있다. 그러므로 AI 칩의 성능이 개선될 수 있다.
실시예들에서 텐서 데이터에 액세스하기 위한 장치 예는 도 17에서의 예에 제한되지 않는다. 예를 들면, 일 실시예에서의 장치 예는 또한 온-칩 구성요소들 중에서의 더 효율적인 상호작용들을 가능하게 하고 더 많은 칩 공간을 절감하도록 온-칩 구성요소들 중의 상호작용들을 위한 크로스바(crossbar) 및/또는 멀티플렉서 등을 포함할 수 있다. 예를 들면, 일 실시예에서의 장치 예는 또한 명령어 타이밍들을 제어하기 위한 타이밍 제어기, 명령어 차단들을 제어하기 위한 차단 제어기와 같은 다른 구성요소들/모듈들/회로들/유닛들/소자들을 포함할 수 있고, 이들은 위 제1 버퍼(BUF1)와 동일한 칩에서 구현될 수 있다. 예를 들면, 실시예에서의 예시적인 장치는 또한 데이터 액세스와 관련된 명령어들을 수신하고 분석하기 위한 명령어 인터페이스 및/또는 명령어 분석 회로/모듈을 포함할 수 있다.
위 방법들 및 장치 외에, 본 개시물의 실시예들은 또한 컴퓨터 프로그램 명령어들을 포함하는 컴퓨터 프로그램 제품(product)일 수 있다. 이러한 컴퓨터 명령어들은 프로세서에 의해 실행될 때, 프로세서로 하여금 본 개시물의 다양한 실시예들에 따라 위 방법의 단계들을 실행하게 한다.
컴퓨터 프로그램 제품은 하나 이상의 프로그래밍 언어들의 임의의 조합으로 본 개시물의 실시예들의 동작들을 실행하기 위한 프로그램 코드를 기입할 수 있고, 상기 프로그래밍 언어들은 JAVA, C++ 등과 같은 객체 지향 프로그래밍 언어들을 포함하며, "C" 언어와 같은 기존의 절차적 프로그래밍 언어들 또는 유사한 프로그래밍 언어들을 포함한다. 프로그램 코드는 사용자 컴퓨팅 장치에서 전적으로 실행될 수 있고, 사용자 장치에서 부분적으로 실행될 수 있으며, 독립형(stand-alone) 소프트웨어 패키지로서 실행되고, 사용자 컴퓨팅 장치에서 부분적으로 실행될 수 있으며, 원격 컴퓨팅 장치에서 부분적으로 실행될 수 있거나, 또는 원격 컴퓨팅 장치 또는 서버에서 전적으로 실행될 수 있다.
또한, 본 개시물의 실시예들은 저장된 컴퓨터 프로그램 명령어들을 가지는 컴퓨터 판독 가능한 저장 매체일 수도 있다. 컴퓨터 프로그램 명령어들은 프로세서 또는 제어기(예를 들면, AI 칩에서의 메인 프로세서 또는 제어기 또는 온-칩 저장 시스템에 대한 액세스 제어기)에 의해 실행될 때 프로세서 또는 제어기로 하여금 본 개시물의 다양한 실시예들에서의 위 방법의 단계들을 실행하게 한다.
컴퓨터 판독 가능한 저장 매체는 하나 이상의 판독 가능한 매체의 임의의 조합을 사용할 수 있다. 판독 가능한 매체는 판독 가능한 신호 매체 또는 판독 가능한 저장 매체일 수 있다. 컴퓨터 판독 가능한 저장 매체는 시스템, 장치, 또는 전기, 자기, 광학, 전자기, 적외선, 또는 반도체의 장치들, 또는 위의 것들의 임의의 조합을 포함할 수 있지만 이들에 제한되지는 않는다. 판독 가능한 저장 매체의 더 많은 예들(총망라되지 않은 목록)에는 하나 이상의 와이어들, 휴대 가능한 디스크들, 하드 디스크들, RAM(random access memory), ROM(read only memory), EPROM(erasable programmable read only memory)(또는 플래시 메모리), 광섬유들, 휴대 가능한 CD-ROM(compact disk read only memory), 광학 저장 장치들, 자기 저장 장치들과의 전기적 접속들, 또는 위의 것들의 임의의 적합한 조합을 포함한다.
본 개시물은 위에서 실시예들과 함께 설명되었다. 하지만, 본 개시물에서 언급된 장점, 우위, 및 효과 등은 예들일뿐 본 발명을 제한하려는 것이 아니며, 이들 장점, 우위, 효과 등은 본 개시물의 실시예에 본질적인 것으로 간주되지 않을 것이라는 점을 알게 된다. 게다가, 전술한 개시물의 세부 사항들은 오로지 예시와 이해를 용이하게 하기 위한 것이고 제한적이 아니며, 위 세부 사항들은 위에서 언급된 세부사항들에서 구현될 응용예를 제한하지 않는다.
본 개시물에서 언급된 디바이스들, 장치들, 장비들, 시스템들의 블록도들은 예시적인 예들이고 그 연결들, 배열들, 및 구성들이 그러한 블록도에서 도시된 방식으로 반드시 만들어져야 하는 것을 요구하거나 의미하도록 의도되지 않는다. 이들 디바이스들, 장치들, 장비들, 시스템들은 임의의 방식으로 연결, 배열, 또는 구성될 수 있다. "포함하는(including)", "포괄하는(comprising)", "가지는(having)" 등과 같은 용어들은 열린 단어(open word)들로서, "~을 포함하지만 그것에 제한되지 않는"이라는 것을 의미하고, 상호 교환 가능하게 사용될 수 있다. 본 명세서에서 사용된 바와 같은 "또는" 및 "그리고"와 같은 용어들은 "및/또는(and/or)"라는 용어를 지칭하고, 전후 관계가 명확히 다르게 지시하지 않는 한 상호 교환 가능하게 사용될 수 있다. 본 명세서에서 사용된 바와 같은 "~와 같은(such as)"이라는 용어는 "~와 같은 하지만 그것에 제한되지 않는"이라는 어구를 지칭하고 상호 교환 가능하게 사용된다.
"제1 " 및 "제2 "와 같은 수량사 없는 한정어들은 순서, 위치 관계, 중요도, 우선순위 등을 강조하기보다는 상이한 소자들, 구성요소들, 회로들, 모듈들, 장치들, 또는 단계들을 구분하기 위해 사용될 수 있다. 예를 들면, "제1 메모리(SRAM1)"는 또한 "제2 메모리(SRAM2)"라고 불릴 수 있고, "제2 메모리(SRAM2)"는 또한 "제1 메모리(SRAM2)"라고 불릴 수 있다. 예를 들면, "제3 행 어드레스"는 또한 "제1 행 어드레스"라고 불릴 수 있고, "제4 행 어드레스"는 또한 "제2 행 어드레스"라고 불릴 수 있는 등의 식이다. 다시 말해, "제1 " 및 "제2 "와 같은 수량사 없는 한정어들은 상호 교환 가능할 수 있다.
"첫 번째 것" 및 "두 번째 것"과 같은 수량사가 있는 한정어들은 상이한 소자들, 구성요소들, 회로들, 모듈들, 장치들, 또는 단계들의 순서, 위치 관계, 중요도, 우선순위 등을 강조하기 위해 사용될 수 있다. 예를 들면, "제1 이용 가능한 위치"는 이 위치가 이용 가능하지 않기 전의 위치들 모두를 의미할 수 있고, 다른 위치들과 비교하여 이 위치는 처음으로 이용가능하게 발견되거나, 이 위치는 저장 공간 또는 검색 순서에서의 헤드이다. 예를 들면, "제2 이용 가능한 위치"는 이 이용 가능한 위치 전의 하나의 이용 가능한 위치가 존재하는 것을 의미할 수 있다. 다시 말해, "첫 번째 것" 및 "두 번째 것"과 같은 수량사들이 없는 한정어들은 상호 교환 가능하지 않을 수 있다.
게다가, "1개 이상의"는 1개 또는 2개 또는 3개 또는 그 이상을 나타낼 수 있고, "2개 이상의"는 2개 또는 3개 또는 그 이상을 의미할 수 있다. 개별적으로 사용된 "복수의" 또는 "더 많은"은 "2개 이상" 또는 "2개보다 많은(above two)"을 나타낼 수 있다.
본 개시물의 장치들, 장비들, 및 방법들에서 각각의 구성요소 또는 단계가 분해 및/또는 재조합될 수 있다는 것을 또한 알게 된다. 이들 분해 및/또는 재조합은 본 개시물의 동등물로서 간주되어야 한다.
개시된 양태들의 위 설명은 응용예를 만들거나 사용하는 것을 가능하게 하기 위해 제공된다. 이들 양태들에 대한 다양한 수정예들이 만들어질 수 있다. 그러므로 본 개시물은 본 명세서에 도시된 양태들에 제한되도록 의도되는 것이 아니라 본 명세서에서 개시된 원리들과 새로운 특징들과 일치하는 가장 광범위한 범주를 제공하도록 의도된다.
위 설명은 예시 및 설명을 위해 제공되었다. 게다가, 이러한 설명은 본 개시물의 실시예들을 본 명세서에서 개시된 형태들에 제한하는 것으로 의도되지 않는다. 비록 다양한 예 양태들과 실시예들이 위에서 논의되었지만, 일부 변형예들, 수정예들, 대안예들, 추가예들 및 이들의 하위 조합(sub-combination)들이 인지될 수있다.
Claims (9)
- 텐서 데이터(tensor data)에 액세스하는 방법에 있어서:
제1 메모리에서 제1 행 어드레스를 결정하는 단계로서, 상기 텐서 데이터의 논리 구조에서 액세스될 하나 이상의 제1 데이터 항목들(first data items)은 상기 제1 메모리에서 상기 제1 행 어드레스에 저장되어 있는, 상기 결정하는 단계;
상기 제1 메모리에서의 상기 제1 행 어드레스에서의 데이터 항목들을 제1 버퍼의 제1 버퍼 행에 복사하는 단계;
상기 제1 버퍼의 상기 제1 버퍼 행에서의 각각의 제1 데이터 항목을 적어도 제2 버퍼의 제1 버퍼 행에서의 대응하는 위치로 이동시키는 단계로서, 적어도 각각의 제1 데이터 항목에 대한 상기 제2 버퍼의 상기 제1 버퍼 행에서의 상기 대응하는 위치는 상기 제1 데이터 항목에 할당되는 제2 메모리에서의 타겟 위치에 의존하는, 상기 이동시키는 단계; 및
상기 제2 버퍼의 상기 제1 버퍼 행에서의 데이터 항목들을 상기 제2 메모리에서의 대응하는 타겟 위치들로 저장시키는 단계를 포함하는, 텐서 데이터에 액세스하는 방법. - 제1 항에 있어서,
상기 제2 버퍼의 제2 버퍼 행이 적어도 하나의 제1 데이터 항목을 포함하는 경우에, 상기 제2 버퍼의 상기 제2 버퍼 행에서의 각각의 제1 데이터 항목을 상기 제2 메모리에서의 상기 대응하는 타겟 위치로 저장하는 단계를 더 포함하고,
상기 제1 메모리에서, 상기 제2 버퍼의 상기 제2 버퍼 행에서의 각각의 제1 데이터 항목은 상기 제2 버퍼의 상기 제1 버퍼 행에서의 각각의 제1 데이터 항목 이후에 위치하는, 텐서 데이터에 액세스하는 방법. - 제1 항에 있어서,
상기 텐서 데이터의 상기 논리 구조에서 액세스될 하나 이상의 제2 데이터 항목들이 저장되는 상기 제1 메모리에서의 제2 행 어드레스를 결정하는 단계;
상기 제1 메모리에서의 상기 제2 행 어드레스에서의 데이터 항목들을 상기 제1 버퍼의 제2 버퍼 행으로 복사하는 단계;
상기 제1 버퍼의 상기 제2 버퍼 행에서의 각각의 제2 데이터 항목을 적어도 상기 제2 버퍼의 제2 버퍼 행에서의 대응하는 위치로 이동시키는 단계로서, 적어도 각각의 제2 데이터 항목에 대한 상기 제2 버퍼의 상기 제2 버퍼 행에서의 상기 대응하는 위치는 상기 제2 데이터 항목에 할당되는 상기 제2 메모리에서의 타겟 위치에 의존하는(depending on), 상기 이동시키는 단계; 및
상기 제2 버퍼의 상기 제2 버퍼 행에서의 데이터 항목들을 상기 제2 메모리에서의 대응하는 타겟 위치들로 저장시키는 단계를 더 포함하는, 텐서 데이터에 액세스하는 방법. - 제3 항에 있어서,
상기 제2 버퍼의 상기 제1 버퍼 행이 적어도 하나의 제2 데이터 항목을 포함하는 경우에, 상기 제2 버퍼의 상기 제1 버퍼 행에서의 각각의 제2 데이터 항목을 상기 제2 메모리에서의 상기 대응하는 타겟 위치로 저장시키는 단계를 더 포함하고,
상기 제1 메모리에서, 상기 제2 버퍼의 상기 제1 버퍼 행에서의 각각의 제2 데이터 항목은 상기 제2 버퍼의 상기 제2 버퍼 행에서의 각각의 제2 데이터 항목 이후에 위치하는, 텐서 데이터에 액세스하는 방법. - 제3 항에 있어서,
상기 제1 버퍼의 상기 제2 버퍼 행에서의 각각의 제2 데이터 항목을 적어도 상기 제2 버퍼의 제2 버퍼 행에서의 대응하는 위치로 이동시키는 상기 단계는:
상기 제2 버퍼의 상기 제1 버퍼 행에서의 데이터 항목들을 저장하는 단계와 병렬로(in parallel with) 또는 상기 제2 버퍼의 상기 제1 버퍼 행에서의 데이터 항목들을 저장하는 단계 이후에, 상기 제1 버퍼의 상기 제2 버퍼 행에서의 각각의 제2 데이터 항목을 적어도 상기 제2 버퍼의 상기 제2 버퍼 행에서의 상기 대응하는 위치로 이동시키는 단계를 포함하는, 텐서 데이터에 액세스하는 방법. - 제1 항 내지 제5 항 중 어느 한 항에 있어서,
상기 텐서 데이터에 액세스하기 위한 명령어(instruction)를 수신하는 단계; 및
상기 명령어를 분석함으로써, 상기 논리 구조에서 액세스될 데이터 항목들, 상기 제1 행 어드레스, 및 상기 논리 구조에서 액세스될 상기 데이터 항목들의 상기 제2 메모리에서의 타겟 위치들 중 하나 이상을 결정하는 단계를 더 포함하는, 텐서 데이터에 액세스하는 방법. - 텐서 데이터에 액세스하는 장치에 있어서:
제1 버퍼;
제2 버퍼; 및
제1 메모리, 제2 메모리, 상기 제1 버퍼, 및 상기 제2 버퍼에 결합되어 있는 제어기를 포함하고,
상기 제어기는 제1 메모리에서 제1 행 어드레스를 결정하는 단계로서, 상기 텐서 데이터의 논리 구조에서 액세스될 하나 이상의 제1 데이터 항목들은 상기 제1 메모리에서 상기 제1 행 어드레스에 저장되어 있는, 상기 결정하는 단계;
상기 제1 메모리에서의 상기 제1 행 어드레스에서의 데이터 항목들을 제1 버퍼의 제1 버퍼 행에 복사하는 단계;
상기 제1 버퍼의 상기 제1 버퍼 행에서의 각각의 제1 데이터 항목을 적어도 제2 버퍼의 제1 버퍼 행에서의 대응하는 위치로 이동시키는 단계로서, 적어도 각각의 제1 데이터 항목에 대한 상기 제2 버퍼의 상기 제1 버퍼 행에서의 상기 대응하는 위치는 상기 제1 데이터 항목에 할당되는 제2 메모리에서의 타겟 위치에 의존하는, 상기 이동시키는 단계; 및
상기 제2 버퍼의 상기 제1 버퍼 행에서의 데이터 항목들을 상기 제2 메모리에서의 대응하는 타겟 위치들로 저장시키는 단계를 수행하도록 구성되어 있는, 텐서 데이터에 액세스하는 장치. - 제7 항에 있어서,
상기 제1 버퍼의 각각의 버퍼 행의 용량은 상기 제1 메모리에서의 동일한 행 어드레스를 갖는 복수의 저장 유닛들의 총 용량과 동일하고, 상기 제2 버퍼의 각각의 버퍼 행의 용량은 상기 제2 메모리에서의 동일한 행 어드레스를 갖는 복수의 저장 유닛들의 총 용량과 동일한, 텐서 데이터에 액세스하는 장치. - 제8 항에 있어서,
상기 제1 버퍼와 상기 제2 버퍼 모두 버퍼 행들에 의해 순환적으로 어드레스되는, 텐서 데이터에 액세스하는 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811541065.1A CN111324294B (zh) | 2018-12-17 | 2018-12-17 | 存取张量数据的方法和装置 |
CN201811541065.1 | 2018-12-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200075769A KR20200075769A (ko) | 2020-06-26 |
KR102397100B1 true KR102397100B1 (ko) | 2022-05-11 |
Family
ID=68917584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190168867A KR102397100B1 (ko) | 2018-12-17 | 2019-12-17 | 텐서 데이터를 액세스하는 방법 및 장치 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11163686B2 (ko) |
EP (1) | EP3671424A1 (ko) |
JP (1) | JP7008983B2 (ko) |
KR (1) | KR102397100B1 (ko) |
CN (1) | CN111324294B (ko) |
TW (1) | TWI743627B (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111767508B (zh) * | 2020-07-09 | 2024-02-23 | 地平线(上海)人工智能技术有限公司 | 计算机实现张量数据计算的方法、装置、介质和设备 |
CN113485762B (zh) * | 2020-09-19 | 2024-07-26 | 广东高云半导体科技股份有限公司 | 用可配置器件卸载计算任务以提高系统性能的方法和装置 |
US20220188631A1 (en) * | 2020-12-16 | 2022-06-16 | Xmos Inc. | Artificial neural network implementation |
CN116127259B (zh) * | 2021-01-13 | 2024-07-30 | 华为技术有限公司 | 张量处理方法、装置、设备及计算机可读存储介质 |
CN112988238A (zh) * | 2021-05-06 | 2021-06-18 | 成都启英泰伦科技有限公司 | 一种基于可扩展指令集cpu内核的扩展运算装置及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258811A1 (en) | 2013-03-11 | 2014-09-11 | Macronix International Co., Ltd. | Storage scheme for built-in ecc operations |
WO2018093556A1 (en) | 2016-11-18 | 2018-05-24 | Microsoft Technology Licensing, Llc | Faster data transfer with remote direct memory access communications |
US20180150542A1 (en) | 2016-11-28 | 2018-05-31 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7167962B2 (en) * | 1999-08-19 | 2007-01-23 | Hitachi, Ltd. | Remote copy for a storage controller with reduced data size |
US6643755B2 (en) * | 2001-02-20 | 2003-11-04 | Koninklijke Philips Electronics N.V. | Cyclically sequential memory prefetch |
US20030041214A1 (en) * | 2001-07-27 | 2003-02-27 | Fujitsu Limited | Cache control methods and apparatus for hard disk drives |
JP4901316B2 (ja) * | 2006-06-06 | 2012-03-21 | 株式会社日立製作所 | ストレージシステム及び記憶制御装置 |
US8255562B2 (en) * | 2008-06-30 | 2012-08-28 | International Business Machines Corporation | Adaptive data throttling for storage controllers |
US20100281192A1 (en) * | 2009-04-30 | 2010-11-04 | Novafora, Inc. | Apparatus and method for transferring data within a data processing system |
US8761206B1 (en) * | 2011-03-24 | 2014-06-24 | Marvell International Ltd. | Universal packer |
US20140181171A1 (en) * | 2012-12-24 | 2014-06-26 | Pavel Dourbal | Method and system for fast tensor-vector multiplication |
US9524164B2 (en) * | 2013-08-30 | 2016-12-20 | Advanced Micro Devices, Inc. | Specialized memory disambiguation mechanisms for different memory read access types |
US9612971B2 (en) * | 2014-08-19 | 2017-04-04 | Qualcomm Incorporated | Supplemental write cache command for bandwidth compression |
US9875104B2 (en) * | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10817802B2 (en) * | 2016-05-07 | 2020-10-27 | Intel Corporation | Apparatus for hardware accelerated machine learning |
JP2018005655A (ja) * | 2016-07-05 | 2018-01-11 | 富士通株式会社 | メモリコントローラおよびメモリアクセス方法 |
CN107783916B (zh) * | 2016-08-26 | 2020-01-31 | 深圳大心电子科技有限公司 | 数据传输方法、存储控制器与清单管理电路 |
US10175912B1 (en) * | 2017-07-05 | 2019-01-08 | Google Llc | Hardware double buffering using a special purpose computational unit |
US10042785B1 (en) * | 2017-08-29 | 2018-08-07 | Seagate Technology Llc | Storage drive with multiple controllers having interconnected buffer managers |
US20190130291A1 (en) * | 2017-10-27 | 2019-05-02 | Wave Computing, Inc. | Dynamic reconfiguration with partially resident agents |
US10346093B1 (en) * | 2018-03-16 | 2019-07-09 | Xilinx, Inc. | Memory arrangement for tensor data |
US11132124B2 (en) * | 2018-06-12 | 2021-09-28 | Intel Corporation | Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle |
US10956315B2 (en) * | 2018-07-24 | 2021-03-23 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access |
-
2018
- 2018-12-17 CN CN201811541065.1A patent/CN111324294B/zh active Active
-
2019
- 2019-12-16 EP EP19216498.6A patent/EP3671424A1/en not_active Withdrawn
- 2019-12-16 JP JP2019226595A patent/JP7008983B2/ja active Active
- 2019-12-16 US US16/715,127 patent/US11163686B2/en active Active
- 2019-12-17 KR KR1020190168867A patent/KR102397100B1/ko active IP Right Grant
- 2019-12-17 TW TW108146284A patent/TWI743627B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258811A1 (en) | 2013-03-11 | 2014-09-11 | Macronix International Co., Ltd. | Storage scheme for built-in ecc operations |
WO2018093556A1 (en) | 2016-11-18 | 2018-05-24 | Microsoft Technology Licensing, Llc | Faster data transfer with remote direct memory access communications |
US20180150542A1 (en) | 2016-11-28 | 2018-05-31 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
Also Published As
Publication number | Publication date |
---|---|
KR20200075769A (ko) | 2020-06-26 |
EP3671424A1 (en) | 2020-06-24 |
CN111324294A (zh) | 2020-06-23 |
JP7008983B2 (ja) | 2022-01-25 |
JP2020098602A (ja) | 2020-06-25 |
CN111324294B (zh) | 2023-11-07 |
TW202024922A (zh) | 2020-07-01 |
US11163686B2 (en) | 2021-11-02 |
US20200192803A1 (en) | 2020-06-18 |
TWI743627B (zh) | 2021-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102397100B1 (ko) | 텐서 데이터를 액세스하는 방법 및 장치 | |
US10235398B2 (en) | Processor and data gathering method | |
US11294599B1 (en) | Registers for restricted memory | |
CN113139648B (zh) | 执行神经网络模型的pim架构的数据布局优化 | |
KR20200098684A (ko) | 행렬 곱셈기 | |
US11853866B2 (en) | Implementation of a neural network in multicore hardware | |
JP7179853B2 (ja) | オンチップの計算ネットワーク | |
US20210241095A1 (en) | Deep learning processing apparatus and method, device and storage medium | |
US11579921B2 (en) | Method and system for performing parallel computations to generate multiple output feature maps | |
CN110991619A (zh) | 神经网络处理器、芯片和电子设备 | |
GB2599909A (en) | Implementation of a neural network in multicore hardware | |
WO2022047422A1 (en) | Inter-layer communication techniques for memory processing unit architectures | |
CN111047036A (zh) | 神经网络处理器、芯片和电子设备 | |
CN109472355B (zh) | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 | |
CN113077042B (zh) | 卷积神经网络的数据重用与高效处理方法 | |
CN112631955A (zh) | 数据处理方法、装置、电子设备以及介质 | |
US11755892B2 (en) | Multi-size convolutional layer | |
CN111047035A (zh) | 神经网络处理器、芯片和电子设备 | |
US20150243259A1 (en) | Method and apparatus for transferring data in a computer | |
US11734549B2 (en) | Avoiding data routing conflicts in a machine learning accelerator | |
US20210357730A1 (en) | Multi-size convolutional layer background | |
CN116360672A (zh) | 访问存储器的方法、装置和电子设备 | |
US11500632B2 (en) | Processor device for executing SIMD instructions | |
CN112906877A (zh) | 用于执行神经网络模型的存储器架构中的数据布局有意识处理 | |
KR102034662B1 (ko) | 병렬 연산을 수행하는 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |