KR102202575B1 - 메모리 관리 방법 및 장치 - Google Patents
메모리 관리 방법 및 장치 Download PDFInfo
- Publication number
- KR102202575B1 KR102202575B1 KR1020130168833A KR20130168833A KR102202575B1 KR 102202575 B1 KR102202575 B1 KR 102202575B1 KR 1020130168833 A KR1020130168833 A KR 1020130168833A KR 20130168833 A KR20130168833 A KR 20130168833A KR 102202575 B1 KR102202575 B1 KR 102202575B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- bank
- stride
- address
- cache
- 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0851—Cache with interleaved addressing
-
- 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
-
- 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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- 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/0877—Cache access modes
- G06F12/0886—Variable-length word access
-
- 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/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/621—Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
-
- 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 Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
일 실시 예에 따른 메모리 관리 방법은 2차원 데이터의 크기를 참조하여 스트라이드 액세스(stride access)를 위한 스트라이드 값을 결정하고, 결정된 스트라이드 값에 따라 2차원 데이터의 수직 방향으로 인접한 데이터를 서로 다른 뱅크에 할당함으로써, 큰 데이터 폭을 갖는 메모리를 사용하여 수직 방향의 데이터를 효율적으로 액세스할 수 있다.
Description
개시된 실시 예들은 메모리 관리 방법 및 장치에 관한 것이다.
최근 들어 정보통신기술이 발달함에 따라 스마트폰(smart phone), 디지털 카메라(digital camera), 디지털 티브이(digital TV) 등과 같은 다양한 컴퓨터 시스템이 등장하게 되었다. 또한, 이러한 컴퓨터 시스템을 효율적으로 이용하고자 하는 사용자의 요구에 따라 컴퓨터 시스템에는 고속의 프로세서(processor)가 탑재되기에 이르렀다. 컴퓨터 시스템에 고속의 프로세서가 탑재되면, 그 고속의 성능을 지원하기 위한 고속의 메모리 컨트롤러 역시 요구된다.
통상적으로, 메모리 컨트롤러는 메모리 접근 요청(예컨대, 메모리에 저장된 데이터의 판독 요구 또는 메모리로의 데이터 기록 요구 등)을 컴퓨터 시스템 내의 각종 처리 유니트(예컨대, 중앙처리장치(CPU), 그래픽 가속기 등)로부터 수신하고, 수신된 메모리 접근 요청을 처리한다. 예를 들어, 메모리 컨트롤러는 CPU로부터 데이터 로드 요청을 수신하고, 수신된 데이터 로드 요청에 따라 메모리로부터 데이터를 읽고, 읽어진 데이터를 프로세서로 리턴(return)할 수 있다.
개시된 일 실시 예는 큰 데이터 폭을 갖는 메모리를 사용하여 수직 방향의 데이터를 효율적으로 액세스할 수 있는 메모리 관리 방법을 제공하는 것이다.
개시된 다른 실시 예는 큰 데이터 폭을 갖는 메모리를 사용함에 있어서 발생할 수 있는 전력 소비의 비효율성을 줄일 수 있는 메모리 관리 방법을 제공하는 것이다.
일 실시 예에 따른 메모리 관리 방법은 2차원 데이터의 크기를 참조하여 스트라이드 액세스(stride access)를 위한 스트라이드 값을 결정하는 단계; 및 상기 결정된 스트라이드 값에 따라 상기 2차원 데이터2차원 데이터의 수직 방향으로 인접한 데이터를 서로 다른 뱅크에 할당하는 단계를 포함한다.
다른 실시 예에 따른 메모리 관리 방법은 서로 다른 뱅크에 저장된 인접한 데이터에 대한 스트라이드 액세스 요청을 수신하는 단계; 상기 수신된 스트라이드 액세스 요청에 상응하는 뱅크 어드레스에 따라 각각의 뱅크로부터 수직 방향으로 인접한 데이터를 로딩하는 단계; 및 상기 로딩된 데이터를 출력하면서, 상기 뱅크 어드레스에 상응하는 뱅크들에 저장된 데이터를 캐시(cache)에 저장하는 단계를 포함한다.
또 다른 실시 예에 따른 뱅크들로 구성된 메모리의 데이터를 관리하는 메모리 관리 장치는 2차원 데이터의 크기를 참조하여 스트라이드 액세스(stride access)를 위한 스트라이드 값을 결정하고, 상기 결정된 스트라이드 값에 따라 상기 2차원 데이터의 수직 방향으로 인접한 데이터를 서로 다른 뱅크에 할당한다.
또 다른 실시 예에 따른 상기 메모리 관리 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체를 포함한다.
일 실시 예에 따른 메모리 관리 방법은 큰 데이터 폭을 갖는 메모리를 사용하여 수직 방향의 데이터를 효율적으로 액세스할 수 있고, 전력 소비의 비효율성을 줄일 수 있다.
도 1은 8×8 2차원 데이터의 예시 도이다.
도 2는 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 예시 도이다.
도 3은 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 다른 예시 도이다.
도 4는 일 실시 예에 따른 스트라이드 액세스하기 위한 8×8 2차원 데이터의 예시 도이다.
도 5는 일 실시 예에 따른 8×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 6은 다른 실시 예에 따른 스트라이드 액세스하기 위한 16×8 2차원 데이터의 예시 도이다.
도 7과 8은 다른 실시 예에 따른 16×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 9는 일 실시 예에 따른 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 10은 다른 실시 예에 따른 캐시를 포함한 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 11은 일 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
도 12는 다른 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
도 2는 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 예시 도이다.
도 3은 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 다른 예시 도이다.
도 4는 일 실시 예에 따른 스트라이드 액세스하기 위한 8×8 2차원 데이터의 예시 도이다.
도 5는 일 실시 예에 따른 8×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 6은 다른 실시 예에 따른 스트라이드 액세스하기 위한 16×8 2차원 데이터의 예시 도이다.
도 7과 8은 다른 실시 예에 따른 16×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 9는 일 실시 예에 따른 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 10은 다른 실시 예에 따른 캐시를 포함한 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 11은 일 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
도 12는 다른 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
본 실시 예들은 다양한 변환을 가할 수 있고 여러 가지 실시 예를 가질 수 있는바, 특정 실시 예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나 이는 특정한 실시 형태에 대해 범위를 한정하려는 것이 아니며, 개시된 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 실시 예들을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 구성요소들은 용어들에 의해 한정되어서는 안 된다. 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 권리범위를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
이하, 실시 예를 첨부도면을 참조하여 상세히 설명하기로 하며, 첨부 도면을 참조하여 설명함에 있어, 동일하거나 대응하는 구성 요소는 동일한 도면번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 8×8 2차원 데이터의 예시 도이다. 도 2는 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 예시 도이다. 도 3은 도 1에 도시된 8×8 2차원 데이터를 스트라이드 액세스하기 위한 뱅크의 다른 예시 도이다. 도 1 내지 3을 참조하여, 스트라이드 액세스에 대해 설명한다.
많은 영상 알고리즘에서 영상의 데이터 처리 시, 가로 방향 또는 세로 방향으로 처리를 요구한다. 또한, 그러한 영상 처리를 빠르게 하기 위한 방안으로 벡터 프로세싱(vector processing)을 사용한다. 여러 개의 데이터가 동일한 연산을 수행(Single Instruction Multiple Data, SIMD)하는 경우 벡터 프로세싱을 사용하여 시스템의 성능을 향상시킬 수 있다.
도 1을 참조하면, 8×8 2차원 데이터(100)에 대해 가로 방향으로 알고리즘을 수행하는 경우, 도 1에 도시된 첫 번째 컬럼(110), 두 번째 컬럼(120) 내에 존재하는 데이터는 행(row) 위치만 다를 뿐 동일한 연산을 수행하게 된다. 따라서 벡터 프로세싱을 사용하여 이러한 데이터들(예를 들면 첫 번째 컬럼(110)의 데이터, (0,0), (1,0), (2,0), (3,0), (4,0), (5,0), (6,0) 및 (7,0))을 동시에 처리하게 된다. 이때에는 처리할 컬럼의 데이터를 한 번에 읽어오기 위해 불연속적으로 메모리에 저장되어 있는 수직(vertical) 방향의 데이터를 읽는 기능이 필요하다. 이렇게 수직 방향으로 데이터를 읽는 기능을 스트라이드 액세스(stride access)라고 하기도 하며, 메모리에 불연속적으로 저장된 수직 방향의 데이터를 한 번에 읽기 위해서 다양한 방법들이 사용되며, 대표적으로 동일한 컬럼에 존재하는 데이터를 서로 다른 메모리(뱅크)에 할당하는 방법을 사용한다. 여기서, 데이터는 영상 데이터일 수 있으며, 메모리에 2차원으로 저장될 수 있다. 또한, 2차원 데이터는 영상 데이터에 한정되지 않고, 프로세서에서 처리되어야 하는 다양한 형태의 데이터일 수 있음은 물론이다. 데이터가 영상 데이터인 경우, (0,0), (1,0), (2,0), (3,0) 등 각각의 위치에 해당하는 데이터는 픽셀 데이터일 수 있다.
도 2에 도시된 것처럼, 데이터의 비트 폭과 일치하는 메모리를 사용하여 뱅크를 구성할 수 있다. 도 1에 도시된 8×8 2차원 데이터(100)의 첫 번째 수직 방향의 데이터 8개(도면번호 110)를 뱅크 0 내지 뱅크 7에 각각 하나씩 저장한다. 두 번째 수직 방향의 데이터 8개(도면번호 120)를 뱅크 1 내지 뱅크 8에 각각 하나씩 저장한다. 이러한 방식으로 8개의 컬럼의 데이터를 서로 다른 뱅크에 저장한다. 따라서, 수직 방향으로 인접한 데이터들(예를 들면 (0,0)과 (1,0))이 서로 다른 뱅크(뱅크 0과 뱅크 1)에 저장될 수 있다. 따라서, 뱅크 어드레스 0 내지 7을 통해, 수직 방향으로 인접한 데이터((0,0) 내지 (7,0))를 뱅크 0 내지 7로부터 한 번에 로드할 있다. 이러한 방식의 메모리 시스템의 경우, 데이터의 비트 폭(bit width)에 따라 1 내지 2 바이트 정도의 데이터 폭(data width)을 갖는 뱅크들을 모아 메모리 시스템을 구성하게 된다. 도 2에 도시된 뱅크들은 비트 폭이 작아, 많은 메모리 모듈(뱅크)이 필요하게 된다. 하지만, 같은 데이터 메모리 용량을 갖더라도 뱅크의 수가 많아지면 면적(area) 효율이 떨어지게 되어 사이즈가 커지게 된다.
도 3을 참조하면, 전술한 면적 효율을 위해 큰 데이터 폭(data width)을 갖는 뱅크를 사용하는 경우, 도 2에 도시된 예시와는 다르게 적은 개수의 뱅크(도 2에 도시된 예시에서는 뱅크 64개를 사용하지만, 도 3에 도시된 예시에서는 뱅크 16개를 사용함)를 사용하여 시스템을 구성할 수 있다. 따라서, 도 2에 도시된 예시와 비교하여, 메모리 전체의 사이즈는 작아지게 된다. 하지만, 뱅크 자체의 비트 폭은 커졌기 때문에 뱅크에 액세스할 때의 전력 소비는 커지게 된다. 또한, 하나의 뱅크 당 4개의 데이터가 존재하므로 4개의 열을 메모리로부터 동시에 읽을 수 있지만, 데이터지정 레지스터(destination register)에 한 번에 하나의 열만 저장할 수 있다. 따라서 도 3에 도시된 컬럼 0 내지 3에 해당하는 데이터((0,0) 내지 (0,3)로 시작)를 읽기 위해서 매번 메모리에 액세스해야 하기 때문에 전력 소비는 더욱 커지게 된다. 후술하는 방법으로 스트라이드 액세스 시(수직 방향의 데이터를 로드할 경우), 큰 데이터 폭을 갖는 뱅크를 사용함에 있어서 발생할 수 있는 전력 소비의 비효율성을 제거할 수 있다. 이를 위해 메모리 데이터를 저장하는 레지스터 타입의 캐시를 사용하여 메모리 액세스 횟수를 줄이는 것이다. 메모리 액세스가 줄어들게 되면, 프로세서의 서로 다른 로드/스토어 유닛이 동일한 뱅크를 액세스하는 뱅크 충돌(bank conflict)이 줄어들게 되므로 전체 성능을 향상시킬 수 있다. 또한, 큰 데이터 폭을 갖는 메모리를 사용하여 수직 방향의 데이터를 읽을 수 있는 메모리 관리 방법을 제공한다. 메모리를 효율적으로 사용하기 위해, 2차원 데이터의 사이즈에 따라 인접하는 데이터들이 저장되는 뱅크들 간의 거리인 저장 간격을 결정하는 방법을 제공한다.
도 4는 일 실시 예에 따른 스트라이드 액세스하기 위한 8×8 2차원 데이터의 예시 도이다.
도 4를 참조하면, 8×8 2차원 데이터(400)과, 2차원 데이터의 첫 번째 컬럼(410)의 데이터들이 도시되어 있다. 첫 번째 컬럼(410)의 데이터는 (0,0) 내지 (7,0)이다. 여기서, 첫 번째 컬럼(410)의 데이터들은 수직 방향으로 인접한 데이터로 구성되며, 프로세서에 의해 벡터 프로세싱이 수행될 때 동일한 연산이 수행되는 데이터일 수 있다. 데이터 또한, 2차원 데이터(400)의 사이즈가 8×8로 도시되어 있지만, 이에 한정되지 않고, 16×16, 64×64 등 다양한 크기일 수 있음은 물론이다.
도 5는 일 실시 예에 따른 8×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 5를 참조하면, 8개의 뱅크(B0 내지 B7)가 도시되어 있다. 뱅크의 개수는 2N을 만족해야 하고(N은 자연수) 한 번에 읽을 수 있는 최대 수직 방향의 데이터의 수와 뱅크의 수는 동일할 수 있다. 도 4에 도시된 것처럼, 스트라이드 액세스를 위해, 최대 수직 방향의 데이터의 수는 8개((0,0) 내지 7,0))이다. 따라서, 이를 위해 필요한 뱅크의 수는 8개(B0 내지 B7)이다. 뱅크가 2n (n은 2, 3, 4...)의 데이터를 저장할 수 있는 데이터 폭을 갖는다고 할 때, 한 번에 수직 방향의 데이터를 로드하기 위해서는 수직 방향의 데이터가 모두가 서로 다른 뱅크에 할당되어야 한다. 스트라이드 값은 다음 수학식 1과 같이 정의될 수 있다.
[수학식 1]
스트라이드(stride) 값 = a * 2n (a는 양의 홀수)
여기서, 스트라이드 값은 다음 수학식 2의 조건을 만족하도록 결정된다.
[수학식 2]
스트라이드 값 = a * 2n ≥2차원 데이터의 컬럼의 개수
여기서, 상기 a는 양의 최소 홀수, 상기 2n 은 뱅크 폭이고, n은 자연수이다.
스트라이드 값은 동일한 컬럼에서 이전 행과 다음 행에 위치하는 데이터 사이의 거리가 된다. 도 4에 도시된 동일한 컬럼(410)에서, 수직 방향으로 인접한 데이터, 예를 들어 (0,0)과 (1,0) 사이의 거리이다. 예를 들면, 뱅크가 23 = 8개 데이터를 저장할 수 있는 데이터 폭을 갖는다고 하면 스트라이드 값은 a * 8 (a는 홀수)을 만족하도록 하면 된다. 따라서, 도 4에 도시된 2차원 데이터는 8개 컬럼으로 이루어져 있으므로 상기 수학식 2에서, a를 1로 선택하여 스트라이드 값이 8이 되도록 저장한다. 따라서, 도 5에 도시된 것처럼, 뱅크 0에는 데이터((0,0) 내지 (0,7))가 할당되고, 스트라이드 값인 8만큼 차이를 두고, 뱅크 1에는 데이터((1,0) 내지 (1,7))가 할당되고, 뱅크 2에는 데이터((2,0) 내지 (2,7))가 할당된다. 따라서, 벡터 프로세싱을 위한 수직 방향의 인접한 데이터((0,0) 내지 (7.0))가 서로 다른 뱅크들(B0 내지 B7)에 할당된다. 프로세서가 벡터 프로세싱을 수행할 때, 필요한 수직 방향의 데이터((0.0) 내지 7,0))를 뱅크 어드레스(bank addr 0)로서, 뱅크 0 내지 7에 한 번에 액세스하여, 필요한 데이터를 모두 로드할 수 있다. 또한, 프로세서에서 영상 처리에 필요한 데이터의 로드뿐만 아니라, 영상 처리 후 데이터를 다시 메모리에 저장하는 경우에도 동일하게 한 번에 액세스 가능하다.
도 6은 다른 실시 예에 따른 스트라이드 액세스하기 위한 16×8 2차원 데이터의 예시 도이고, 도 7 및 8은 다른 실시 예에 따른 16×8 2차원 데이터에 대한 스트라이드 값을 결정하는 방법을 설명하기 위한 예시 도이다.
도 6을 참조하면, 16×8 2차원 데이터(600)에서, 첫 번째 컬럼(610)과 아홉 번째 컬럼(620)이 도시되어 있다. 첫 번째 컬럼(610)의 데이터는 (0,0) 내지 (7,0)이고, 아홉 번째 컬럼(620)의 데이터는 (0,8) 내지 (7,8)이다. 상기 수학식 1 및 2에 따라, 뱅크의 개수는 한 번에 읽을 수 있는 최대 수직 방향의 데이터의 수인 8개이므로, 뱅크의 개수는 8(B0 내지 B7)이다.
도 6에 도시된 것처럼, 16개의 컬럼으로 구성된 2차원 데이터이므로, 상기 수학식 2를 적용하면, a×8≥16을 만족해야 한다. 따라서, 이 조건을 만족하는 최소의 홀수 a값은 3이 되므로 스트라이드 값은 24가 된다. 따라서, 9 내지 24 컬럼의 크기를 갖는 2차원 데이터를 메모리 뱅크에 저장하는 경우, 상기 수학식 2를 만족하는 홀수 a 값은 3이 되어야 하므로 스트라이드 값은 24가 된다. 상기 수학식 1 및 2에 따른 스트라이드 값의 결정은 다음 표 1과 같이 나타낼 수 있다.
표 1을 참조하면, 2차원 데이터의 컬럼 사이즈가 1 내지 8인 경우에는 스트라이드 값은 8로 결정되고, 2차원 데이터의 컬럼 사이즈가 9 내지 24인 경우에는 스트라이드 값은 24로 결정된다. 따라서, 스트라이드 액세스를 통해 처리되어야 할 또는 처리된 데이터를 메모리로부터 로드 또는 저장하는 경우에, 2차원 데이터의 사이즈에 따라 결정되는 스트라이드 값에 따라 서로 다른 뱅크들에 각각 할당함으로써, 동시에 또는 한 번에 메모리로부터 로드 또는 저장이 가능하다.
수학식 1 및 2, 또는 표 1을 참조하여 결정된 스트라이드 값 24에 따라 뱅크들(B0 내지 B7)에 저장한 결과는 도 7에 도시된 바와 같다. 여기서, 2차원 데이터의 행의 개수는 스트라이드 값을 결정하는 데 무관하다.
도 7을 참조하면, 제1 행의 데이터((0,0) 내지 (0,7))는 뱅크 0(B0)에 할당되고, 스트라이드 값 24에 따라 데이터 폭이 8인 2개의 뱅크를 건너뛰어, 제2 행의 데이터((1,0) 내지 (1,7))는 뱅크 3(B3)에 할당된다. 스트라이드 값 24는 첫 번째 데이터(0,0)와 첫 번째 데이터(0,0)와 수직 방향으로 인접한 데이터(1,0) 사이의 데이터 폭이다. 따라서, 첫 번째 데이터(0,0)가 뱅크 0(B0)의 처음 위치에 할당되고, 데이터(1,0)가 뱅크 3(B3)의 처음 위치에 할당되므로, 인접한 데이터가 스트라이드 값 24만큼 떨어져 저장되고, 서로 다른 뱅크(B0 및 B3)에 할당된다. 계속해서, 제3 행의 데이터((2.0) 내지 (2,7))는 뱅크 6(B6)에 할당되고, 제4 행의 데이터((3,0) 내지 (3,7))는 뱅크 6(B6)으로부터 스트라이드 값 24를 건너뛰어 뱅크 1(B1)에 할당되고, 제5 행의 데이터((4,0) 내지 (4,7))는 뱅크 4(B4)에 할당되고, 제6 행의 데이터((5,0) 내지 (5,7))는 뱅크 7(B7)에 할당되고, 다시 제7 행의 데이터((6,0) 내지 (6,7))는 뱅크 2(B2)에 할당되고, 제8 행의 데이터((7,0) 내지 (7,7))는 뱅크 5(B5)에 할당된다. 이러한 방식으로, 도 6에 도시된 첫 번째 컬럼(610)의 데이터((0,0) 내지 (7,0))가 모두 서로 다른 뱅크들(B0 내지 B7)에 할당된다. 따라서, 프로세서는 수직 방향으로 인접한 데이터((0,0) 내지 (7,0))에 대한 벡터 프로세싱이 필요한 경우, 뱅크 어드레스(addr 0, addr 1, addr 2)를 통해 메모리에 액세스하여, 필요한 데이터((0,0) 내지 (7,0))를 동시에 또는 한 번에 로드하거나 저장할 수 있다. 이러한 메모리 관리 방법은 스트라이드 액세스에 따른 수직 방향으로 인접한 데이터들을 서로 다른 메모리의 뱅크들에 저장함으로써, 한 번에 읽을 수 있는 기능을 유지하면서, 메모리 공간을 효율적으로 사용할 수 있다. 또한, 큰 데이터 폭을 갖는 뱅크를 사용할 수 있게 함으로써 뱅크의 개수를 줄일 수 있어서, 면적 효율을 높일 수 있다.
도 8을 참조하면, 도 6에 도시된 아홉 번째 컬럼(620)의 데이터((0,8) 내지 (7,8))가 뱅크에 각각 할당되어 있다. 제1 행의 데이터((0,8) 내지 (0,15))는 뱅크 1(B1)에 할당되고, 스트라이드 값 24에 따라 데이터 폭이 8인 2개의 뱅크를 건너뛰어, 제2 행의 데이터((1,8) 내지 (1,15))는 뱅크 4(B4)에 할당된다. 스트라이드 값 24는 첫 번째 데이터(0,8)와 첫 번째 데이터(0,8)와 수직 방향으로 인접한 데이터(1,8) 사이의 데이터 폭이다. 계속해서, 제3 행의 데이터((2.8) 내지 (2,15))는 뱅크 7(B7)에 할당되고, 제4 행의 데이터((3,8) 내지 (3,15))는 뱅크 2(B2)에 할당되고, 제5 행의 데이터((4,8) 내지 (4,15))는 뱅크 5(B5)에 할당되고, 제6 행의 데이터((5,8) 내지 (5,15))는 뱅크 0(B0)에 할당되고, 다시 제7 행의 데이터((6,8) 내지 (6,15))는 뱅크 3(B3)에 할당되고, 제8 행의 데이터((7,8) 내지 (7,15))는 뱅크 6(B6)에 할당된다. 이러한 방식으로, 도 8에 도시된 여덟 번째 컬럼(620)의 데이터((0,8) 내지 (7,15))가 모두 서로 다른 뱅크들(B0 내지 B7)에 각각 할당된다. 따라서, 프로세서는 수직 방향으로 인접한 데이터((0,8) 내지 (7,15))에 대한 벡터 프로세싱이 필요한 경우, 뱅크 어드레스(addr 0, addr 1, addr 2)를 통해 메모리에 액세스하여, 필요한 데이터((0,8) 내지 (7,8))를 동시에 또는 한 번에 로드하거나 저장할 수 있다.
도 9는 실시 예에 따른 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 9를 참조하면, 어드레스 오프셋 생성기(910), 제0 내지 제7 뱅크를 포함하는 메모리(920)와 메모리(920)로부터 로드된 데이터를 재배열하는 재배열부(930)과 캐시(940)가 도시되어 있다.
도 6 내지 8에 도시된 바와 같이 로드하는 컬럼의 위치에 따라 뱅크별 어드레스가 달라진다. 도 7과 8에 도시된 것처럼, 데이터(0,0)는 뱅크 0(B0)에 할당되고 있고, 데이터(0,8)는 뱅크 1(B1)에 할당되어 있다. 액세스하는 첫 번째 데이터의 위치는 뱅크가 8개이므로 8가지 경우의 수가 존재하게 된다. 그때마다 각각의 뱅크의 어드레스가 달라진다.
어드레스 오프셋 생성기(910)는 각각의 뱅크 어드레스를 생성하기 위해서, 첫 번째 데이터의 뱅크와 스트라이드 값에 따른 오프셋 값을 생성한다. 그 오프셋 값을 시작 뱅크의 뱅크 어드레스인 베이스 어드레스에 더해서 각각의 뱅크별 어드레스를 계산한다.
도 7을 다시 참조하면, 첫 번째 데이터가 할당된 뱅크가 뱅크 0(B0)이고, 뱅크 0(B0)의 뱅크 어드레스는 0이므로, 베이스 어드레스는 0이 된다. 뱅크 1(B1)의 오프셋 값은 1, 뱅크 2(B2)는 2, 뱅크 3(B3)은 0이므로, 각각의 뱅크의 어드레스는 베이스 어드레스와 각각의 오프셋 값의 합이 된다. 해당 스트라이드 값과 첫 번째 뱅크인 시작 뱅크에 의해 결정되는 각각의 뱅크별 어드레스 오프셋 값은 아래 표 2와 같다.
상기 표 2에서, A[5:3]의 값이 첫 번째 데이터의 뱅크가 되고, T0은 뱅크 0의 어드레스 오프셋 값, T1은 뱅크 1의 어드레스 오프셋 값이다.
재배열부(930)는 메모리(920)로부터 로딩된 데이터(데이터 0 내지 7)의 순서를 재배열하여, 프로세서에 데이터를 Rd0 내지 Rd7의 순서로 출력한다. 도 7을 다시 참조하면, 수직 방향의 데이터 중 가장 아래 데이터(7,0)부터 가장 위의 데이터(0,0)에 해당하는 뱅크 순서는 다음 순서{B5, B2, B7, B4, B1, B6, B3, B0}이다. 또한, 도 8에 도시된 것처럼, 가장 아래 데이터(7,8)부터 (0,8)에 해당하는 뱅크 순서는 다음 순서 {B6, B3, B0, B5, B2, B7, B4, B1}이다.따라서, 도 6에 도시된 첫 번째 컬럼(610)의 데이터의 배열{(0,0), (1,0), (2,0), (3,0), (4,0), (5,0), (6,0), (7,0)}대로 프로세서가 벡터 프로세싱을 수행할 수 있도록 출력 데이터의 순서를 재배열할 필요가 있다. 예를 들어, 도 9에서, 뱅크 0부터 뱅크 7에서 로드 또는 리드되는 데이터의 순서는 {(0,0), (3,0), (6,0), (1,0), (4,0), (7,0), (2,0), (5,0)}이므로, 재배열부(930)는 순서를 재배열하여, 출력 데이터를 {(0,0), (1,0), (2,0), (3,0), (4,0), (5,0), (6,0), (7,0)}로 바꾸어 출력한다.
캐시(940)는 서로 다른 뱅크에 저장된 수직방향으로 인접한 데이터에 대한 스트라이드 액세스 요청을 수신하는 경우, 뱅크 어드레스에 따라 각각의 뱅크로부터 수직 방향으로 인접한 데이터를 로딩하는 경우, 로딩된 데이터를 출력하면서, 뱅크 어드레스에 상응하는 뱅크들에 저장된 데이터를 저장한다.
일반적으로, 많은 영상 알고리즘은 인접한 연속적인 데이터를 이용하여 반복적인 연산을 하는 경우가 많다. 도 6에 도시된 것처럼, 2차원 데이터(600)의 컬럼 0(610)의 데이터들을 연산하였다면, 다음에는 컬럼 1의 데이터((0,1) 내지 (7,1))을 연산할 가능성이 크다. 따라서, 벡터 프로세싱에 있어서의 이러한 특성을 이용하기 위해 레지스터 타입의 캐시를 구현함으로써, 메모리 액세스 횟수를 줄일 수 있다.
도 1 및 3을 참조하여, 벡터 프로세싱을 수행하는 경우, 캐시를 이용하여 메모리 액세스 횟수를 줄이는 방법에 대해 설명한다.
2차원 데이터(100)의 컬럼 0 내지 컬럼 7의 데이터가 도 3에 도시된 것처럼, 데이터 폭이 4인 뱅크에 이동 및 회전(shift and rotate) 방식으로 저장되어 있다. 뱅크 0에는 제0 행의 데이터((0,0) 내지 (0,3))가 할당되고, 뱅크 1에는 제1 행의 데이터((0,4) 내지 (0,7))가 할당된다. 뱅크 1에는 다음 행인 제2 행의 데이터((1,0) 내지 (1,3))가 할당되고, 뱅크 2에는 제2 행의 데이터((1,4) 내지 (1,7))가 할당된다. 이러한 방식으로 수직 방향으로 인접한 데이터((0,0) 내지 (7,0))는 서로 다른 뱅크에 각각 할당되어, 뱅크 어드레스 0 내지 7에 의해 동시에 또는 한 번에 로드될 수 있다.
프로세서가 벡터 프로세싱(예를 들면, 수직 방향으로 인접한 데이터, 즉 컬럼 0에 대한 연산을 수행)을 수행하기 위해, 컬럼 0(110)을 액세스하고자 하는 경우, 뱅크 어드레스 0 내지 7을 통해 메모리로부터 컬럼 0(110)의 데이터((0,0) 내지 (0,3)), 컬럼 1의 데이터((1,0) 내지 (1,3)),..., 컬럼 7의 데이터((7,0) 내지 (7,3))를 로딩한다.
프로세서는 로딩한 데이터에서, 컬럼 0(110)의 데이터((0,0) 내지 (7,0))에 대해 벡터 프로세싱을 수행한다. 로딩된 뱅크 0의 데이터((0,0) 내지 0,3)) 중 벡터 프로세싱을 위해 필요한 데이터는 (0,0)이고, 나머지 데이터((0,1) 내지 (0,3))는 다음 벡터 프로세싱에 사용될 가능성이 크다. 마찬가지로, 뱅크 1의 데이터((1,0) 내지 (1,3)) 중 벡터 프로세싱을 위해 필요한 데이터는 (1,0)이고, 나머지 데이터((1,1) 내지 (1,3))는 다음 벡터 프로세싱에 사용될 가능성이 크다. 전술한 것처럼, 영상 처리 알고리즘에서 인접한 연속적인 데이터를 처리할 가능성이 크므로, 나머지 데이터를 캐시에 저장하고, 다음 벡터 프로세싱에 대해서는 메모리에 액세스하지 않고, 캐시에 저장된 데이터들을 사용한다.
다시 도 6 및 7과, 도 9를 참조하면, 도 6에 도시된 컬럼 0(610)의 데이터((0,0) 내지 (7,0))를 로딩하기 위해, 도 7에 음영으로 표시된 뱅크들(B0 내지 B7)을 어드레스한다. 뱅크 0(B0)은 뱅크 어드레스 0(addr 0), 뱅크 1(B1)은 뱅크 어드레스 1(addr 1), 뱅크 2(B2)는 뱅크 어드레스 2(addr 2), 뱅크 3(B3)은 뱅크 어드레스 0(addr 0), 뱅크 4(B4)는 뱅크 어드레스 1(addr 1), 뱅크 5(B5)는 뱅크 어드레스 2(addr 2), 뱅크 6(B6)은 뱅크 어드레스 0(addr 0), 뱅크 7(B7)은 뱅크 어드레스 1(addr 1)을 통해 각각 어드레스 한다. 이 경우, 메모리로부터 뱅크당 8개의 데이터가 출력되고, 이때 컬럼 0(610)의 데이터((0,0) 내지 (7,0))를 출력하면서, 컬럼 0 내지 컬럼 7의 데이터((0,0) 내지 (7,7))를 캐시(940)에 저장한다. 캐시(940)에 저장된 데이터인 경우, 예를 들어, 인접한 다음 컬럼의 데이터에 대한 어드레스를 수신하는 경우에는 메모리(920)의 뱅크들(B0 내지 B7)로부터 데이터를 로딩하지 않고, 캐시(940)에 저장된 데이터를 출력한다.
따라서, 본 실시 예에 따른 캐시 사용은 벡터 프로세싱에서, 데이터 폭이 큰 뱅크를 사용하는 경우에 메모리 액세스 횟수를 줄일 수 있어서 전력 소비를 감소시킬 수 있고, 뱅크 충돌의 감소로 인한 프로세서 성능을 향상시킬 수 있다. 또한, 큰 데이터 폭을 갖는 메모리를 사용할 수 있고, 뱅크의 개수를 줄일 수 있어, 면적 효율을 높일 수 있다. 본 실시 예에서 캐시는 레지스터 타입일 수 있으며, 프로세서와 프로세서 칩의 내부 메모리 사이에 존재하는 구조일 수 있으나, 이에 한정되는 것은 아니다.
도 10은 다른 실시 예에 따른 캐시를 포함한 메모리 관리 방법을 구현하는 처리 블록 도이다.
도 10을 참조하면, 제0 내지 7 뱅크로 구성된 메모리(100)와, 8×8 데이터를 저장할 수 있는 레지스터 타입의 캐시(1010)와, 캐시의 유효성을 저장하는 유효성 저장부(102)와 어드레스 태그 저장부(1030)가 도시되어 있다.
도 6 및 7에 도시된 것처럼, 컬럼 0(610)을 로드하기 위해서는, 모든 음영의 뱅크들의 위치를 액세스한다. 뱅크 0은 뱅크 어드레스 0의 위치를, 뱅크 1은 뱅크 어드레스 1, …, 뱅크 7은 뱅크 어드레스 7의 위치를 액세스한다. 뱅크당 8개의 데이터를 출력하는 데 이때 컬럼 0 의 데이터를 출력하면서 동시에 캐시(1010)에 컬럼 0 내지 7에 해당하는 데이터를 저장한다. 캐시(1010)에는 뱅크 0 내지 뱅크 7까지의 데이터들이 저장된다.
이 경우, 캐시(1010)에 유효한 데이터를 저장하였으므로, 유효성 저장부(1020)에 유효성(valid)을 설정하고, 어드레스 태그 저장부(1030)에 저장된 데이터의 해당 뱅크 어드레스를 어드레스 태그로서 저장한다.
다음 스트라이드 액세스 요청을 받는 경우, 그때의 뱅크 어드레스를 어드레스 태그 저장부(1030)에 저장된 어드레스 태그와 비교한다. 유효성 저장부(1020)에 캐시의 유효성이 설정되어 있고, 다음 스트라이드 액세스 요청에 포함된 뱅크 어드레스가 저장된 어드레스 태그와 동일한 경우에는 메모리(1000)를 액세스하지 않고, 캐시(1010)에서 데이터를 출력한다.
본 실시 예에서, 캐시에 유효한 데이터가 저장된 경우, 메모리를 액세스하지 않으므로, 프로세서의 다른 로드/스토어 유닛이 메모리에 접근할 수 있게 되어 뱅크 충돌 횟수를 줄일 수 있어, 시스템 성능을 향상시킬 수 있다. 또한, 본 실시 예에서 캐시의 사이즈를 8×8 데이터를 저장할 수 있는 것으로 도시되어 있지만, 이에 한정되지 않고, 뱅크의 개수 및 뱅크의 데이터 폭에 따라 캐시의 사이즈를 다양한 형태로 구현할 수 있음은 물론이다. 또한, 본 실시 예에서, 캐시는 프로세서와 내부 메모리 사이에 존재하는 레지스터로 구현될 수 있지만, 이에 한정되는 것은 아니다.
도 11은 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
도 11을 참조하면, 단계 1100에서, 2차원 데이터의 크기를 참조한다. 2차원 데이터의 크기는 컬럼(열)의 개수를 포함한다. 단계 1102에서, 스트라이드 액세스를 위한 스트라이드 값을 결정한다. 프로세서로부터의 스트라이드 액세스 요청에 따라, 스트라이드 액세스가 필요한 인접한 데이터를 서로 다른 뱅크에 할당하기 위한 스트라이드 값을 2차원 데이터의 크기에 맞도록 결정한다. 상기 수학식 1 및 2에 따라 뱅크가 8개의 데이터를 저장할 수 있는 데이터 폭을 갖는다고 할 때, 2차원 데이터의 컬럼의 개수가 8인 경우에는 스트라이드 값은 8로 결정한다. 만일 2차원 데이터의 컬럼의 개수가 16인 경우에는 상기 수학식 2에서, 컬럼의 개수 16보다 크거나 같은 조건을 만족하는 양의 최소 홀수는 3이므로, 스트라이드 값은 24로 결정한다. 표 1에 도시된 바와 같이, 2차원 데이터의 컬럼 사이즈의 최소값 및 최대값을 기준으로 해당하는 컬럼 사이즈에 따라 스트라이드 값이 결정된다.
단계 1104에서, 스트라이드 값에 따라 인접한 데이터를 서로 다른 뱅크에 할당한다. 단계 1102에서, 결정된 스트라이드 값, 예를 들면 8인 경우, 스트라이드 액세스가 필요한 수직 방향으로 인접한 데이터가 저장되는 주소의 차이가 8이 되면서, 각각의 인접한 데이터가 서로 다른 뱅크에 할당된다. 따라서, 프로세서는 각각의 뱅크 어드레스에 따라 동시에 또는 한 번에 뱅크에 저장된 데이터를 리드할 수 있다.
도 12는 다른 실시 예에 따른 메모리 관리 방법을 설명하기 위한 흐름 도이다.
도 12를 참조하면, 단계 1200에서, 스트라이드 액세스 요청을 수신한다. 여기서, 스트라이드 액세스 요청은 프로세서가 벡터 프로세싱을 위한 수직 방향으로 인접한 데이터를 액세스하기 위한 것일 수 있다.
단계 1202에서, 로드 또는 저장인지 판단한다. 저장인 경우, 단계 1210에서, 캐시의 유효성을 클리어한다. 스트라이드 액세스가 메모리에 저장된 데이터를 로드하기 위한 것인지, 프로세서에서 처리한 데이터를 저장하기 위한 것인지 판단하고, 저장인 경우에 캐시 유효성을 클리어한다.
로드인 경우, 단계 1204에서, 캐시의 유효성을 검사한다. 캐시가 유효한 경우, 어드레스를 비교한다. 프로세서가 메모리에 저장된 데이터를 로드하기 위한 스트라이드 액세스 요청인 경우, 캐시에 저장된 데이터가 있는지를 캐시의 유효성을 참조하여 판단한다. 캐시에 유효한 데이터가 저장된 경우, 캐시에 저장된 데이터의 어드레스 태그와 현재 스트라이드 액세스 요청에 따른 어드레스와 비교한다.
어드레스 태그와 수신된 어드레스가 동일한 경우, 단계 1208에서, 캐시 출력을 선택한다. 따라서, 메모리에 액세스하지 않고, 캐시에 저장된 데이터를 출력한다. 본 실시 예에서, 벡터 프로세싱의 경우 수직 방향으로 인접한 데이터를 처리하고 난 후, 다시 처리된 데이터와 인접한 데이터를 처리하는 확률이 높기 때문에, 다시 인접한 데이터에 대한 어드레스 요청인 경우에 메모리에 액세스하지 않고, 캐시에 저장된 데이터를 프로세서에 출력한다.
어드레스 태그와 수신된 어드레스가 동일하지 않은 경우에는 단계 1212로 진행한다. 또한, 단계 1204에서, 캐시가 유효하지 않은 경우에도 단계 1212로 진행한다. 단계 1212에서, 메모리 데이터를 캐시에 저장하고, 단계 1214에서, 유효성 및 어드레스를 설정한다. 프로세서로부터 수신된 스트라이드 액세스 요청이 인접한 데이터에 대한 요청이 아닌 경우, 메모리로부터 데이터를 로드하고, 로딩된 데이터를 캐시에 저장하면서 캐시의 유효성을 설정하고, 해당 어드레스를 어드레스 태그로서 저장한다. 단계 1216에서, 메모리 출력을 선택한다. 따라서, 메모리로부터 로딩된 데이터를 프로세서에 출력한다.
단계 1212 내지 1216의 과정이 순차적으로 수행되는 것으로 도시되어 있지만, 이에 한정되지 않고, 동시에 또는 단계 1216과, 단계 1212 및 1214의 캐시 업데이트 과정의 순서로 진행될 수도 있다.
본 실시 예에서, 2차원 데이터의 사이즈(예를 들면, 2차원 데이터의 컬럼의 크기)에 따라 스트라이드 액세스를 위한 스트라이드 값을 결정하여, 서로 다른 뱅크들에 할당함으로써, 수직 방향으로 인접한 데이터가 모두 다른 뱅크에 존재하여 한 번에 읽을 수 있는 기본 기능을 유지하면서 메모리 공간을 보다 효율적으로 사용할 수 있다. 또한, 큰 데이터 폭을 갖는 메모리를 사용하여 뱅크를 구성할 수 있도록 함으로써, 뱅크의 개수를 줄이고, 면적 효율을 높일 수 있다.
또한, 스트라이드 액세스의 특성(예를 들면, 수직 방향으로 인접한 데이터를 읽는 영상 처리 알고리즘의 특성)을 활용하여 레지스터 타입의 캐시를 사용함으로써, 메모리 액세스 횟수를 줄일 수 있게 되어 전력 소비를 줄일 수 있고, 프로세서의 다른 로드/스토어 유닛의 메모리 접속을 허용함으로써, 뱅크 충돌(bank conflict) 감소로 인한 전체 시스템 성능을 향상시킬 수 있다.
또한, 본 실시 예들에서는 데이터를 로드/저장하는 메모리 관리 방법 및 장치에 대해 설명하였지만, 영상 데이터, 오디오 데이터 또는 데이터에 한정되지 않고, 다양한 형태의 데이터 로드/저장하는 메모리 관리에 사용될 수 있음은 물론이다.
본 실시 예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
본 실시 예에서 설명하는 특정 실행들은 예시들로서, 어떠한 방법으로도 기술적 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다.
본 명세서(특히 특허청구범위에서)에서 “상기”의 용어 및 이와 유사한 지시 용어의 사용은 단수 및 복수 모두에 해당하는 것일 수 있다. 또한, 범위(range)를 기재한 경우 상기 범위에 속하는 개별적인 값을 포함하는 것으로서(이에 반하는 기재가 없다면), 상세한 설명에 상기 범위를 구성하는 각 개별적인 값을 기재한 것과 같다. 마지막으로, 방법을 구성하는 단계들에 대하여 명백하게 순서를 기재하거나 반하는 기재가 없다면, 상기 단계들은 적당한 순서로 행해질 수 있다. 반드시 상기 단계들의 기재 순서에 한정되는 것은 아니다. 모든 예들 또는 예시적인 용어(예들 들어, 등등)의 사용은 단순히 기술적 사상을 상세히 설명하기 위한 것으로서 특허청구범위에 의해 한정되지 않는 이상 상기 예들 또는 예시적인 용어로 인해 범위가 한정되는 것은 아니다. 또한, 당업자는 다양한 수정, 조합 및 변경이 부가된 특허청구범위 또는 그 균등물의 범주 내에서 설계 조건 및 팩터에 따라 구성될 수 있음을 알 수 있다.
Claims (30)
- 2차원 데이터의 크기를 참조하여 스트라이드 액세스(stride access)를 위한 스트라이드 값을 결정하는 단계; 및
상기 결정된 스트라이드 값에 따라 상기 2차원 데이터의 수직 방향으로 인접한 데이터를 서로 다른 뱅크에 할당하는 단계를 포함하며,
상기 스트라이드 값은, 상기 2차원 데이터의 열의 개수와 동일하거나 상기 2차원 데이터의 열의 개수보다 더 큰 값으로서 상기 뱅크의 데이터 폭의 홀수 배의 값을 갖는 것을 특징으로 하는 메모리 관리 방법. - 삭제
- 삭제
- 제 1항에 있어서,
상기 스트라이드 값은,
다음 수학 식을 만족하도록 결정되는 메모리 관리 방법.
[수학 식]
stride = a * 2n ≥ 2차원 데이터의 열의 개수
(여기서, 상기 a는 양의 홀수, 상기 2n 은 뱅크 폭이고, n은 자연수임) - 삭제
- 삭제
- 제 1 항에 있어서,
상기 스트라이드 액세스 가능한 최대 수직 방향의 데이터의 수는 상기 뱅크의 수와 일치하는 메모리 관리 방법. - 제 1 항에 있어서,
상기 데이터 중 제1 데이터가 할당된 뱅크 및 상기 결정된 스트라이드 값에 따라 각각의 뱅크의 오프셋 값을 생성하는 단계를 더 포함하는 메모리 관리 방법. - 제 8 항에 있어서,
상기 생성된 오프셋 값을 이용하여 상기 각각의 뱅크의 어드레스를 계산하는 단계를 더 포함하는 메모리 관리 방법. - 제 1 항에 있어서,
상기 서로 다른 뱅크에 저장된 데이터에 대한 상기 스트라이드 액세스 요청을 수신하는 단계;
상기 각각의 뱅크의 어드레스 및 상기 스트라이드 값을 기초로 상기 서로 다른 뱅크로부터 로딩된 데이터의 순서를 재배열하는 단계; 및
상기 재배열된 데이터를 출력하는 단계를 포함하는 메모리 관리 방법. - 제 10 항에 있어서,
상기 재배열된 데이터를 캐시에 저장하고, 상기 캐시의 유효성을 설정하는 단계; 및
상기 각각의 뱅크의 어드레스를 어드레스 태그로서 저장하는 단계를 포함하는 메모리 관리 방법. - 제 11 항에 있어서,
다음 스트라이드 액세스 요청을 수신하는 경우, 각각의 뱅크의 어드레스와 상기 저장된 어드레스 태그가 동일한 경우, 상기 캐시로부터 저장된 데이터를 로딩하는 단계를 더 포함하는 메모리 관리 방법. - 제 12 항에 있어서,
상기 각각의 뱅크의 어드레스와 상기 어드레스 태그가 동일하지 않은 경우, 상기 각각의 뱅크 어드레스에 상응하는 데이터를 상기 캐시에 저장하는 단계를 더 포함하는 메모리 관리 방법. - 제 13 항에 있어서,
상기 캐시의 유효성을 설정하고, 상기 각각의 뱅크 어드레스를 어드레스 태그로서 저장하는 단계; 및
상기 다음 스트라이드 액세스 요청에 따른 메모리 출력을 선택하는 단계를 더 포함하는 메모리 관리 방법. - 서로 다른 뱅크에 저장된 수직 방향으로 인접한 데이터에 대한 스트라이드 액세스 요청을 수신하는 단계;
상기 수신된 스트라이드 액세스 요청에 상응하는 뱅크 어드레스에 따라 각각의 뱅크로부터 상기 수직 방향으로 인접한 데이터를 로딩하는 단계; 및
상기 로딩된 데이터를 출력하면서, 상기 뱅크 어드레스에 상응하는 뱅크들에 저장된 데이터를 캐시(cache)에 저장하는 단계를 포함하며,
상기 수직 방향으로 인접한 데이터는
2차원 데이터의 열의 개수와 동일하거나 상기 2차원 데이터의 열의 개수보다 더 큰 값으로서 상기 뱅크의 데이터 폭의 홀수 배의 값을 갖는 스트라이드 값에 기초하여 상기 각각의 뱅크에 할당된 데이터인 것을 특징으로 하는 메모리 관리 방법. - 제 15 항에 있어서,
상기 캐시는,
레지스터 타입인 메모리 관리 방법. - 제 15 항에 있어서,
상기 캐시의 유효성을 설정하는 단계; 및
상기 저장된 데이터에 상응하는 뱅크 어드레스를 어드레스 태그로서 저장하는 단계를 포함하는 메모리 관리 방법. - 제 17 항에 있어서,
다음 스트라이드 액세스 요청을 수신하는 단계;
상기 다음 스트라이드 액세스 요청에 상응하는 뱅크 어드레스와 상기 저장된 어드레스 태그가 동일한지 판단하는 단계;
상기 판단 결과, 상기 다음 스트라이드 액세스 요청에 상응하는 뱅크 어드레스와 상기 저장된 어드레스 태그가 동일한 경우 상기 캐시에 저장된 데이터를 로딩하는 단계; 및
상기 로딩한 데이터를 출력하는 단계를 포함하는 메모리 관리 방법. - 제 18 항에 있어서,
상기 판단 결과, 상기 다음 스트라이드 액세스 요청에 상응하는 뱅크 어드레스와 상기 저장된 어드레스 태그가 동일하지 않은 경우, 상기 뱅크 어드레스에 따라 상기 서로 다른 뱅크에 저장된 인접한 데이터를 로딩하는 단계를 더 포함하는 메모리 관리 방법. - 제 1 항, 제 4항, 및 제 7항 내지 제 19 항 중 어느 한 항에 따른 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터가 읽을 수 있는 기록매체.
- 뱅크들로 구성된 메모리의 데이터를 관리하는 메모리 관리 장치에 있어서,
2차원 데이터의 크기를 참조하여 스트라이드 액세스(stride access)를 위한 스트라이드 값을 결정하고, 상기 결정된 스트라이드 값에 따라 상기 2차원 데이터의 수직 방향으로 인접한 데이터를 서로 다른 뱅크에 할당하며,
상기 스트라이드 값은, 상기 2차원 데이터의 열의 개수와 동일하거나 상기 2차원 데이터의 열의 개수보다 더 큰 값으로서 상기 뱅크의 데이터 폭의 홀수 배의 값을 갖는 것을 특징으로 하는 메모리 관리 장치. - 삭제
- 삭제
- 제 21 항에 있어서,
상기 스트라이드 값은,
다음 수학 식을 만족하도록 결정되는 메모리 관리 장치.
[수학 식]
stride = a * 2n ≥ 2차원 데이터의 열의 개수
(여기서, 상기 a는 양의 홀수, 상기 2n 은 뱅크 폭이고, n은 자연수임) - 삭제
- 삭제
- 제 21 항에 있어서,
상기 스트라이드 액세스 가능한 최대 수직 방향의 데이터의 수는 상기 뱅크의 수와 일치하는 메모리 관리 장치. - 제 21 항에 있어서,
상기 데이터 중 제1 데이터가 할당된 뱅크 및 상기 결정된 스트라이드 값에 따라 각각의 뱅크의 오프셋 값을 생성하고, 상기 생성된 오프셋 값을 이용하여 상기 각각의 뱅크의 어드레스를 계산하는 메모리 관리 장치. - 제 21 항에 있어서,
상기 서로 다른 뱅크에 저장된 데이터에 대한 상기 스트라이드 액세스 요청을 수신하고, 상기 각각의 뱅크의 어드레스 및 상기 스트라이드 값을 기초로 상기 서로 다른 뱅크로부터 로딩된 데이터의 순서를 재배열하고, 상기 재배열된 데이터를 프로세서에 출력하는 메모리 관리 장치. - 제 29 항에 있어서,
상기 재배열된 데이터를 저장하는 캐시를 더 포함하고,
다음 스트라이드 액세스 요청을 수신하는 경우, 상기 캐시에 저장된 데이터를 로딩하는 메모리 관리 장치.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130168833A KR102202575B1 (ko) | 2013-12-31 | 2013-12-31 | 메모리 관리 방법 및 장치 |
CN201480071840.5A CN105874437B (zh) | 2013-12-31 | 2014-12-30 | 存储器管理方法和装置 |
US15/107,255 US10430339B2 (en) | 2013-12-31 | 2014-12-30 | Memory management method and apparatus |
PCT/KR2014/013009 WO2015102352A1 (en) | 2013-12-31 | 2014-12-30 | Memory management method and apparatus |
EP14877478.9A EP3063636B1 (en) | 2013-12-31 | 2014-12-30 | Memory management method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130168833A KR102202575B1 (ko) | 2013-12-31 | 2013-12-31 | 메모리 관리 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150078951A KR20150078951A (ko) | 2015-07-08 |
KR102202575B1 true KR102202575B1 (ko) | 2021-01-13 |
Family
ID=53493639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020130168833A KR102202575B1 (ko) | 2013-12-31 | 2013-12-31 | 메모리 관리 방법 및 장치 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10430339B2 (ko) |
EP (1) | EP3063636B1 (ko) |
KR (1) | KR102202575B1 (ko) |
CN (1) | CN105874437B (ko) |
WO (1) | WO2015102352A1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019091191A (ja) * | 2017-11-14 | 2019-06-13 | ルネサスエレクトロニクス株式会社 | 半導体装置、データ処理システム、データ読取り方法、及びデータ読取りプログラム |
US11321802B2 (en) | 2018-02-27 | 2022-05-03 | Google Llc | Large lookup tables for an image processor |
CN114462353B (zh) * | 2022-03-17 | 2024-09-24 | 苏州盛科通信股份有限公司 | 芯片存储器功耗优化方法、装置、电子设备及存储介质 |
WO2024058810A1 (en) * | 2022-09-15 | 2024-03-21 | Google Llc | Reducing memory bank conflicts in a hardware accelerator |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002039271A1 (en) | 2000-11-13 | 2002-05-16 | Chipwrights Design, Inc. | Non-integral multiple size array loop processing in simd architecture |
US20060236072A1 (en) | 2005-04-14 | 2006-10-19 | International Business Machines Corporation | Memory hashing for stride access |
US20100312945A1 (en) | 2004-11-23 | 2010-12-09 | Hutson Maurice L | Intelligent memory banks for storing vectors |
US7872657B1 (en) | 2006-06-16 | 2011-01-18 | Nvidia Corporation | Memory addressing scheme using partition strides |
US20110087821A1 (en) | 2009-10-13 | 2011-04-14 | Samsung Electronics Co., Ltd. | Apparatus to access multi-bank memory |
US20120092356A1 (en) | 2010-10-15 | 2012-04-19 | Via Technologies, Inc. | Systems and Methods for Performing Shared Memory Accesses |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5111389A (en) | 1987-10-29 | 1992-05-05 | International Business Machines Corporation | Aperiodic mapping system using power-of-two stride access to interleaved devices |
US4888679A (en) | 1988-01-11 | 1989-12-19 | Digital Equipment Corporation | Method and apparatus using a cache and main memory for both vector processing and scalar processing by prefetching cache blocks including vector data elements |
US4918600A (en) | 1988-08-01 | 1990-04-17 | Board Of Regents, University Of Texas System | Dynamic address mapping for conflict-free vector access |
JPH07219847A (ja) | 1994-01-31 | 1995-08-18 | Fujitsu Ltd | 情報処理装置 |
JPH08123953A (ja) * | 1994-10-21 | 1996-05-17 | Mitsubishi Electric Corp | 画像処理装置 |
EP0931290A1 (en) | 1997-03-21 | 1999-07-28 | International Business Machines Corporation | Address mapping for system memory |
EP1051626B1 (en) | 1998-01-30 | 2009-03-18 | Allertein Therapeutics, LLC | Prognostic allergy or inflammation test |
US6748480B2 (en) | 1999-12-27 | 2004-06-08 | Gregory V. Chudnovsky | Multi-bank, fault-tolerant, high-performance memory addressing system and method |
US20040006667A1 (en) | 2002-06-21 | 2004-01-08 | Bik Aart J.C. | Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions |
US6912616B2 (en) | 2002-11-12 | 2005-06-28 | Hewlett-Packard Development Company, L.P. | Mapping addresses to memory banks based on at least one mathematical relationship |
JP4635687B2 (ja) | 2005-03-30 | 2011-02-23 | ソニー株式会社 | データアクセス装置、データアクセス方法、プログラムおよび記録媒体 |
CN101558391B (zh) | 2006-12-15 | 2013-10-16 | 密克罗奇普技术公司 | 用于微处理器的可配置高速缓冲存储器 |
US7668040B2 (en) * | 2006-12-22 | 2010-02-23 | Fujitsu Microelectronics Limited | Memory device, memory controller and memory system |
US8370603B2 (en) | 2008-12-23 | 2013-02-05 | Apple Inc. | Architecture for address mapping of managed non-volatile memory |
-
2013
- 2013-12-31 KR KR1020130168833A patent/KR102202575B1/ko active IP Right Grant
-
2014
- 2014-12-30 US US15/107,255 patent/US10430339B2/en active Active
- 2014-12-30 WO PCT/KR2014/013009 patent/WO2015102352A1/en active Application Filing
- 2014-12-30 EP EP14877478.9A patent/EP3063636B1/en active Active
- 2014-12-30 CN CN201480071840.5A patent/CN105874437B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002039271A1 (en) | 2000-11-13 | 2002-05-16 | Chipwrights Design, Inc. | Non-integral multiple size array loop processing in simd architecture |
US20100312945A1 (en) | 2004-11-23 | 2010-12-09 | Hutson Maurice L | Intelligent memory banks for storing vectors |
US20060236072A1 (en) | 2005-04-14 | 2006-10-19 | International Business Machines Corporation | Memory hashing for stride access |
US7872657B1 (en) | 2006-06-16 | 2011-01-18 | Nvidia Corporation | Memory addressing scheme using partition strides |
US20110087821A1 (en) | 2009-10-13 | 2011-04-14 | Samsung Electronics Co., Ltd. | Apparatus to access multi-bank memory |
US20120092356A1 (en) | 2010-10-15 | 2012-04-19 | Via Technologies, Inc. | Systems and Methods for Performing Shared Memory Accesses |
Non-Patent Citations (1)
Title |
---|
Philip Koopman, "Main Memory Performance 18-548/15-548 Memory System Architecture", 1998.10.21.* |
Also Published As
Publication number | Publication date |
---|---|
US10430339B2 (en) | 2019-10-01 |
EP3063636B1 (en) | 2020-05-06 |
CN105874437B (zh) | 2019-10-25 |
US20160335185A1 (en) | 2016-11-17 |
CN105874437A (zh) | 2016-08-17 |
EP3063636A1 (en) | 2016-09-07 |
EP3063636A4 (en) | 2017-08-09 |
KR20150078951A (ko) | 2015-07-08 |
WO2015102352A1 (en) | 2015-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107657581B (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
US20140359225A1 (en) | Multi-core processor and multi-core processor system | |
CN103003791B (zh) | 分配共享堆栈的部分的系统和方法 | |
US9966152B2 (en) | Dedupe DRAM system algorithm architecture | |
US20160162402A1 (en) | Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system | |
KR102357863B1 (ko) | 메모리 접근 방법 및 장치 | |
US10496543B2 (en) | Virtual bucket multiple hash tables for efficient memory in-line deduplication application | |
KR102202575B1 (ko) | 메모리 관리 방법 및 장치 | |
CN111209232B (zh) | 访问静态随机存取存储器的方法、装置、设备和存储介质 | |
JP2009157887A (ja) | ロードストアキューの制御方法及びその制御システム | |
CN116010299B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
JP2022550170A (ja) | コンピュータがテンソルデータの計算を実現する方法、装置、媒体及び機器 | |
WO2020073801A1 (zh) | 一种3d图像处理中数据读写方法及系统、存储介质及终端 | |
CN114942831A (zh) | 处理器、芯片、电子设备及数据处理方法 | |
US20130222379A1 (en) | Rendering system and method | |
US20200327638A1 (en) | Connected component detection method, circuit, device and computer-readable storage medium | |
US8977800B2 (en) | Multi-port cache memory apparatus and method | |
US20130057770A1 (en) | Data processing apparatus, data processing method and data sharing system | |
CN114328315A (zh) | 基于dma的数据预处理方法、dma部件及芯片结构 | |
US10572969B2 (en) | Method and device for processing data | |
JP5527340B2 (ja) | ベクトル処理装置およびベクトル処理方法 | |
EP2453360B1 (en) | Method and apparatus for translating memory access address | |
US9349155B2 (en) | Computing apparatus and method using X-Y stack memory | |
US20180052773A1 (en) | Memory managing method and apparatus associated with cache in image processing system | |
EP2434409B1 (en) | Processor and method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |