KR20230025891A - 공간 캐시 - Google Patents

공간 캐시 Download PDF

Info

Publication number
KR20230025891A
KR20230025891A KR1020237002153A KR20237002153A KR20230025891A KR 20230025891 A KR20230025891 A KR 20230025891A KR 1020237002153 A KR1020237002153 A KR 1020237002153A KR 20237002153 A KR20237002153 A KR 20237002153A KR 20230025891 A KR20230025891 A KR 20230025891A
Authority
KR
South Korea
Prior art keywords
memory
row
unit
virtual
column
Prior art date
Application number
KR1020237002153A
Other languages
English (en)
Inventor
매튜 헨리
Original Assignee
이덱스 바이오메트릭스 아사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 이덱스 바이오메트릭스 아사 filed Critical 이덱스 바이오메트릭스 아사
Publication of KR20230025891A publication Critical patent/KR20230025891A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • G06F12/0653Configuration or reconfiguration with centralised address assignment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0884Parallel mode, e.g. in parallel with main memory or CPU
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

캐시는 메모리 유닛들의 pxq 어레이; 로우 어드레싱 유닛; 및 컬럼 어드레싱 유닛을 포함한다. 각각의 메모리 유닛은 메모리 셀들의 mxn 어레이를 갖는다. 컬럼 어드레싱 유닛은, 각각의 메모리 유닛에 대해, m개의 n-대-1 멀티플렉서를 가지며, 그 하나는 메모리 유닛의 m개의 로우 각각과 연관되고, 여기서 각각의 n-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 로우와 연관된 n개의 메모리 셀 각각에 커플링되는 입력을 갖는다. 로우 어드레싱 유닛은, 각각의 메모리 유닛에 대해, n개의 m-대-1 멀티플렉서를 가지며, 그 하나는 메모리 유닛의 n개의 컬럼 각각과 연관되고, 여기서 각각의 m-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 컬럼과 연관된 m개의 메모리 셀 각각에 커플링되는 입력을 갖는다. 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은, 예를 들어, 가상 또는 물리적 어드레스들을 사용하여, 메모리 유닛들의 어레이의 판독 및/또는 기입을 지원한다.

Description

공간 캐시
관련 출원에 대한 상호 참조
본 출원은, 2020년 6월 24일자로 출원되고 본 명세서에 그 전체가 참조로 포함되는 미국 특허 출원 제16/910,813호에 대한 우선권을 주장한다.
기술분야
특수화된 타입의 캐시 메모리에 관한 실시예들이 개시된다.
캐시를 포함하는 반도체 메모리가 선형적으로 배열 및 어드레싱된다. 다차원 객체들(예컨대, 2차원 이미지들 또는 매트릭스들)을 프로세싱할 때, 그러한 객체들은 예컨대 하나의 로우(row)를 다른 로우 뒤에 연접함(concatenating)으로써 "평탄화된다(flattened out)". 일부 타입들의 프로세싱 알고리즘들의 경우, 메모리의 이 선형 배열에 잘 맞지 않는 다차원 객체들의 특정 부분들이 액세스될 필요가 있을 수 있다. 예를 들어, 중심 포인트의 짧은 거리 내의 복수의 포인트들이 일부 프로세싱을 위해 액세스될 필요가 있을 수 있지만, 이들 포인트들이 서로 멀리 이격된 위치들에서 그리고 불규칙한 이격들로 순차적으로 저장될 수 있기 때문에, 현재 메모리 및 캐시 액세스는 원하는 데이터에 액세스하기에는 비효율적이고 느리며 다수의 상이한 판독 동작들을 요구할 수 있다.
이에 따라, 예를 들어, 이미지들 또는 매트릭스들과 같은 2차원 데이터 구조들을 프로세싱할 때 판독 유연성 및 대역폭을 개선시킬 수 있는 것과 같은 개선된 캐시가 필요하다. 실시예들은 비선형 방식으로 (2차원 이미지들 또는 매트릭스들과 같은) 다차원 객체들의 부분들을 표현하는 것이 가능한 캐시를 제공하여, 예를 들어 이미지의 인근 픽셀들이 효율적으로 액세스되게 한다.
제1 양태에 따르면, 캐시가 제공된다. 캐시는, 메모리 유닛들의 p(로우들) x q(컬럼(column)들) 어레이; 로우 어드레싱 유닛; 및 컬럼 어드레싱 유닛을 포함한다. 각각의 메모리 유닛은 메모리 셀들의 m(로우들) x n(컬럼들) 어레이를 갖는다. 컬럼 어드레싱 유닛은, 각각의 메모리 유닛에 대해, m개의 n-대-1 멀티플렉서(n-to-one multiplexer)를 가지며, 그 하나는 메모리 유닛의 m개의 로우 각각과 연관되고, 여기서 각각의 n-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 로우와 연관된 n개의 메모리 셀 각각에 커플링되는 입력을 갖는다. 로우 어드레싱 유닛은, 각각의 메모리 유닛에 대해, n개의 m-대-1 멀티플렉서를 가지며, 그 하나는 메모리 유닛의 n개의 컬럼 각각과 연관되고, 여기서 각각의 m-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 컬럼과 연관된 m개의 메모리 셀 각각에 커플링되는 입력을 갖는다. 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 메모리 유닛들의 어레이의 판독 및/또는 기입을 지원하여, 메모리 유닛들의 어레이의 다수의 로우들 및/또는 컬럼들이 병렬로 판독 및/또는 기입될 수 있다.
일부 실시예들에서, m = n = 4이고 각각의 메모리 셀은 1바이트(byte)를 포함하여, 각각의 메모리 유닛이 16바이트를 포함하고, 여기서 p = q = 8이어서, 메모리 유닛들의 어레이가 1024바이트를 포함한다. 일부 실시예들에서, 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 단일 클록 사이클에서 메모리 유닛들 중 하나 이상의 메모리 유닛의 메모리 셀들의 다수의 로우들 및/또는 컬럼들에 대한 판독 및/또는 기입을 지원한다. 일부 실시예들에서, 로우 어드레싱 유닛은 메모리 유닛들의 어레이 중 하나 이상에 걸쳐 메모리 셀들의 최대 p*m개의 로우를 어드레싱하고 p*m개의 로우 각각에서 임의의 셀을 판독하는 것이 가능하고, 여기서 2개의 그러한 셀이 동일한 로우에 있지 않다.
일부 실시예들에서, 컬럼 어드레싱 유닛은 메모리 유닛들의 어레이 중 하나 이상에 걸쳐 메모리 셀들의 최대 q*n개의 컬럼을 어드레싱하고 q*n개의 컬럼 각각에서 임의의 셀을 판독하는 것이 가능하고, 여기서 2개의 그러한 셀이 동일한 컬럼에 있지 않다. 일부 실시예들에서, 로우 어드레싱 유닛은, 메모리 유닛들의 어레이의 제1 로우에 있지 않은 각각의 메모리 유닛에 대해, 선행 로우에서의 메모리 유닛과 연관된 n-대-1 멀티플렉서의 출력 및 메모리 유닛의 각각의 컬럼과 연관된 n-대-1 멀티플렉서의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 가지며, 컬럼 어드레싱 유닛은, 메모리 유닛들의 어레이의 제1 컬럼에 있지 않은 각각의 메모리 유닛에 대해, 선행 컬럼에서의 메모리 유닛과 연관된 m-대-1 멀티플렉서의 출력 및 메모리 유닛의 각각의 로우와 연관된 m-대-1 멀티플렉서의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 갖는다.
일부 실시예들에서, 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 각각 메모리 유닛들의 어레이의 메모리 셀들의 판독을 지원하고, 여기서 로우 어드레싱 유닛은 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원한다. 일부 실시예들에서, 단지 로우 어드레싱 유닛만이 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원하여, 컬럼 어드레싱 유닛이 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원하지 않는다. 일부 실시예들에서, 메모리 유닛들의 p x q 어레이에서의 메모리 유닛은, 가상 어드레스에 의해 표현될 수 있는 최소 엔티티(minimum entity)를 표현한다.
일부 실시예들에서, 메모리 유닛들의 p x q 어레이에서의 각각의 메모리 유닛에 대해, 메모리 유닛 내의 각각의 메모리 셀은 캐시에서의 데이터의 최소 어드레싱가능 양자(smallest addressable quantum)이고, 메모리 유닛 내에 단지 물리적 어드레스만을 갖는다. 일부 실시예들에서, 로우 어드레싱 유닛은 q*n개의 컬럼 각각에 대한 별개의 어드레스들을 가지며 컬럼 어드레싱 유닛은 p*m개의 로우 각각에 대한 별개의 어드레스들을 가져서, 로우 및 컬럼 어드레싱 유닛들이 메모리 유닛들의 어레이 및 각각의 메모리 유닛 내의 메모리 셀들의 어레이 내에서 상이한 로우들로부터 최대 p*m개의 메모리 셀을 그리고 상이한 컬럼들로부터 최대 q*n개의 메모리 셀을 동시에 판독 및/또는 기입하는 것을 지원한다.
일부 실시예들에서, 캐시는, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 메모리 셀들 중 일부 또는 전부를 채우는 것이 가능한 로드/저장 유닛(load/store unit), 및 특정 메모리 셀들에 액세스하도록 로우 및 컬럼 어드레싱 유닛들에 지시하기 위한 신호들을 제어하기 위해 원격 메모리에 의해 표현된 2차원 데이터 구조의 일 부분을 표현하는 가상 어드레스를 변환하는 것이 가능한 제어 및 디코드 회로(control and decode circuit)를 더 포함한다. 일부 실시예들에서, 제어 및 디코드 회로는, 가상 원점을 갖는 피연산자 영역(operand region)을 유지하여, 가상 원점이, 원격 메모리에 대한 복수의 가상 어드레스들을 포함하는 어드레스 템플릿(address template)에 대한 기준 포인트로서 기능하고, 여기서 제어 및 디코드 회로는 복수의 가상 어드레스들을 결정하기 위해 어드레스 템플릿을 디코딩하는 것이 추가로 가능하다. 일부 실시예들에서, 제어 및 디코드 회로는 가상 원점을 조작하고, 가상 원점이 조작됨에 따라 원격 메모리로부터 데이터를 판독함으로써 메모리 셀들을 초기화 및/또는 업데이트하도록 로드/저장 유닛에 지시하는 것이 추가로 가능하다.
제2 양태에 따르면, 제1 양태의 실시예들 중 임의의 하나의 실시예에 따른 캐시에 액세스하는 방법이 제공된다. 이 방법은, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제1 복수의 메모리 유닛들을 초기화하는 단계; 및 개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀에 액세스하는 단계를 포함한다.
일부 실시예들에서, 이 방법은, 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를, 개개의 메모리 셀을 표시하는 물리적 어드레스로 변환하는 단계를 더 포함한다. 일부 실시예들에서, 이 방법은, 판독 제어 신호들을 형성하고 판독 제어 신호들을 로우 및/또는 컬럼 어드레싱 유닛들에 전송하여 개개의 메모리 셀의 내용들을 판독하는 단계를 더 포함한다. 일부 실시예들에서, 개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀들에 액세스하는 단계는: 복수의 가상 어드레스들을 갖는 어드레스 템플릿을 디코딩하는 단계; 및 복수의 가상 어드레스들 각각에 대응하는 메모리 셀들의 내용들로 피연산자 벡터를 형성하는 단계를 포함한다.
일부 실시예들에서, 이 방법은, 가상 원점을 갖는 피연산자 영역을 유지하는 단계를 더 포함하고, 여기서 피연산자 영역은, 2차원 데이터 구조의 일 부분을 표현하는 메모리 유닛들을 포괄한다. 일부 실시예들에서, 이 방법은, 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 단계; 및 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계를 더 포함한다.
일부 실시예들에서, 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계는: (1) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 우측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최좌측 컬럼을 메모리 유닛들의 새로운 최우측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 플러스(plus) 단일 메모리 유닛의 폭의 합으로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계; (2) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 좌측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최우측 컬럼을 메모리 유닛들의 새로운 최좌측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 마이너스(minus) 단일 메모리 유닛의 폭 사이의 차이로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계; (3) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 위로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최하측 로우를 메모리 유닛들의 새로운 최상측 로우로 대체하고 이전 최상측 로우의 가상 어드레스 플러스 단일 메모리 유닛의 높이의 합으로서 새로운 로우의 가상 어드레스를 재할당하는 단계; 및 (4) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 아래로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최상측 로우를 메모리 유닛들의 새로운 최하측 로우로 대체하고 이전 최하측 로우의 가상 어드레스 마이너스 단일 메모리 유닛의 높이 사이의 차이로서 새로운 로우의 가상 어드레스를 재할당하는 단계 중 하나를 포함한다.
일부 실시예들에서, 메모리 유닛들의 어레이의 단지 서브세트만이 2차원 데이터 구조의 프로세싱의 부분으로서 2차원 데이터 구조에 대응하는 데이터를 저장하는 데 사용되고, 메모리 유닛들의 어레이의 나머지 부분이 스크래치패드 공간(scratchpad space)을 위해 사용된다. 일부 실시예들에서, 2차원 데이터 구조는 이미지 데이터를 포함한다. 일부 실시예들에서, 2차원 데이터 구조는 매트릭스를 포함한다.
본 명세서에 포함되고 명세서의 일부를 형성하는 첨부 도면들이 다양한 실시예들을 예시한다.
도 1은 일 실시예에 따른 캐시를 예시한다.
도 2는 일 실시예에 따른 메모리 유닛을 예시한다.
도 3은 이미지 분석 알고리즘에 의해 분석되는 이미지를 예시한다.
도 4는 일 실시예에 따른 피연산자 영역을 예시한다.
도 5a 및 도 5b는 일 실시예에 따른 물리적 및 가상 어드레싱을 예시한다.
도 6a 내지 도 6d는 일 실시예에 따른 어드레스 템플릿들을 예시한다.
도 7a 내지 도 7h는 일 실시예에 따른 어드레스 템플릿들을 예시한다.
도 8은 일 실시예에 따른 프로세스를 예시하는 흐름도이다.
도 9는 일 실시예에 따른 장치의 블록 다이어그램이다.
도 10a는 메모리의 선형 어레이를 예시하고; 도 10b는 메모리의 선형 어레이의 2차원 뷰를 예시한다.
도 1은 일 실시예에 따른 캐시(100)를 예시한다.
캐시(100)는 하나 이상의 메모리 유닛(102), 하나 이상의 멀티플렉서(104), 및 하나 이상의 멀티플렉서(106)를 포함할 수 있다.
도시된 바와 같이, 메모리 유닛들(102)은 p x q 어레이(메모리 유닛들(102)의 p개의 로우 및 q개의 컬럼을 가짐)에 배열된다. 예시된 실시예에서, p = q = 8 = 23이다. 일반적으로, pq의 다른 값들, 예컨대 2의 다른 거듭제곱들, 또는 더 일반적으로는 임의의 다른 값이 사용될 수 있다. p q의 값들은 동일할 수 있거나 또는 이들은 서로 상이할 수 있다. 어레이는 메모리 유닛들의 논리적 그룹화일 수 있는데, 예를 들어 실리콘 상의 이들의 물리적 구현을 반드시 표시하는 것은 아니다.
멀티플렉서들(104, 106)은 다양한 상이한 방식들로 캐시(100)에 배열될 수 있다. 예를 들어, 도시된 바와 같이, 메모리 유닛들(102)의 주어진 로우에서의 각각의 메모리 유닛(102) 사이에 멀티플렉서(104)가 있고 메모리 유닛들(102)의 로우의 끝에 추가 멀티플렉서(104)가 있으며(결과적으로 메모리 유닛들(102)의 각각의 로우에 대해 q개의 멀티플렉서(104)가 생성됨); 마찬가지로, 메모리 유닛들(102)의 주어진 컬럼에서의 각각의 메모리 유닛(102) 사이에 멀티플렉서(106)가 있고 메모리 유닛들(102)의 컬럼의 끝에 추가 멀티플렉서(106)가 있다(결과적으로 메모리 유닛들(102)의 각각의 컬럼에 대해 p개의 멀티플렉서(106)가 생성됨). 이 구성에서, 각각의 메모리 유닛(102)은 하나의 멀티플렉서(104) 및 하나의 멀티플렉서(106)와 연관된 것으로서 간주될 수 있는데, 멀티플렉서(104)는 메모리 유닛(102)의 우측에 도시되어 있고 멀티플렉서(106)는 메모리 유닛(102)의 하부에 도시되어 있다.
멀티플렉서들(104)은 메모리 유닛들(102) 및 메모리 셀들의 컬럼들을 어드레싱하는 데 사용되고, 멀티플렉서들(104)의 집합체가 본 명세서에서 컬럼 어드레싱 유닛이라고 지칭될 수 있다. 명확히 하기 위해, 컬럼 어드레싱 유닛은 멀티플렉서들(104)의 집합체의 구조를 지칭한다. 예시된 실시예에서, 컬럼 어드레싱 유닛은 도시된 메모리 유닛들(102) 및 메모리 셀들에 대해 좌측으로부터 우측으로의 흐름으로 데이터를 판독한다.
멀티플렉서들(106)은 메모리 유닛들(102) 및 메모리 셀들의 로우들을 어드레싱하는 데 사용되고, 멀티플렉서들(106)의 집합체가 본 명세서에서 로우 어드레싱 유닛이라고 지칭될 수 있다. 명확히 하기 위해, 로우 어드레싱 유닛은 멀티플렉서들(106)의 집합체의 구조를 지칭한다. 예시된 실시예에서, 로우 어드레싱 유닛은 도시된 메모리 유닛들(102) 및 메모리 셀들에 대해 상부로부터 하부로의 흐름으로 데이터를 판독한다.
도 2는 일 실시예에 따른 메모리 유닛(102)을 예시한다. 메모리 유닛(102)과 연관된 2개의 멀티플렉서(104 및 106)가 또한 예시되어 있다.
각각의 메모리 유닛(102)은, 이 도면에서 B0-B15로서 라벨링된 하나 이상의 메모리 셀을 포함할 수 있다. 도시된 바와 같이, 메모리 셀들(B0-B15)은 m x n 어레이(메모리 셀들의 m개의 로우 및 n개의 컬럼을 가짐)에 배열된다. 예시된 실시예에서, m = n = 4 = 22이다. 일반적으로, mn의 다른 값들, 예컨대 2의 다른 거듭제곱들이 사용될 수 있고, 전형적으로 m x n 어레이는 적어도 2 x 2만큼 클 것이다. m 및 n의 값들은 동일할 수 있거나 또는 이들은 서로 상이할 수 있다. 어레이는 메모리 셀들의 논리적 그룹화일 수 있는데, 예를 들어 실리콘 상의 이들의 물리적 구현을 반드시 표시하는 것은 아니다.
일부 실시예들에서, 메모리 셀은 메모리의 1바이트를 구성할 수 있다. 예시된 실시예의 경우, 그것은 메모리 유닛(102)이 16바이트(=m*n*1바이트=4*4*1바이트)를 구성하고 캐시(100)가 1킬로바이트(=p*q*16바이트=8*8*16바이트)를 구성한다는 것을 의미한다. 일반적으로, 메모리 셀의 사이즈는 특정 적용예에 대해 적절한 메모리의 임의의 특정 양자를 구성할 수 있는데, 이는 메모리 유닛(102) 및 캐시(100)가 또한 특정 적용예에 대해 적절한 메모리의 임의의 특정 양자를 구성할 수 있다는 것을 의미한다. 전형적으로, 구현 목적들을 위해, 메모리 셀, 메모리 유닛(102), 및 캐시(100) 각각에 대한 메모리의 양자는 2의 거듭제곱일 것이다.
논의의 목적들을 위해, 메모리 유닛(102)의 컬럼들은, n개의 컬럼 중 특정 하나의 컬럼에서의 m개의 메모리 셀을 지칭한다. 도시된 바와 같이, 메모리 셀들의 4개의 컬럼 각각에 4개의 메모리 셀이 있다. 메모리 셀들의 제1 컬럼은 B15, B11, B7, 및 B3을 포함하고; 제2 컬럼은 B14, B10, B6, 및 B2를 포함하고; 제3 컬럼은 B13, B9, B5, 및 B1을 포함하며; 제4 컬럼은 B12, B8, B4, 및 B0을 포함한다. 유사하게, 메모리 유닛(102)의 로우들은, 메모리 셀들의 m개의 로우 중 특정 하나의 로우에서의 n개의 메모리 셀을 지칭한다. 도시된 바와 같이, 메모리 셀들의 4개의 로우 각각에는 4개의 메모리 셀이 있다. 메모리 셀들의 제1 로우는 B15, B14, B13, 및 B12를 포함하고; 제2 로우는 B11, B10, B9, 및 B8을 포함하고; 제3 로우는 B7, B6, B5, 및 B4를 포함하며; 제4 로우는 B3, B2, B1, 및 B0을 포함한다.
멀티플렉서(104)(메모리 유닛(102)의 우측 상에 도시됨)는 메모리 유닛(102)의 컬럼들을 어드레싱하는 데 사용될 수 있다. 도시된 바와 같이, 멀티플렉서(104)는 다수의 멀티플렉서들(202)을 포함한다. 구체적으로는, 멀티플렉서(104)는 m개의 멀티플렉서(202)를 포함할 수 있고, 여기서 멀티플렉서들(202)은 각각 n-대-1 멀티플렉서들일 수 있다. 멀티플렉서들(202) 각각은 메모리 셀들의 특정 로우에 대응할 수 있는데, 그 각각은 메모리 셀들의 그 로우에서의 메모리 셀들에 연결될 수 있다. 예를 들어, 예시된 바와 같이, 도 2의 최상부 멀티플렉서(202)는 메모리 셀들의 제1 로우와 연관되고, 메모리 셀들의 제1 로우의 메모리 셀들에 대응하는 입력들 B15, B14, B13, 및 B12에 연결된다. 마찬가지로, 도 2의 최상부 멀티플렉서 아래의 멀티플렉서(202)는 메모리 셀들의 제2 로우와 연관되고, 메모리 셀들의 제2 로우에 대응하는 입력들 B11, B10, B9, 및 B8에 연결된다. 다른 멀티플렉서들(202)은 메모리 셀들의 로우와 연관되고 입력들로서 이들의 연관된 로우에서의 메모리 셀들에 연결되는 것으로서 유사하게 도시되어 있다. 멀티플렉서들(202) 각각은, 그의 입력들 중 하나의 입력의 선택에 대응하는 단일 출력을 갖는다.
메모리 셀들과 멀티플렉서들(202) 사이의 예시적인 커넥션들이 실선 화살표들로 도시되어 있다. 실선 화살표들은, 대응하는 메모리 셀로 이어지는 파선 화살표에 연결된다. 멀티플렉서(202)의 출력이 또한 화살표로 도시되어 있다. 출력 화살표 위의 텍스트는, 멀티플렉서(202)가 대응하는 메모리 출력의 특정 부분을 표시한다. 예를 들어, 도시된 바와 같이 4개의 멀티플렉서(202)가 있고, 그 각각은 1바이트의 메모리 유닛으로부터 선택하는데, 이는 4개의 멀티플렉서(202)의 조합된 출력이 (이 예에서는) 32비트 워드라는 것을 의미한다. 예시된 바와 같이, 최상부 멀티플렉서(202)는 32비트 워드의 비트들 [31:24]에 대응하고, 다음 멀티플렉서(202)는 비트들 [23:16]에 대응하고, 그 다음은 비트들 [15:8]에 대응하며, 최종적으로 최하부의 것은 비트들 [7:0]에 대응한다.
멀티플렉서(106)(메모리 유닛(102)의 하부 상에 도시됨)는 메모리 유닛(102)의 로우들을 어드레싱하는 데 사용될 수 있다. 도시된 바와 같이, 멀티플렉서(106)는 다수의 멀티플렉서들(204)을 포함한다. 구체적으로는, 멀티플렉서(106)는 n개의 멀티플렉서(204)를 포함할 수 있고, 여기서 멀티플렉서들(204)은 각각 m-대-1 멀티플렉서들일 수 있다. 멀티플렉서들(204) 각각은 메모리 셀들의 특정 컬럼에 대응할 수 있는데, 그 각각은 그 컬럼에서의 메모리 셀들에 연결될 수 있다. 예를 들어, 예시된 바와 같이, 도 2의 최좌측 멀티플렉서(204)는 메모리 셀들의 제1 컬럼과 연관되고, 메모리 셀들의 제1 컬럼의 메모리 셀들에 대응하는 입력들 B15, B11, B7, 및 B3에 연결된다. 마찬가지로, 도 2의 최좌측 멀티플렉서의 우측에 대한 멀티플렉서(204)는 메모리 셀들의 제2 컬럼과 연관되고, 메모리 셀들의 제2 컬럼에 대응하는 입력들 B14, B10, B6, 및 B2에 연결된다. 다른 멀티플렉서들(204)은 메모리 셀들의 컬럼과 연관되고 입력들로서 이들의 연관된 컬럼들에서의 메모리 셀들에 연결되는 것으로서 유사하게 도시되어 있다. 멀티플렉서들(202) 각각은, 그의 입력들 중 하나의 입력의 선택에 대응하는 단일 출력을 갖는다.
메모리 셀들과 멀티플렉서들(204) 사이의 예시적인 커넥션들이 파선 화살표들로 도시되어 있다. 파선 화살표들은 메모리 셀로부터 대응하는 멀티플렉서(204)로 직접 이어진다. 멀티플렉서(204)의 출력이 또한 화살표로 도시되어 있다. 출력 화살표 위의 텍스트는, 멀티플렉서(204)가 대응하는 메모리 출력의 특정 부분을 표시한다. 예를 들어, 도시된 바와 같이 4개의 멀티플렉서(204)가 있고, 그 각각은 1바이트의 메모리 유닛으로부터 선택하는데, 이는 4개의 멀티플렉서(204)의 조합된 출력이 (이 예에서는) 32비트 워드라는 것을 의미한다. 예시된 바와 같이, 최좌측 멀티플렉서(204)는 32비트 워드의 비트들 [31:24]에 대응하고, 다음 멀티플렉서(204)는 비트들 [23:16]에 대응하고, 그 다음은 비트들 [15:8]에 대응하며, 최종적으로 최우측의 것은 비트들 [7:0]에 대응한다.
메모리 셀(202)로부터의 원하는 메모리 출력(예를 들어, 예시된 32비트 워드)을 선택할 수 있는 멀티플렉서들(202, 204)에 부가적으로, 멀티플렉서들(104, 106)은 추가 멀티플렉서들을 더 포함할 수 있다. 예를 들어, 각각의 멀티플렉서(104)(메모리 유닛들(102)의 최좌측 컬럼과 연관된 멀티플렉서(104)는 제외함)는, 멀티플렉서(104)의 바로 좌측으로, 멀티플렉서(104)가 연관된 메모리 유닛(102)의 출력을 전달하거나 또는 메모리 유닛들(102)의 컬럼과 연관된 멀티플렉서(104)의 출력을 전달하는, 메모리 유닛(102)의 각각의 로우에 대한 2-대-1 멀티플렉서를 포함할 수 있다. 유사하게, 예를 들어, 각각의 멀티플렉서(106)(메모리 유닛들(102)의 최상부 로우와 연관된 멀티플렉서(106)는 제외함)는, 멀티플렉서(104)의 바로 위로, 멀티플렉서(106)가 연관된 메모리 유닛(102)의 출력을 전달하거나 또는 메모리 유닛들(102)의 로우와 연관된 멀티플렉서(106)의 출력을 전달하는, 메모리 유닛(102)의 각각의 컬럼에 대한 2-대-1 멀티플렉서를 포함할 수 있다.
방금 설명된 바와 같이, 컬럼 어드레싱 유닛(즉, 멀티플렉서들(104)의 집합체)은, 각각의 메모리 유닛(102)에 대한 n-대-1 멀티플렉서들 및 메모리 유닛들(102)의 컬럼들 중 하나로부터의 출력을 선택하기 위한 q-대-1 멀티플렉서를 갖는, 각각이 (n*q)-대-1 멀티플렉서들인 p*m개의 멀티플렉서를 포함할 수 있다. 이들 p*m개의 (n*q)-대-1 멀티플렉서는, 기능적으로 동등한 다수의 방식들로 구현될 수 있다. 예를 들어, q-대-1 부분은 q개의 2-대-1 멀티플렉서로서 분산될 수 있다. q=8을 예로 들면, 트리에서의 8개의 2-대-1 멀티플렉서는 하나의 8-대-1 멀티플렉서와 동등할 수 있다. 일반적으로, 컬럼 어드레싱 유닛의 멀티플렉서들은 그것이 회로로서 물리적으로 실현가능하도록 모듈러 방식으로 분산될 수 있다. 특정 구현은 또한, 예컨대 메모리 셀들과 멀티플렉서들 사이의 상호연결들을 개선시키도록, 추가로 최적화될 수 있다.
유사하게, 로우 어드레싱 유닛(즉, 멀티플렉서들(106)의 집합체)은, 각각의 메모리 유닛(102)에 대한 p-대-1 멀티플렉서들 및 메모리 유닛들(102)의 로우들 중 하나로부터의 출력을 선택하기 위한 p-대-1 멀티플렉서를 갖는, 각각이 (m*p)-대-1 멀티플렉서들인 q*n개의 멀티플렉서를 포함할 수 있다. 이들 q*n개의 (m*p)-대-1 멀티플렉서는, 기능적으로 동등한 다수의 방식들로 구현될 수 있다. 예를 들어, p-대-1 부분은 p개의 2-대-1 멀티플렉서로서 분산될 수 있다. p=8을 예로 들면, 트리에서의 8개의 2-대-1 멀티플렉서는 하나의 8-대-1 멀티플렉서와 동등할 수 있다. 일반적으로, 로우 어드레싱 유닛의 멀티플렉서들은 그것이 회로로서 물리적으로 실현가능하도록 모듈러 방식으로 분산될 수 있다. 특정 구현은 또한, 예컨대 메모리 셀들과 멀티플렉서들 사이의 상호연결들을 개선시키도록, 추가로 최적화될 수 있다.
캐시(100)는 판독 및 기입 동작들에 대한 유연한 접근법을 지원한다.
판독 동작들과 관련하여, 캐시(100)는 2개의 판독 포트, "X" 포트 및 "Y" 포트를 갖는 것으로 간주될 수 있다. "X" 포트는, 로우 어드레싱 유닛에 기초하여, 예컨대 상부로부터 하부로 (도 1 및 도 2에 도시된 바와 같은) 수직 방향으로 판독한다. "Y" 포트는, 컬럼 어드레싱 유닛에 기초하여, 예컨대 좌측으로부터 우측으로 (도 1 및 도 2에 도시된 바와 같은) 수평 방향으로 판독한다. 레인 선택 신호들이 출력을 형성하기 위해 어떤 메모리 셀들이 판독될지를 선택할 수 있다.
개별 메모리 유닛(102) 내의 판독 동작들과 관련하여, 도 2는 "X" 포트를 "x_rd"로서 그리고 "Y" 포트를 "y_rd"로서 라벨링한다. "X" 포트에 대한 예시적인 판독 동작으로서, 바이트들 B15, B14, B13, 및 B12(메모리 셀들의 제1 로우에 대응함)가 판독될 수 있고, 여기서 각각의 멀티플렉서(204)는 멀티플렉서(204)와 연관된 메모리 셀들의 컬럼에 대응하는 메모리 셀들의 제1 로우에서의 메모리 셀을 그의 출력으로서 선택하도록 시그널링된다. 유사한 방식으로, 메모리 셀들의 다른 로우들의 바이트들이 또한 판독될 수 있다. 다른 판독 패턴들이 또한 가능하다. 예를 들어, 예컨대 멀티플렉서들(204)이, 멀티플렉서(204)와 연관된 메모리 셀들의 컬럼에 대응하는 메모리 셀들의 증가하는 로우들에서의 메모리 셀을 이들의 출력으로서 선택하도록 시그널링되는 것에 의해, 다른 판독 동작이 바이트들 B3, B6, B9, B12(계단 타입의 패턴)를 판독할 수 있다. 마찬가지로, 바이트 패턴들 예컨대 B15, B10, B9, B4; 또는 B7, B6, B8, 및 B9가 판독될 수 있다. 그러나, 도 2에 예시된 실시예에서, (바이트들 B3, B7과 같은) 메모리 셀들의 동일한 컬럼에서의 2바이트가 "X" 포트에 의해 판독될 수 없는데, 이는 이들 양측 모두가, 단지 하나의 출력만을 갖는 동일한 멀티플렉서(204)에 의해 선택되어야 하기 때문이다. 그러나, "Y" 포트가 설명될 때 명백한 바와 같이, 메모리 셀들의 동일한 컬럼에서의 2바이트가 "Y" 포트에 의해 판독될 수 있다. 일반적으로, "X" 포트는, 메모리 셀들의 동일한 컬럼에서의 2바이트가 함께 판독되지 않는 한, 임의 패턴의 바이트들을 판독할 수 있다.
"Y" 포트에 대한 예시적인 판독 동작으로서, 바이트들 B15, B11, B7, 및 B3(메모리 셀들의 제1 컬럼에 대응함)이 판독될 수 있고, 여기서 각각의 멀티플렉서(202)는 멀티플렉서(202)와 연관된 메모리 셀들의 로우에 대응하는 메모리 셀들의 제1 컬럼에서의 메모리 셀을 그의 출력으로서 선택하도록 시그널링된다. 유사한 방식으로, 메모리 셀들의 다른 컬럼들의 바이트들이 또한 판독될 수 있다. 다른 판독 패턴들이 또한 가능하다. 예를 들어, 예컨대 멀티플렉서들(202)이, 멀티플렉서(202)와 연관된 메모리 셀들의 로우에 대응하는 메모리 셀들의 감소하는 컬럼들에서의 메모리 셀을 이들의 출력으로서 선택하도록 시그널링되는 것에 의해, 다른 판독 동작이 바이트들 B3, B6, B9, B12(계단 타입의 패턴)를 판독할 수 있다. 마찬가지로, 바이트 패턴들 예컨대 B15, B10, B6, B1; 또는 B14, B10, B5, 및 B1이 판독될 수 있다. 그러나, 도 2에 예시된 실시예에서, (바이트들 B5, B4와 같은) 메모리 셀들의 동일한 로우에서의 2바이트가 "Y" 포트에 의해 판독될 수 없는데, 이는 이들 양측 모두가, 단지 하나의 출력만을 갖는 동일한 멀티플렉서(202)에 의해 선택되어야 하기 때문이다. 그러나, 메모리 셀들의 동일한 로우에서의 그러한 2바이트가 "X" 포트에 의해 판독될 수 있다. 일반적으로, "Y" 포트는, 메모리 셀들의 동일한 로우에서의 2바이트가 함께 판독되지 않는 한, 임의 패턴의 바이트들을 판독할 수 있다.
캐시(100)에 대한 판독 동작은 개별 메모리 유닛들(102)에 대해 방금 설명된 것과 유사하게 동작한다. (예를 들어, 단일 클록 사이클에 대응하는) 주어진 판독 사이클에서, "X" 및 "Y" 포트들 각각은 ("X" 포트에 대한) 메모리 유닛들(102)의 각각의 컬럼에 대한 최대 m개의 메모리 셀을 또는 ("Y" 포트에 대한) 메모리 유닛들(102)의 각각의 로우에 대한 최대 n개의 메모리 셀을, (전체 캐시에 걸쳐, "X" 포트에 대한) 최대 q*m개의 메모리 셀까지 또는 (전체 캐시에 걸쳐, "Y" 포트에 대한) 최대 p*n개의 메모리 셀까지 선택하도록 시그널링될 수 있다. p, q, m, 및 n의 예시된 값들을 이용하면, 그것은, 최대 32바이트까지, 메모리 유닛들(102)의 각각의 로우 또는 컬럼으로부터 최대 4바이트가 판독되는 것과 동일하다. 메모리 유닛들(102)의 일부 로우들 또는 컬럼들은 선택된 어떠한 메모리 셀들도 갖지 않을 수 있고, 메모리 유닛들(102)의 일부 로우들 또는 컬럼들은 선택된 이들의 메모리 유닛들 중 단지 일부만을 가질 수 있다. "X" 및/또는 "Y" 포트들에 의해 판독되는 메모리는, 벡터(예를 들어, 피연산자 벡터)로 (예를 들어, 함께 판독되는 바이트들을 연접함으로써) 어셈블링될 수 있어서 프로세싱 요소가 그것에 대해 동작할 수 있다. 단일 명령어 다중 데이터(single instruction multiple data)(SIMD) 프로세싱 요소와 같은 프로세싱 요소(예컨대, 도 9에 도시된 벡터 프로세서(902))가 특정 사이즈의 데이터, 예를 들어, 128비트에 대해 동작하도록 설계될 수 있다.
프로세싱 요소에 대해 벡터를 준비하는 것은, 캐시(100)로부터, 프로세싱 요소가 동작하는 벡터로 메모리의 단지 관련 세트(예를 들어, 단지 관련 픽셀들에만 대응함)만을 전송하기 위해 "X" 및 "Y" 포트들 양측 모두에 대한 추가 멀티플렉싱 및 정렬 동작들을 더 포함할 수 있다. 일부 경우들에서, 캐시(100)의 전체 폭으로부터, 예컨대 메모리 유닛들(102) 중 임의의 메모리 유닛의 임의의 메모리 셀로부터, 메모리(예를 들어, 픽셀들에 대응함)를 선택 및 판독하는 것이 유용할 수 있다. 다른 경우들에서, 더 작은 관심 영역을 격리하고, 그에 따라 더 작은 관심 영역 상에 포커싱함으로써 효율성(예를 들어, 전력 효율성)을 개선시키는 것이 가능할 수 있다. 이 실시예는 아래에 설명될 것이다.
메모리 셀들의 다수의 로우들 또는 컬럼들이 병렬로 판독될 수 있다. 그러한 판독을 용이하게 하기 위해 어드레스 템플릿(아래에 설명됨)이 사용될 수 있다. 예컨대 이러한 방식으로, 메모리 셀들의 상이한 패턴들을 판독하는 것은, 이미지 피처(image feature)들을 추출하는 것을 포함하여, 이미지들을 분석 또는 프로세싱하는 것과 관련된 것들과 같은 특정 적용예들에서 특히 유용할 수 있다. 선형 대수가 또한 다른 적용 분야일 수 있다. 예를 들어, "X" 판독 포트는 데이터의 로우에의 액세스를 제공할 수 있고 "Y" 판독 포트는 동일한 판독 사이클(예를 들어, 단일 클록 사이클에 대응함)에서 데이터의 컬럼에의 액세스를 제공할 수 있는데, 이는 일부 알고리즘들에게 이익이 될 수 있다. 더 일반적으로는, 다른 타입들의 다차원 데이터가, 본 명세서에 개시된 실시예들에 의해 비선형 방식으로 액세스될 수 있고, 그에 따라 비선형 방식으로 데이터에 액세스할 필요가 있을 수 있는 알고리즘들이 이들 실시예들에 의해 이익을 얻을 수 있다.
판독 동작들을 위한 복잡한 어드레싱 스킴(scheme)이 배선 복잡성 및 판독 유연성에 있어서 트레이드오프를 도입시킬 수 있다. 일부 적용예들에서, 주어진 클록 사이클 동안 단지 "X" 또는 "Y" 포트들 중 하나에서만 유연한 판독 동작을 구현하는 것이 바람직할 수 있다. 그러나, 다른 적용예들에서, 동일한 클록 사이클 내에서 "X" 및 "Y" 포트들 양측 모두에서 판독 동작을 갖는 유연성이 도움이 될 수 있고 복잡성 및 추가 전력에 있어서 트레이드오프할 가치가 있을 수 있다. 예를 들어, 도 3은 이미지 프로세싱 알고리즘에 의해 분석되고 있는 예시적인 이미지를 예시한다. 박스들에서의 "1", "2", "3" 등 최대 "8"의 숫자들(픽셀과 같은 이미지의 하위 영역을 표현함)은, 분석될 필요가 있는 경로들을 표기한 것인데, 이때 동일한 숫자들이 동일한 경로들을 표기한다. 단일 판독 사이클에서 "8"로 표기된 최우측 경로에 액세스하기 위한 알고리즘의 경우, "X" 포트에서 5개의 하위 영역 중 4개가 수직 방향으로 판독 경합을 갖기 때문에 "Y" 포트가 필요하다(파선 수평 화살표들 참조). "X" 포트가 사용된 경우, 그것은 이들을 판독하는 데 2회의 판독 사이클이 걸릴 것이다(파선 수직 화살표들 참조). 다른 한편으로, 다른 때에는 알고리즘이 "X" 포트를 사용하는 것이 더 효율적이라는 것을 발견할 수 있다. 그러한 경우들에서, "X" 및 "Y" 포트들 양측 모두에 의해 제공되는 유연한 판독을 갖는 것이 이롭다. "X" 포트와 "Y" 포트 양측 모두에서 판독 경합이 있는 경우와 같은 다른 경우들에서, 동일한 클록 사이클에서 "X" 및 "Y" 포트들 양측 모두로부터 판독하는 것이 유용할 수 있다. 이것은 주어진 세트의 메모리 셀들을 판독하기 위해 요구되는 클록 사이클들의 총 수를 감소시킬 수 있다.
기입 동작들과 관련하여, 캐시(100)는 거의 임의 기입 동작들을 가능하게 하기 위해, 판독 동작들과 유사한 능력을 지원할 수 있다. 그러나, 일부 실시예들에서, 기입은, 예컨대 메모리 셀들의 동일한 로우에서의 바이트들에 대해 단지 "X" 포트에서만 또는 메모리 셀들의 동일한 컬럼에서의 바이트들에 대해 단지 "Y" 포트에서만 기입하는 것, 또는 "X" 또는 "Y" 포트들에서, 그러나 단지 메모리 셀들 각각의 동일한 로우 또는 컬럼에 대해 기입하는 것에 대해 가능하게 함으로써, 훨씬 더 단순한 방식으로 구현될 수 있다. 예를 들어, 기입은 정상 레지스터 파일에서와 동일한 동작일 수 있다. 일부 적용예들에서, 상이한 판독 패턴들을 수행하는 것이 가능하다는 유용성이 반드시 기입으로 이어지지는 않고, 그에 따라 캐시(100)는 더 단순한 기입 동작을 가짐으로써 더 단순하게 구현될 수 있다. 예를 들어, 이미지 분석 알고리즘은 특정 액세스 패턴들을 활용하여 이미지를 분석하는 것이 가능할 수 있지만, 이들 액세스 패턴들을 사용하여 이미지를 업데이트할 필요가 없을 수 있다.
프로세싱을 위해 사용되는 메모리 유닛들(102)의 부분이 가상 캔버스(virtual canvas)라고 지칭된다. 본 명세서에서 설명되는 바와 같이, 이것은 모든 메모리 유닛들(102), 또는 이들의 서브세트를 포함할 수 있다. 더 나아가(피연산자 영역(402)에 대해 설명된 것과 유사하게), 가상 캔버스는, 이들 메모리 유닛들(102)에서 현재 미러링되고 있는 원격 메모리의 내용들을 또한 참조할 수 있다.
전형적으로, 캐시의 가상 캔버스는 판독 중심 리소스일 수 있고, 일 적용예가 프로세싱(예를 들어, 이미지 필터링) 동안 기입들보다 원격 메모리로부터 상당히 더 많은 판독들을 수행하려는 경향에 의존할 수 있다. 예를 들어, 이미지 분석 동안, 일부 적용예들은 이미지 메모리에 기입들을 전혀 수행하지 않을 수 있다. 그에 따라, 캐시의 일부 실시예들은 주로 또는 배타적으로 "write around" 거동에 의존할 수 있고, 일부 다른 캐시들이 채용하는 "write through" 또는 "write back" 거동을 위한 메커니즘들을 갖지 않을 수 있다. "write through", "write back", 및 "write around" 거동은, 기입할 때 I/O 완료의 시그널링, 그리고 구체적으로는 원격 메모리가 업데이트될 때("write around"), 캐시가 업데이트될 때("write back"), 또는 단지 이들 양측 모두가 업데이트된 후에만("write through") I/O 완료가 시그널링되는지 여부를 지칭한다. 이들 실시예들에서, 프로세싱 요소는 "write around" 거동을 수행할 수 있고, 여기서 드문 원격 메모리 업데이트들이 캐시를 완전히 우회하고 원격 메모리로 직접 이동한다. 그러한 거동은 캐시의 동작을 단순화시키고, 전통적인 공간 필터링 기법들로부터의 수정을 겪은 가상 캔버스에서의 원격 메모리의 부분을 자연스럽게 보존한다. 이것은, 실시예들이, 원격 이미지 메모리에 대해 캐시 코히어런스(cache coherence)를 유지하는 것과 연관된 성능 절충들을 회피하기 위한 특정 프로세싱 적용예들(예를 들어, 이미지 프로세싱 및 분석)의 고유한 요구들을 활용하게 한다.
상기에 논의된 바와 같이, 더 작은 관심 영역을 격리하고, 판독 또는 프로세싱 동작들 동안 그 영역 상에 포커싱하는 것이 가능할 수 있는 경우들이 있다. 이 더 작은 관심 영역은 피연산자 영역이라고 지칭될 수 있다. 실시예들에서, 피연산자 영역은 원점을 포함할 수 있고, 그 영역은 임의의 특정 형상 또는 사이즈로 된 것일 수 있는데, 예를 들어, 피연산자 영역은 원형 또는 타원체일 수 있고, 반경 또는 길이 및 폭에 의해 설명될 수 있다.
도 4는 일 실시예에 따른 피연산자 영역(402)을 예시한다. 캐시(100)는 예시 목적들을 위해 일부의 메모리 유닛들(102)이 제거된 상태로 도시되어 있다. 피연산자 영역(402)은 가상 원점(404)과 연관되고 (부분적으로 또는 전체적으로) 하나 이상의 메모리 유닛(102)을 포괄한다. 일반적인 경우에, 피연산자 영역(402)은, 하나 이상의 메모리 유닛(102)을 포괄하는 임의의 특정 형상일 수 있다. 도시된 바와 같이, 피연산자 영역(402)은, 가상 원점(404)에 거의 센터링된 원이다. (본 명세서에 설명된 것들과 같은) 어드레스 템플릿들을 사용함으로써, 피연산자 영역(402) 내의 임의의 피연산자가 도달가능하다.
피연산자 영역(402)은 하나 이상의 메모리 유닛(102)을 포괄하는 영역인 것으로서 도 4에 예시되어 있다. 더 나아가, 하나 이상의 메모리 유닛(102)의 내용들에 의해 표현된 원격 메모리의 영역(즉, 이들 메모리 유닛들(102)에서 미러링되는 원격 메모리의 부분)은 또한 피연산자 영역(402)으로서 간주될 수 있다.
피연산자 영역(402)의 범주는, 사용되는 어드레스 템플릿의 설계에 의해 결정될 수 있다. 예를 들어, 어드레스 템플릿은 가상 원점(404)에 대한 초기 피연산자를 참조하기 위해 2의 보수(twos-complement number)를 사용할 수 있다. n비트의 2의 보수에 대해, 제1 피연산자는 가상 원점(404)에 대해 -2n 내지 +2n-1의 범위에서의 어느 곳에나 속할 수 있다. 추가 피연산자들이 동일한 방식으로(즉, 가상 원점(404)에 대해) 계산될 수 있고, 이 경우에 도 4에 도시된 음영 처리된 피연산자 영역(402)은, 어드레스 템플릿에 의해 가상 원점(404)으로부터 도달가능한 피연산자들을 대표한다. 대안적으로, 이전 피연산자로부터의 오프셋들과 같은 다른 피연산자들로부터의 오프셋들로서 추가 피연산자들이 계산될 수 있다. 피연산자들의 수, 각각의 피연산자를 유도하는 데 사용되는 비트들의 수, 그리고 각각의 피연산자가 유도되는 방법에 따라, 주어진 어드레스 템플릿에 의해 가상 원점(404)으로부터 도달가능한 모든 피연산자들을 포괄하는 영역(피연산자 영역(402))은 불규칙한 형상일 수 있고, 캐시(100)에서의 모든 또는 거의 모든 메모리 유닛들(102), 또는 적어도 원격 메모리를 미러링하고 있는 메모리 유닛들(102)을 커버할 수 있다.
판독 동작을 피연산자 영역(402) 내의 메모리 셀들만을 단지 판독하는 것으로 제한하는 것은, 전력 효율성을 개선시키는 것과 같이, 프로세싱 요소에 대해 피연산자 벡터를 형성하는 효율성을 개선시킬 수 있다.
논의 목적들을 위해, 다음의 설명은 예시적인 적용예로서 이미지 분석 알고리즘을 취한다. 논의는, 본 명세서에서 설명되는 캐시(100)를 이용할 수 있는 다른 적용예들에 일반적으로 적용가능한 것으로서 이해되어야 한다. 또한, 논의 목적들을 위해, 캐시(100)는 p = q = 8 그리고 m = n = 4를 갖도록 가정될 것이고, 이때 메모리 셀의 사이즈는 1바이트이다.
캐시(100)의 메모리 셀들은, 이미지에 대한 픽셀 데이터와 같은, 원격 메모리의 내용들을 포함한다. 이 논의를 위해, 원격 메모리 및 이미지 메모리는, 실시예들을 이미지 데이터로 제한하는 일 없이, 상호교환가능하게 사용될 것이다. 이 논의를 위해, 캐시(100)는, 분석되고 있는 이미지를 포함하는 것으로 가정될 것이다. 전형적으로 이미지 데이터(예를 들어, 256x256바이트 = 65536바이트 = 64KB)는 캐시(100)의 사이즈(이 예에서는 1KB)보다 훨씬 더 클 것이고, 그에 따라 캐시(100)는 임의의 주어진 시간에 이미지 데이터의 일 부분만을 저장하는 것이 단지 가능할 것이고, 여기서 그 부분은 개념적으로 전체 이미지에 대한 2차원 윈도우이다. 이 예의 경우, 이미지 데이터가 64KB의 최대 사이즈를 갖는다고 가정된다.
뒤따르는 논의에서, "가상 어드레스" 및 "물리적 어드레스"라는 용어들은, 캐시(100)의 내용들을 어드레싱하기 위한 상이한 스킴들을 지칭한다. 여기서 사용되는 바와 같이, 물리적 어드레스는, 개별 메모리 셀의 관점에서 캐시(100)의 어드레스를 지칭한다. 이 예에서, 그것은 물리적 어드레스가 10비트, 즉, "x 어드레스"를 선택하기 위한 5비트 그리고 "y 어드레스"를 선택하기 위한 5비트를 요구하는데, 이들 각각이 0과 31 사이에 있다는 것을 의미한다. 다른 한편으로, 가상 어드레스는, 캐시(100)에서 미러링되는 이미지 데이터의 부분을 지칭한다. 이 예에서, 그것은 가상 어드레스가 16비트, 즉, "x 어드레스"를 선택하기 위한 8비트 그리고 "y 어드레스"를 선택하기 위한 8비트를 요구하는데, 이들 각각이 0과 255 사이에 있다(이 예에서 이미지의 최대 사이즈에 기초함)는 것을 의미한다. 일부 실시예들에서, 가상 어드레스들은 메모리 유닛(102)의 입도(granularity)로만 단지 분해된다. 예를 들어, 가상 어드레스의 x 및 y 부분들 각각에 대한 6개의 최상위 비트(most significant bit)는, 메모리 유닛(102)에 맞는 이미지 데이터의 특정 부분을 참조하는 데 사용될 수 있고, 가상 어드레스의 x 및 y 부분들 각각에 대한 2개의 최하위 비트(least significant bit)는 그 메모리 유닛(102) 내의 메모리 셀을 참조하는 데 사용될 수 있고 그에 따라 동일한 메모리 셀을 표현하는 물리적 어드레스의 2개의 최하위 비트에 대응할 수 있다. 캐시(100)가 이미지보다 더 작은 경우(즉, 이미지 전체가 캐시(100) 내에 포함될 수 없다), 물리적 어드레스들보다 더 많은 가상 어드레스들이 있을 것이다. 가상 어드레스와 물리적 어드레스 사이에 매핑이 있을 수 있다; 그에 따라, 가상 어드레스는 (이미지 메모리를 표현하는 가상 어드레스가 캐시(100)에서 현재 미러링되고 있는 한) 개별 메모리 셀을 간접적으로 참조한다.
일부 실시예들에서, 캐시(100) 내에서 판독되고 있는 이미지에서의 가장 이른 포지션에 대응하는 메모리 유닛(102)의 가상 어드레스(예를 들어, 가상 캔버스의 하부 좌측 메모리 유닛(102))는 짝수 4바이트 경계(로우 높이 및 컬럼 폭)에 정렬되어야 하지만, 다른 제약들은 없다. 짝수 4바이트 경계에 대한 정렬은 그것이 메모리 유닛(102)의 사이즈(즉, 이 예에서, 4바이트 x 4바이트)이기 때문에 실시예들에서 유리하다. 상기에 논의된 바와 같이, 가상 어드레싱은, 단일 메모리 유닛(102)의 입도로 분해되기 때문에, 짝수 4바이트 경계 정렬을 유지함으로써, 메모리 유닛들(102)의 "가상 컬럼들" 또는 "가상 로우들"이 리프레시 동작, 즉, 원격 메모리의 상이한 부분들에 걸쳐 캐시(100)를 마이그레이션하는 것을 단순화시키는 동작 동안 쉽게 재할당될 수 있다. 이 정렬을 유지함으로써, 원격 메모리에 걸친 마이그레이션이 임의의 주어진 방향으로 4바이트의 증분들로 항상 행해질 수 있다.
전형적인 경우에, 캐시(100)는 한 번에 분석되는 모든 이미지를 포함할 만큼 크지 않기 때문에, 이미지 분석 알고리즘을 수행하기 위해서는 캐시(100)의 내용들을 리프레시하기 위한 캐시 관리 정책을 갖는 것이 유리하다. 이 캐시 관리 정책은 많은 형태들을 취할 수 있다. 주요 목표는 이미지 분석 알고리즘에 의해 필요한 이미지 데이터가 적시에 캐시(100)에서 미러링되는 것이다. 예를 들어, 일부 알고리즘들에서, 주어진 시간에 특정 영역에서의 이미지 데이터가 필요할 것이라고 합당한 정확도로 예측하는 것이 가능할 수 있다. 예를 들어, 도 3과 관련하여 설명된 바와 같이, 알고리즘이 경로를 따르고 있을 수 있고, 경로 정보에 기초하여 이미지 데이터를 예측하는 것이 가능할 수 있다. 다른 알고리즘들에서, 프로세싱되는 이미지 데이터에 대해 일부 다른 방향성이 있을 수 있다. 또 다른 알고리즘들에서, 어떤 이미지 데이터가 필요할 수 있는지를 예측하기 위해 (예를 들어, 이미지, 알고리즘, 또는 다른 것에 관한) 다른 정보가 이용될 수 있다.
캐시 관리 정책의 일 예는, 가상 원점(404)을 사용하고, 가상 원점이, 캐시(100)에서 미러링되는 이미지에 대한 윈도우의 경계에 접근할 때 캐시(100)를 리프레시하는 것이다. 예를 들어, 가상 원점(404)이, 캐시(100)에서 미러링되는 이미지 데이터의 상부에 가까운 경우, 그러면 캐시(100)에서 미러링되는 이미지 데이터의 하부가 덜 필요할 가능성이 있고, 캐시(100)에서 현재 미러링되고 있는 상부 위에 위치된 이미지 데이터로 대체(예를 들어, 업데이트 또는 리프레시)될 수 있다고 추측될 수 있다. 이러한 방식으로, 캐시(100)에서 미러링되는 원격 메모리의 영역은 이미지 분석 알고리즘의 요구들을 예상하도록 변경될 수 있다. 이미지 분석 알고리즘은 캐시(100)의 내용들을 관리하기 위해 그의 프로세싱에 기초하여 가상 원점(404)을 이동시켜, 캐시(100)로 하여금 때때로 업데이트 또는 리프레시 동작들을 트리거하게 할 수 있다. 때로는, 이러한 방식으로 업데이트 또는 리프레시하는 대신에, 캐시(100)는, 예컨대 이미지 분석 알고리즘이 가상 캔버스 외측의 피연산자들을 참조할 때, 요구 기반(종래의 중앙 프로세싱 유닛(central processing unit)(CPU) 캐시와 유사함)으로 리프레시할 수 있다. 이것은, 더 많은 데이터가 캐시 내에서 판독되어야 할 필요가 있으므로, 성능에 있어서 얼마간의 손실이 발생할 수 있지만, 이미지의 임의 부분들을 참조하기 위한 이미지 분석 알고리즘에 유연성을 또한 제공할 수 있다.
가상 원점(404) 및 연관된 피연산자 영역(402)이 이동함에 따라, 캐시(100)에서의 메모리 셀들은 이미지 데이터의 상이한 부분들로 리프레시 또는 업데이트될 필요가 있을 수 있다. 실제로, 가상 원점(404) 및 연관된 피연산자 영역(402)이 이동함에 따라, 가상 캔버스에서 미러링된 이미지의 부분이 이에 따라 이동하여, 예를 들어 가상 원점(404)이 가상 캔버스 내에서 거의 센터링된 상태로 유지되도록 한다. 일부 실시예들은 가상 원점(404)에 대해 피연산자 영역(402)의 형상 또는 오프셋을 바이어싱할 수 있거나, 또는 특정 적용예의 요구들을 충족시키기 위해 가상 캔버스의 특정 부분에서 가상 원점(404)을 유지하도록 캐시 리프레시 정책을 바이어싱할 수 있다.
이미지를 프로세싱하는 일 예가 이제 설명될 것이다. 프로세싱에 앞서, 로드/저장 유닛(예컨대, 도 9에 도시된 로드/저장 유닛(906))은 캐시(100)에서의 메모리 셀들 중 일부 또는 전부를 채울 수 있다. 예를 들어, 로드/저장 유닛은 원격 메모리에, 예컨대 정적 랜덤 액세스 메모리(static random access memory)(SRAM)에 저장된 이미지 데이터로부터 메모리 셀들을 채울 수 있다. 전형적으로 이미지들은 SRAM에 선형으로 저장되는데, 이때 픽셀들의 하나의 로우가 다른 로우 다음에 순차적으로 저장된다. (예를 들어, 픽셀들의 로우들을 따르는) 판독들의 시퀀스가 캐시(100)에서의 메모리 셀들을 채우는 데 사용될 수 있다. 일단 캐시(100)가 이미지 데이터의 일 부분으로 초기화되면, 프로세싱이 발생할 수 있다. 프로세싱이 발생함에 따라, 프로세싱 요소는 가상 원점(404)을 이동시킬 수 있고 연관된 피연산자 영역(402)은 가상 원점(404)과 함께 이동할 수 있다. 가상 원점(404)이, 우측 에지 또는 하부 에지와 같은, 가상 캔버스의 에지에 접근할 때, 로드/저장 유닛은 적절한 메모리 어드레스들(즉, 접근되는 에지에 저장된 것에 인접한 이미지 데이터를 표현하는 어드레스들)로부터 이미지 데이터를 페치(fetch)하여 캐시(100)에서의 메모리 셀들을 그 데이터로 파퓰레이팅(populate)한다. 가상 캔버스의 에지는, 가상 캔버스에서 현재 미러링되고 있는 원격 메모리로부터의 이미지에 대한 윈도우의 경계를 의미한다.
아래에 나타낸 바와 같이, 이 윈도우가 이미지 주위로 이동할 때, 가상 캔버스에서 미러링되는 내용은 오름차순으로 메모리 유닛들(102)의 가상 로우 또는 컬럼 번호들을 유지하지만, 프로세스에서 물리적 로우 또는 컬럼 번호들의 순서를 변경한다. 가상 캔버스의 우측 에지에 접근할 때, 예를 들어, 캐시(100)에서의 메모리 유닛들(102)의 "새로운" 컬럼이, 가상 원점(404)으로부터 현재 가장 멀리 있는 메모리 유닛들(102)의 컬럼을 효과적으로 제거함으로써 파퓰레이팅될 수 있다. 즉, 메모리 유닛들(102)의 최좌측 물리적 컬럼이 최우측 물리적 컬럼의 우측에 대한 가상 어드레스들로부터의 이미지 데이터로 다시 파퓰레이팅될 수 있다. 유사하게, 가상 캔버스의 하부 에지에 접근할 때, 예를 들어, 캐시(100)에서의 메모리 셀들의 "새로운" 로우가, 가상 원점(404)으로부터 현재 가장 멀리 있는 메모리 유닛들(102)의 로우를 효과적으로 제거함으로써 파퓰레이팅될 수 있다. 즉, 메모리 유닛들(102)의 최상부 물리적 컬럼이 최하부 물리적 컬럼 아래의 가상 어드레스들로부터의 이미지 데이터로 다시 파퓰레이팅될 수 있다. 이 업데이팅은 캐시(100)에서의 다른 메모리 유닛들(102)의 내용들을 재위치시킬 필요 없이 발생한다. 이미지 데이터(가상 어드레스)의 어떤 부분이 어떤 메모리 유닛(102)(물리적 어드레스)에 할당되는지를 추적하기 위해 (예를 들어, 가상 컬럼 번호들과 물리적 컬럼 번호들 사이의) 매핑이 유지된다.
상기에 언급된 바와 같이, 일부 실시예들에서 가상 어드레스는 단지 메모리 유닛(102)의 입도로만 분해되고, 메모리 유닛(102) 내의 메모리 셀을 참조하는 가상 어드레스의 부분은, 메모리 유닛(102) 내의 그 메모리 셀의 물리적 어드레스와 동일하다. 즉, (이 예에서는) 16비트 어드레스를 8비트 로우 어드레스(x 어드레스)와 8비트 컬럼 어드레스(y 어드레스)로 생각할 수 있다. "가상 어드레스"라는 용어는 그 전체 8비트 로우 또는 컬럼 어드레스를 지칭할 수 있지만, 단지 상위 또는 최상위 6비트(이는 원격 메모리에서의 이미지에 대한 메모리 디바이스들(102)의 64개의 로우 또는 컬럼 중 하나를 특정한다)만이 가상인 것인 반면, 하위 또는 최하위 2비트(이는 메모리 유닛(102) 내의 메모리 셀의 4개의 로우 또는 컬럼 중 하나를 특정한다)는 물리적인 것이다. 다시 말해, 상위 6비트는, 캐시(100)에서의 메모리 유닛들(102)의 어떤 물리적 로우 또는 컬럼이 윈도우의 가상 로우 또는 컬럼에 대응하는지를 원격 메모리에 동적으로 매핑시키기 위해 어드레스 변환을 겪는다. 하위 또는 최하위 2비트는 어드레스 변환을 겪지 않고 특정된 대로 정확하게 4바이트 중 하나를 조회한다. 다른 어드레싱 또는 변환 스킴들이 또한 가능하다.
사이즈 256x256(64KB)의 이미지의 경우, 캐시(100)(이 예에서는 1KB)는 이미지 데이터의 최대 1/64만을 단지 포함할 수 있다. 그것은, 임의의 경우에 캐시(100)에서의 이미지의 부분이 전체 이미지의 내용들에 대한 작은 윈도우라는 것을 의미한다. 이 작은 윈도우의 포지션은, 이미지가 프로세싱됨에 따라 이동할 수 있지만, 윈도우의 사이즈는 동일하게 유지된다.
원격 메모리(예를 들어, SRAM)는 전형적으로, 이미지 사이즈가 256x256픽셀인, 바이트들의 선형 어레이로서 이미지를 표현하기 때문에, 일부 오프셋 addr에서 시작하여 addr+65535까지 어드레싱될 수 있는 메모리에 저장된 256개의 연접된 로우가 있을 것이다. 이 배열의 하나의 암시는, 임의의 주어진 순간에 캐시(100)가 원격 메모리에서의 선형 어레이로부터의 바이트들의 32개의 단편화된 간격을 포함할 수 있고, 이들 각각의 시작은 256바이트(하나의 로우의 길이)로 분리된다는 것이다. 예를 들어, 하부 좌측 메모리 유닛(102)이 가상 로우=8 그리고 가상 컬럼=2에 매핑되는 경우, 캐시(100)에서의 메모리 유닛들(102)의 로우들은 선형 어레이 엔트리들 addr+2112 내지 addr+2143, addr+2368 내지 addr+2399, addr+2624 내지 addr+2655 등을 addr+3904 내지 addr+3935까지 포함한다.
이것은 도 10a 및 도 10b에서와 같이 예시될 수 있다. 도 10a는 바이트들의 선형 어레이(1002)에서의 원격 메모리를 예시한다. 예를 들어, 이미지는 0x0000 내지 0xffff(즉, 0 내지 216-1)의 범위에 있는 어드레스들에 의해 선형으로 표현될 수 있다. 그 메모리의 일 부분(1004)이, 다수의 32바이트 스트라이프(또는 간격)(1006)와 함께, 확대되어 도시되어 있다. 이들 32바이트 스트라이프들(또는 간격들)은 224바이트(즉, 256바이트 - 32바이트)로 분리되어 있는데, 이는 이미지의 폭(이 예에서는 256바이트)과 캐시(100)의 하나의 로우에서의 메모리 셀들의 수(즉, 이 예에서 32바이트와 동일한 q*n) 사이의 차이이다. 이미지의 폭으로 각각이 분리된 순차적인 32바이트 스트라이프들은, 예를 들어, 하부 좌측 메모리 유닛(102)에서 시작하여, 캐시(100) 내에 채워질 수 있다. 바이트들의 선형 어레이(1002)는 또한 도 10b에 도시된 바와 같은 2차원 구조로서 간주될 수 있다. 2차원 이미지(1010)는 바이트들의 선형 어레이(1002)로서 원격 메모리 상에서 실현될 수 있다. 캐시(100)는, 이미지의 폭으로 각각이 분리되는 순차적인 32바이트 스트라이프들로 표현되는 부분인, 이미지의 부분(1012)의 내용들을 포함할 수 있다.
일부 실시예들에서, 캐시(100)에서의 모든 메모리 셀들은 이미지 프로세싱 알고리즘에 의한 프로세싱을 위해 사용될 수 있다. 다른 실시예들에서, 캐시(100)에서의 메모리 유닛들(102)의 단지 부분만이 이미지 프로세싱 알고리즘에 의한 프로세싱을 위해 사용된다. 상기에 설명된 바와 같이, 프로세싱을 위해 사용되는 메모리 유닛들(102)의 부분이 가상 캔버스라고 지칭된다. 예를 들어, 저역 통과 이미지 필터링을 위해 캐시의 단지 상위 절반(메모리 유닛들(102)의 상위 4개의 로우 x 8개의 컬럼)만이 필요할 수 있고, 특정 다른 이미지 프로세싱 알고리즘들, 예를 들어, 피처 추출을 수행하는 것과 같은 다른 적용예들을 위해 메모리 유닛들(102)의 단지 6개의 로우 x 6개의 컬럼의 서브세트만이 필요할 수 있다. 그 후에, 그것은 메모리 유닛들(102)의 적어도 하부 2개의 로우 및 최좌측 2개의 컬럼이 스크래치패드 공간으로서 이용가능하게 되어, 예를 들어, 작업 변수들에 사용되는데, 이때 나머지는 가상 캔버스(원격 메모리의 섹션을 미러링하는 캐시(100)의 부분)로서 사용된다. 일부 실시예들에서, 로드/저장 유닛이 이미지 데이터로 메모리 셀들을 채우고 있을 때, 그리고 피연산자 영역(402)이 캐시의 에지에 접근하고 있는 때를 결정할 때, 스크래치패드 공간을 위해 예비된 메모리 유닛들(102)의 수(있는 경우)는 가상 캔버스를 단지 업데이트 또는 리프레시하는 것으로 고려된다. 즉, 자동으로 리프레시 또는 업데이트되는 메모리 유닛들(102)의 수는 주어진 적용예의 요구들에 따라 구성되는데, 이는 관련없는 메모리 트래픽을 최소화시키는 데 도움이 될 수 있다.
프로세싱 요소가 스크래치패드 공간에 저장된 로컬 변수들에 액세스할 때, 그것은 메모리 유닛들(102)의 물리적 어드레스를 사용하고 캐시(100)를 레지스터 파일로서 취급한다. 스크래치패드 공간에의 코히어런트 액세스는, 가상 캔버스에 영향을 미치는 리프레시 또는 업데이트 동작들이, 스크래치패드 공간으로서 사용되는 메모리 유닛들(102)을 변경(예를 들어, 오버라이트 또는 스크램블)하지 않는 것을 요구한다.
캐시(100)에서의 이미지 데이터에 액세스할 때, 프로세싱 요소는, 캐시(100)에서 미러링된 이미지 데이터의 부분을 반영하는 가상 어드레스들을 사용할 수 있다. 가상 원점(404)이 좌측 또는 우측 에지들에 접근하고 메모리 유닛들(102)의 "새로운" 로우 또는 컬럼이 파퓰레이팅되게 함에 따라, 가상 어드레스들이 업데이트된다. 가상 캔버스가 원격 메모리의 상이한 부분들을 저장하므로, 업데이트 또는 리프레시 프로세스가, max 내지 min 로우 인덱스의 랩어라운드(wraparound)를 마킹하는 수평 라인, 및 max 내지 min 컬럼 인덱스의 랩어라운드를 마킹하는 수직 라인(아래의 예에서 굵은 라인들로서 도시됨)을 추적할 수 있다.
다음의 시퀀스는 캐시(100)의 가상 캔버스가 메모리 유닛들(102)의 6개의 로우 x 8개의 컬럼이고 스크래치패드 공간이 메모리 유닛들(102)의 2개의 로우 x 8개의 컬럼인 일 예를 예시한다. 캐시(100)는 이미지 데이터의 로우 8, 컬럼 2에서 시작하여 초기화되는데, 이때 그 이미지 데이터는 하부 좌측 메모리 유닛(102)으로 이동한다.
초기화될 때, 캐시는 다음과 같이 보인다.
Figure pct00001
로드/저장 유닛이 가상 캔버스에서의 메모리 셀들을 적절한 이미지 데이터로 채웠다. 그 이미지 데이터의 가상 어드레스들이 상기에 표시되어 있다. 상부 좌측 메모리 유닛이 가상 어드레스 "13,2"("13,2" 또는 가상 로우 13 및 가상 컬럼 2로 표시된 이미지의 영역은 그 메모리 유닛(102)에서의 캐시에서 미러링됨을 표시함)를 가지며, 하부 우측 메모리 유닛(102)이 가상 어드레스 "8,9"를 갖는다. 초기화될 때, (굵은) 수평 및 수직 랩어라운드 라인들은 캐시(100)의 최우측 및 최상부 에지들 각각에 있다. 굵은 라인들은, 캐시 리프레시 프로세스 동안 메모리 유닛들의 가상 로우들 또는 컬럼들의 재할당을 시각화하기 위한 보조물들로서 기능하는 개념적 경계들이라는 것에 주목한다. 프로세싱 요소가 캐시 리프레시 정책을 관리하기 위해 이들 경계들을 추적하는 것이 또한 도움이 될 수 있다.
가상 캔버스가 메모리 유닛들(102)의 하나의 로우씩 위로 이동될 때(예를 들어, 가상 원점(404)이 상부 에지에 접근함에 따라), 가상 캔버스의 최하부 로우(즉, 굵은 수평 랩어라운드 라인 "위"의 로우)가 비워지고, 굵은 수평 랩어라운드 라인으로 표시된 것에 인접한 이미지의 부분으로 채워진다. 이동 후에, 수평 랩어라운드 라인은 도시된 바와 같이, 위로 이동함으로써 업데이트된다(이 경우에, 라인이 가상 캔버스의 상부를 "랩어라운드"하고 하부로 이동하는 결과로 된다). 가상 캔버스의 이동은, 가상 캔버스에 미러링되는 원격 메모리에서의 이미지에 대한 윈도우가 이동한다는 것을 의미한다.
Figure pct00002
가상 캔버스가 메모리 유닛들(102)의 하나의 컬럼씩 우측으로 이동될 때, 예를 들어, 가상 원점(404)이 우측 에지에 접근함에 따라), 가상 캔버스의 메모리 유닛들(102)의 최좌측 컬럼(굵은 수직 랩어라운드 라인으로 표시됨)이 비워지고, 굵은 수직 랩어라운드 라인으로 표시된 것에 인접한 이미지의 부분으로 채워진다. 이동 후에, 수직 랩어라운드 라인은 도시된 바와 같이, 우측으로 이동함으로써 업데이트된다(이 경우에, 라인이 가상 캔버스의 우측 부분을 "랩어라운드"하고 좌측 부분으로 이동하는 결과로 된다).
Figure pct00003
가상 캔버스가 메모리 유닛들(102)의 하나의 로우씩 위로 이동될 때(예를 들어, 가상 원점(404)이 상부 에지에 접근함에 따라), 가상 캔버스의 메모리 유닛들(102)의 최하부에서 두 번째 로우(굵은 수평 랩어라운드 라인으로 표시됨)가 비워지고, 굵은 수평 랩어라운드 라인으로 표시된 것에 인접한 이미지의 부분으로 채워진다. 이동 후에, 수평 랩어라운드 라인은 도시된 바와 같이, 위로 이동함으로써 업데이트된다.
Figure pct00004
가상 캔버스가 메모리 유닛들(102)의 하나의 로우씩 위로 이동될 때(예를 들어, 가상 원점(404)이 상부 에지에 접근함에 따라), 가상 캔버스의 메모리 유닛들(102)의 최하부에서 세 번째 로우(굵은 수평 랩어라운드 라인으로 표시됨)가 비워지고, 굵은 수평 랩어라운드 라인으로 표시된 것에 인접한 이미지의 부분으로 채워진다. 이동 후에, 수평 랩어라운드 라인은 도시된 바와 같이, 위로 이동함으로써 업데이트된다.
Figure pct00005
가상 캔버스가 메모리 유닛들(102)의 하나의 컬럼씩 우측으로 이동될 때, 예를 들어, 가상 원점(404)이 우측 에지에 접근함에 따라), 가상 캔버스의 메모리 유닛들(102)의 최좌측에서 두 번째 컬럼(굵은 수직 랩어라운드 라인으로 표시됨)이 비워지고, 굵은 수직 랩어라운드 라인으로 표시된 것에 인접한 이미지의 부분으로 채워진다. 이동 후에, 수직 랩어라운드 라인은 도시된 바와 같이, 우측으로 이동함으로써 업데이트된다.
Figure pct00006
이 포인트에서, 가상 캔버스는 메모리 유닛들(102)의 3개의 로우를 위로 그리고 메모리 유닛들(102)의 2개의 컬럼을 우측으로 이동시켰는데, 이는 캐시(100)에서의 모든 메모리 셀들(굵은 랩어라운드 라인들로 나타낸, 아래에 도시된 음영 처리된 영역에서의 것들을 제외함)이 업데이트되었다는 것을 의미한다.
Figure pct00007
이 예에서, 업데이트 또는 리프레시 프로세스의 방향은 피연산자 영역(402)의 가상 원점(404)을 따르고, 그 가상 원점(404)의 이동에 기초하여 임의의 시간에 방향을 반전시킬 수 있다. 일부 경우들에서, 이미지 프로세싱 알고리즘은 이미지의 실질적으로 상이한 부분에 액세스할 필요가 있을 수 있고, 메모리 유닛들(102)의 적은 수의 로우 또는 컬럼만을 단지 업데이트하기보다는 오히려 캐시(100)를 전체적으로 재초기화할 필요가 있을 수 있다.
캐시(100)에서의 주어진 바이트의 물리적 어드레스(이 예에서는 10비트로 표현가능함)가 일부 양태들에서 가상 어드레스(이 예에서는 16비트로 표현가능함)보다 어드레스 산술을 수행하기가 더 쉽지만, 대부분의 적용예들에서는 가상 어드레스들에 대해 동작하는 것이 도움이 된다. 이것은 도 5a 및 도 5b를 비교함으로써 예시될 수 있다. 도 5a는 이미지 분석 알고리즘이 라벨링된 그룹들("1" 내지 "8"로 넘버링됨)을 갖는 픽셀 필드를 예시한다. 도 5a의 이미지는, 가상 원점(404)이 어떻게 이동하였는지에 관계없이, 캐시(100)에서의 이미지 데이터의 가상 어드레스 뷰를 표현한다. 다른 한편으로, 대체되는 메모리 유닛들(102)의 최우측 컬럼으로 인해 2회 리프레시한 후에, 캐시(100)에서의 이미지 데이터의 물리적 어드레스 뷰가 도 5b와 같이 보일 수 있다. 즉, 가상 어드레스들은 이미지 데이터를 그의 원래의 공간적 배열로 나타내는 한편, 물리적 어드레스들은 시프트 또는 단편화될 수 있다.
가상 어드레스들은 이 예에서 물리적 어드레스들보다 3비트 더 넓지만(x 및 y 어드레싱 양측 모두에서 8비트 대 5비트), 가상 어드레스 산술은 가상 어드레스들을 물리적 어드레스들에 매핑시키기 위해 마지막에는 단순한 테이블 조회를 이용하여, 가상 캔버스의 바운드들 내에서 유지되도록 보장된다.
본 명세서에서 설명되는 바와 같이, 캐시(100)는 "X" 및 "Y" 포트들에의 병렬 액세스들을 허용하여, 메모리 셀들의 거의 임의 패턴들의 판독을 가능하게 한다. 일부 실시예들에서, 이미지 프로세싱 알고리즘이 어드레스 템플릿을 사용함으로써 그것이 액세스하기를 원하는 메모리 셀들의 패턴을 시그널링하는 것이 유용할 수 있다. 어드레스 템플릿은, 판독할 다수의 메모리 셀들의 콤팩트한 표현이다. 현재 예에서, 1개 내지 8개의 메모리 셀(바이트)의 어느 곳이든 주어진 어드레스 템플릿에서 시그널링될 수 있다. 제어 및 디코드 회로(예컨대, 도 9에 도시된 제어 및 디코드 회로(903))는 어드레스 템플릿을 프로세싱하여 캐시(100)에 대한 판독 동작을 수행하고 메모리 셀들의 내용들로 데이터 벡터를 파퓰레이팅할 수 있어서 프로세싱 요소가 그 벡터에 대해 동작할 수 있다. 제어 및 디코드 회로는, 예를 들어, 어드레스 템플릿을 디코딩한 후에, (로우 및/또는 컬럼 어드레싱 유닛들을 이용하여) 캐시(100)에 적절한 판독 제어 신호들을 전송함으로써, 이를 행할 수 있다. 제어 및 디코드 회로는, 예를 들어 상이한 바이트들을 함께 연접함으로써, 그 판독의 결과들로부터 데이터 벡터를 추가로 파퓰레이팅할 수 있다.
어드레스 템플릿은 다수의 상이한 형태들을 취할 수 있다. 일부 실시예들에서, 어드레스 템플릿은 다음과 같이 설명될 수 있고, 여기서 2개의 기본 타입, 즉, 의사 선형 타입(pseudo-linear type) 또는 선형 타입 중 어느 하나가 있다:
Figure pct00008
의사 선형 및 선형 타입 템플릿들 각각에 대해, 구조의 처음 3비트([3:0])는 템플릿의 타입을 표현한다. 의사 선형 타입들의 경우, 타입은 0이고, 선형 타입들의 경우, 타입은 1이다. 나타낸 바와 같이, 더 많은 타입들을 부가함에 있어서의 유연성을 위해 타입을 표현하기 위해 3비트가 있다; 여기서 나타낸 바와 같이 단지 2개의 타입만이 있는 경우, 단일 비트로 타입을 표현하기에 충분하다. 또한 의사 선형 및 선형 타입 템플릿들 각각에 대해, 다음 비트 [4]는 디폴트 판독 포트("X" 포트 = 0 또는 "Y" 포트 = 1)를 특정하고, 뒤따르는 10비트는 판독될 제1 바이트에 대한 원점(404)으로부터의 부호있는 오프셋(x-오프셋의 경우 [9:5], y-오프셋의 경우 [14:10])을 특정한다. 이 이후에, 2개의 타입의 템플릿의 포맷이 달라진다.
의사 선형 타입 템플릿들의 경우, x- 및 y-오프셋들을 특정하는 오프셋들이 3비트 필드들([17:15], [20:18], [23:21], [26:24], [29:27], [32:30], 및 [35:33])로서 제공된다. 실시예들에서, 템플릿은, 예컨대 1바이트로부터 8바이트까지의 어느 곳이든, 판독될 임의의 수의 바이트들을 포함할 수 있다. 주어진 동작에 대해, 벡터 길이는 프로세싱 요소에 의해 특정될 수 있다. 오프셋에 대한 3비트의 유의성(significance)이 일부 실시예들에서 다음과 같이 설명될 수 있다:
Figure pct00009
의사 선형 타입 템플릿은, x- 및 y-오프셋들이 방향을 반전시키지 않는 대략적인 선형 패턴을 (예를 들어, 각도 또는 아크(arc)로) 형성한다.
선형 타입 템플릿들의 경우, x-오프셋들을 특정하는 오프셋들이 2비트 필드들([16:15], [18:17], [20:19], [22:21], [24:23], [26:25], 및 [28:27])로서 제공된다. 실시예들에서, 템플릿은, 예컨대 1바이트로부터 8바이트까지의 어느 곳이든, 판독될 임의의 수의 바이트들을 포함할 수 있다. 주어진 동작에 대해, 벡터 길이는 프로세싱 요소에 의해 특정될 수 있다. 선형 타입 템플릿들은, 바이트들이 패킹되거나 또는 멀리 이격된 상태로, 수평 또는 수직 중 어느 하나의 라인을 형성한다. 선형 타입 템플릿은 의사 선형 타입 템플릿을 사용하여 그리고 x- 또는 y-오프셋 중 하나(다른 오프셋은 0임)의 오프셋들만을 단지 표시하여 특정될 수 있다. 선형 타입 템플릿에 대한 이점은 그것이 더 콤팩트하게 특정될 수 있다는 점이다.
상기의 템플릿들에 부가적으로, 리플렉션 컨트롤 구조(reflection control structure)가 또한 사용될 수 있다. 예를 들어, 일 적용예는 어드레스 템플릿들을 사용하여 판독 동작들의 시퀀스에 적용하기 위해 리플렉션 컨트롤을 한 번 설정할 수 있다. 리플렉션 컨트롤은 다음과 같이 보일 수 있다:
Figure pct00010
상술된 바와 같이, 디폴트 판독 포트는 어드레스 템플릿의 비트 [4]가 0일 때 "X" 포트이고, 어드레스 템플릿의 비트 [4]가 1일 때 "Y" 포트이다. 리플렉션 컨트롤을 사용하면 그 거동을 변경할 수 있다; 예를 들어, 리플렉션 컨트롤의 비트 [4]가 1인 경우, 그러면 임의의 주어진 템플릿에 대한 디폴트 판독 포트가 스와핑되고, 리플렉션 컨트롤의 비트 [4]가 0인 경우, 그러면 임의의 주어진 템플릿에 대한 디폴트 판독 포트가 그의 정상 거동을 유지한다.
리플렉션 컨트롤은 프로그래밍가능 레지스터로서 구현될 수 있다. 제어 및 디코드 회로가 어드레스 템플릿에 대해 동작하여 판독 동작을 수행할 때, 리플렉션 컨트롤은 판독 동작의 제1 바이트에 대한 Δx 및 Δy의 극성(부호들), 및 판독 동작의 나머지 바이트들에 대한 Δx 및 Δy의 극성(부호들)을 표시할 수 있다. 리플렉션 컨트롤은 "X" 및 "Y" 포트들이 스와핑됨을 또한 표시할 수 있다(비트 [4]). 이것은, 예를 들어, 판독 패턴을 90°씩 회전시키는 효과를 가질 수 있다.
도 6a 내지 도 6d는 특정 판독 패턴들을 용이하게 하는 데 사용되는 어드레스 템플릿들의 예들을 예시한다. 예를 들어, 도 6a는 의사 선형 타입 템플릿의 일 예를 도시한다. 이것은, 이미지 분석 알고리즘의 일부 부분들에 의해 사용될 수 있는 패턴이다. 판독될 초기 메모리 셀(바이트)은 이 예에서 기준 원점(404)으로부터 주어진다. 이것은 (7,3)의 (x,y) 오프셋으로서 반영될 수 있다. 판독될 다음 메모리 셀(바이트)은 제1 바이트로부터의 (x,y) 오프셋으로서 주어지고, 여기서 오프셋은 (0,2)이다. 마찬가지로, 판독될 각각의 연속 메모리 셀(바이트)은 이전 바이트로부터의 (x,y) 오프셋으로서 주어지고, 여기서 오프셋들은 (1,1), (1,1), 및 (1,2)이다. 유사하게, 도 6b는 선형 타입 템플릿의 일 예를 도시한다. 판독될 초기 메모리 셀(바이트)은 이 예에서 기준 원점(404)으로부터 주어진다. 이것은 (-7,5)의 (x,y) 오프셋으로서 반영될 수 있다. 판독될 후속 메모리 셀들(바이트들)은 선행 바이트 판독의 x-오프셋들로서 주어지고, 여기서 이 x-오프셋들은 2, 2, 2, 2, 2, 2, 2이다.
유사하게, 도 6c 및 도 6d는 선형 타입 템플릿들의 예들을 도시한다. 도 6c에서, 판독될 초기 메모리 셀(바이트)은 (1,0)의 원점(404)으로부터의 (x,y) 오프셋으로서 주어지고, 판독될 각각의 연속 메모리 셀(바이트)은 1, 1, 1, 1, 1, 1, 1의 x-오프셋으로 주어진다. 도 6d에서, 판독될 초기 메모리 셀(바이트)은 (0,-1)의 원점(404)으로부터의 (x,y) 오프셋으로서 주어지고, 판독될 각각의 연속 메모리 셀(바이트)은 -1, -1, -1, -1, -1, -1, -1의 y-오프셋으로 주어진다. 도 6d의 템플릿은 리플렉션 컨트롤을 사용함으로써 도 6c의 템플릿으로부터 또한 유도될 수 있다.
도 7a 내지 도 7h는 특정 판독 패턴들을 용이하게 하는 데 사용되는 어드레스 템플릿들의 예들을 예시한다. 특히, 도 7a 내지 도 7h는 각각 동일한 의사 선형 타입 템플릿을 도시하고 있지만, 리플렉션 컨트롤을 사용하여 x-및 y-오프셋들에 대한 부호 반전에 대해 상이한 값들을 갖는다. 예를 들어, 제1 바이트에 대한 Δx 또는 Δy의 극성을 반전시키면 원점에 대해 반영된다. 후속 바이트들에 대한 Δx 또는 Δy의 극성을 반전시키면 제1 바이트에 대해 반영된다. x 및 y의 정의들을 반전시킴으로써, 이 동일한 템플릿은, 도 7a 내지 도 7h에 도시된 것들과는 동등하지만 90도씩 회전된 8개 더 많은 구성을 산출한다.
확인될 수 있는 바와 같이, 리플렉션 컨트롤을 사용함으로써, 가능한 템플릿 재사용의 양은, 프로세싱 요소에 의해 로컬 메모리(예를 들어, SRAM)에 저장되어야 하는 템플릿들의 양을 극적으로 감소시킨다.
도 8은 일 실시예에 따른 흐름도를 예시한다. 프로세스(800)는, 본 명세서에 개시된 실시예들 중 임의의 하나에 따른 캐시에 액세스하는 방법이다. 이 방법은 단계 s802로 시작할 수 있다.
단계 s802는, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제1 복수의 메모리 유닛들을 초기화하는 단계를 포함한다.
단계 s804는, 개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀에 액세스하는 단계를 포함한다.
일부 실시예들에서, 이 방법은, 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를, 개개의 메모리 셀을 표시하는 물리적 어드레스로 변환하는 단계(단계 s806)를 더 포함한다. 일부 실시예들에서, 이 방법은, 판독 제어 신호들을 형성하고 판독 제어 신호들을 로우 및/또는 컬럼 어드레싱 유닛들에 전송하여 개개의 메모리 셀의 내용들을 판독하는 단계(단계 s808)를 더 포함한다.
일부 실시예들에서, 개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀들에 액세스하는 단계는: 복수의 가상 어드레스들을 갖는 어드레스 템플릿을 디코딩하는 단계; 및 복수의 가상 어드레스들 각각에 대응하는 메모리 셀들의 내용들로 피연산자 벡터를 형성하는 단계를 포함한다.
일부 실시예들에서, 이 방법은, 가상 원점을 갖는 피연산자 영역을 유지하는 단계를 더 포함하고, 여기서 피연산자 영역은, 2차원 데이터 구조의 일 부분을 표현하는 메모리 유닛들을 포괄한다(단계 s810). 일부 실시예들에서, 이 방법은, 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 단계; 및 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계(단계 s812)를 더 포함한다.
일부 실시예들에서, 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계는: (1) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 우측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최좌측 컬럼을 메모리 유닛들의 새로운 최우측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 플러스 단일 메모리 유닛의 폭의 합으로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계; (2) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 좌측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최우측 컬럼을 메모리 유닛들의 새로운 최좌측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 마이너스 단일 메모리 유닛의 폭 사이의 차이로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계; (3) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 위로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최하측 로우를 메모리 유닛들의 새로운 최상측 로우로 대체하고 이전 최상측 로우의 가상 어드레스 플러스 단일 메모리 유닛의 높이의 합으로서 새로운 로우의 가상 어드레스를 재할당하는 단계; 및 (4) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 아래로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최상측 로우를 메모리 유닛들의 새로운 최하측 로우로 대체하고 이전 최하측 로우의 가상 어드레스 마이너스 단일 메모리 유닛의 높이 사이의 차이로서 새로운 로우의 가상 어드레스를 재할당하는 단계 중 하나를 포함한다.
일부 실시예들에서, 메모리 유닛들의 어레이의 단지 서브세트만이 2차원 데이터 구조의 프로세싱의 부분으로서 2차원 데이터 구조에 대응하는 데이터를 저장하는 데 사용되고, 메모리 유닛들의 어레이의 나머지 부분이 스크래치패드 공간을 위해 사용된다. 일부 실시예들에서, 2차원 데이터 구조는 이미지 데이터를 포함한다. 일부 실시예들에서, 2차원 데이터 구조는 매트릭스를 포함한다.
일부 실시예들에서, 캐시(100)는 더 큰 시스템에서, 예컨대 장치(900)에서 구현될 수 있다. 캐시(100) 및/또는 장치(900)는 범용 컴퓨터, CPU, 그래픽 프로세싱 유닛(graphics processing unit)(GPU), 주문형 집적 회로(application-specific integrated circuit)(ASIC), 필드 프로그래밍가능 게이트 어레이(field-programmable gate array)(FPGA), 또는 임의의 다른 타입의 컴퓨터 하드웨어 컴포넌트 중 하나 이상의 부분이거나, 또는 그 하나 이상으로 동작하도록 구성될 수 있다. "캐시"라는 용어는 단지 캐시(100)만을 지칭하기 위해 사용될 수 있거나, 또는 더 나아가 사용되는 맥락에 따라 캐시(100)를 포함하는 장치(900)를 지칭할 수 있다.
도 9는 일부 실시예들에 따른 장치(900)의 블록 다이어그램이다. 도 9에 도시된 바와 같이, 장치(900)는: 캐시(100), 벡터 프로세서(902), 네트워크 인터페이스(904), 로드/저장 유닛(906), 원격 메모리(908), 및 이미지 캡처 인터페이스(910)를 포함할 수 있다. 벡터 프로세서(902)는, 예를 들어, 캐시(100)로의 판독 또는 기입 데이터에 의해, 캐시(100)와 통신할 수 있다. 벡터 프로세서(902), 또는 유사한 병렬 프로세싱 엔티티는, 판독 명령어를 캐시(100)에 전송하기 위해 어드레스 템플릿을 이용할 수 있고, 캐시(100)는 그 후에 이에 응답하여 결과들(예를 들어, 하나 이상의 피연산자)을 벡터 프로세서(902)에 전송할 수 있다. 예를 들어, 벡터 프로세서(902)는 제어 및 디코드 회로(903)(벡터 프로세서(902)의 부분으로서 도시되어 있지만, 그것은 또한 벡터 프로세서(902)와는 별개일 수 있다)를 포함할 수 있다. 제어 및 디코드 회로(903)는 어드레스 템플릿을 디코딩하고 캐시(100)에 전송할 적절한 판독 제어 신호를 형성함으로써 어드레스 템플릿을 프로세싱하여, 어드레스 템플릿에 특정된 피연산자들 각각을 갖는 피연산자 벡터가 형성되고 벡터 프로세서(902)에 제공된다. 도시된 바와 같이, 어드레스 템플릿은 제어 및 디코드 회로에 대한 입력(예를 들어, 벡터 프로세서(902)로부터 수신됨)일 수 있다. 벡터 프로세서(902)는, 예컨대 캐시(100)에서의 가상 캔버스와는 별개인 스크래치패드 공간으로부터의 데이터에 액세스할 때, 캐시(100)로부터 판독하기 위해 물리적 어드레스들을 또한 사용할 수 있다. 판독에 부가적으로, 벡터 프로세서(902)는, 예컨대 스크래치패드 공간 또는 가상 캔버스에 기입함으로써, 캐시(100)에 또한 기입할 수 있다. 그러한 기입은, 중간 데이터를 포함할 수 있거나, 또는 캐시(100)로부터 판독된 하나 이상의 피연산자에 대한 벡터 동작 또는 다른 프로세싱을 수행한 결과들을 기입하는 것을 포함할 수 있다. 도시되지 않았지만, 벡터 프로세서(902)는, 다른 타입들의 캐시(예를 들어, L1 또는 L2 캐시), 레지스터 파일들, 버스들, 또는 주변 기기들을 포함하는, 장치(900)의 다른 컴포넌트들에 또한 커플링될 수 있다. 벡터 프로세서(902)는 네트워크 인터페이스(904)를 통해 다른 컴포넌트들 또는 시스템들(장치(900)의 다른 컴포넌트들 또는 장치(900)의 부분이 아닌 컴포넌트들을 포함함)과 통신할 수 있다.
로드/저장 유닛(906)은 캐시(100)에 커플링되고, 캐시(100)의 내용들을 채우거나 또는 파퓰레이팅하기 위해 사용될 수 있다. 예를 들어, 로드/저장 유닛(906)은 원격 메모리(908)(예컨대, 이미지 메모리)에 액세스하여, 캐시(100)의 내용들을 채우거나 또는 파퓰레이팅할 수 있다. 원격 메모리(908)는 임의의 타입의 메모리일 수 있고, 이미지들을 캡처하고 이들을 원격 메모리(908)에 디지털로 저장할 수 있는 이미지 캡처 인터페이스(910)와 같은 다른 컴포넌트들에 커플링될 수 있다. 벡터 프로세서의 맥락에서, 로드/저장 유닛(906)은 때때로 로드/저장 벡터라고 지칭된다. 로드/저장 유닛(906)은 로드 및 저장 명령어들을 실행하는 것을 담당한다.
다양한 실시예들의 간결한 설명
A1. 캐시로서,
메모리 유닛들의 p(로우들) x q(컬럼들) 어레이;
로우 어드레싱 유닛; 및
컬럼 어드레싱 유닛
을 포함하고;
각각의 메모리 유닛은 메모리 셀들의 m(로우들) x n(컬럼들) 어레이를 가지며;
컬럼 어드레싱 유닛은, 각각의 메모리 유닛에 대해, m개의 n-대-1 멀티플렉서를 가지며, 그 하나는 메모리 유닛의 m개의 로우 각각과 연관되고, 각각의 n-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 로우와 연관된 n개의 메모리 셀 각각에 커플링되는 입력을 가지며;
로우 어드레싱 유닛은, 각각의 메모리 유닛에 대해, n개의 m-대-1 멀티플렉서를 가지며, 그 하나는 메모리 유닛의 n개의 컬럼 각각과 연관되고, 각각의 m-대-1 멀티플렉서는, 그 멀티플렉서와 연관된 컬럼과 연관된 m개의 메모리 셀 각각에 커플링되는 입력을 가지며,
로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 메모리 유닛들의 어레이의 판독 및/또는 기입을 지원하여, 메모리 유닛들의 어레이의 다수의 로우들 및/또는 컬럼들이 병렬로 판독 및/또는 기입될 수 있는, 캐시.
A2. 실시예 A1에 있어서, m = n = 4이고 각각의 메모리 셀은 1바이트를 포함하여, 각각의 메모리 유닛이 16바이트를 포함하고, p = q = 8이어서, 메모리 유닛들의 어레이가 1024바이트를 포함하는, 캐시.
A3. 실시예들 A1 및 A2 중 어느 한 실시예에 있어서, 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 단일 클록 사이클에서 메모리 유닛들 중 하나 이상의 메모리 유닛의 메모리 셀들의 다수의 로우들 및/또는 컬럼들에 대한 판독 및/또는 기입을 지원하는, 캐시.
A4. 실시예들 A1 내지 A3 중 어느 한 실시예에 있어서, 로우 어드레싱 유닛은 메모리 유닛들의 어레이 중 하나 이상에 걸쳐 메모리 셀들의 최대 p*m개의 로우를 어드레싱하고 p*m개의 로우 각각에서 임의의 셀을 판독하는 것이 가능하고, 2개의 그러한 셀이 동일한 로우에 있지 않은, 캐시.
A5. 실시예들 A1 내지 A4 중 어느 한 실시예에 있어서, 컬럼 어드레싱 유닛은 메모리 유닛들의 어레이 중 하나 이상에 걸쳐 메모리 셀들의 최대 q*n개의 컬럼을 어드레싱하고 q*n개의 컬럼 각각에서 임의의 셀을 판독하는 것이 가능하고, 2개의 그러한 셀이 동일한 컬럼에 있지 않은, 캐시.
A6. 실시예들 A1 내지 A5 중 어느 한 실시예에 있어서,
로우 어드레싱 유닛은, 메모리 유닛들의 어레이의 제1 로우에 있지 않은 각각의 메모리 유닛에 대해, 선행 로우에서의 메모리 유닛과 연관된 n-대-1 멀티플렉서의 출력 및 메모리 유닛의 각각의 컬럼과 연관된 n-대-1 멀티플렉서의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 가지며,
컬럼 어드레싱 유닛은, 메모리 유닛들의 어레이의 제1 컬럼에 있지 않은 각각의 메모리 유닛에 대해, 선행 컬럼에서의 메모리 유닛과 연관된 m-대-1 멀티플렉서의 출력 및 메모리 유닛의 각각의 로우와 연관된 m-대-1 멀티플렉서의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 갖는, 캐시.
A7. 실시예들 A1 내지 A6 중 어느 한 실시예에 있어서, 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 각각 메모리 유닛들의 어레이의 메모리 셀들의 판독을 지원하고, 로우 어드레싱 유닛은 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원하는, 캐시.
A8. 실시예 A7에 있어서, 단지 로우 어드레싱 유닛만이 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원하여, 컬럼 어드레싱 유닛이 메모리 유닛들의 어레이의 메모리 셀들의 기입을 지원하지 않는, 캐시.
A9. 실시예들 A1 내지 A8 중 어느 한 실시예에 있어서, 메모리 유닛들의 p x q 어레이에서의 메모리 유닛은, 가상 어드레스에 의해 표현될 수 있는 최소 엔티티를 표현하는, 캐시.
A10. 실시예들 A1 내지 A9 중 어느 한 실시예에 있어서, 메모리 유닛들의 p x q 어레이에서의 각각의 메모리 유닛에 대해, 메모리 유닛 내의 각각의 메모리 셀은 캐시에서의 데이터의 최소 어드레싱가능 양자이고, 메모리 유닛 내에 단지 물리적 어드레스만을 갖는, 캐시.
A11. 실시예들 A1 내지 A10 중 어느 한 실시예에 있어서, 로우 어드레싱 유닛은 q*n개의 컬럼 각각에 대한 별개의 어드레스들을 가지며 컬럼 어드레싱 유닛은 p*m개의 로우 각각에 대한 별개의 어드레스들을 가져서, 로우 및 컬럼 어드레싱 유닛들이 메모리 유닛들의 어레이 및 각각의 메모리 유닛 내의 메모리 셀들의 어레이 내에서 상이한 로우들로부터 최대 p*m개의 메모리 셀을 그리고 상이한 컬럼들로부터 최대 q*n개의 메모리 셀을 동시에 판독 및/또는 기입하는 것을 지원하는, 캐시.
A12. 실시예들 A1 내지 A11 중 어느 한 실시예에 있어서, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 메모리 셀들 중 일부 또는 전부를 채우는 것이 가능한 로드/저장 유닛, 및 특정 메모리 셀들에 액세스하도록 로우 및 컬럼 어드레싱 유닛들에 지시하기 위한 신호들을 제어하기 위해 원격 메모리에 의해 표현된 2차원 데이터 구조의 일 부분을 표현하는 가상 어드레스를 변환하는 것이 가능한 제어 및 디코드 회로를 더 포함하는, 캐시.
A13. 실시예 A12에 있어서, 제어 및 디코드 회로는, 가상 원점을 갖는 피연산자 영역을 유지하여, 가상 원점이, 원격 메모리에 대한 복수의 가상 어드레스들을 포함하는 어드레스 템플릿에 대한 기준 포인트로서 기능하고, 제어 및 디코드 회로는 복수의 가상 어드레스들을 결정하기 위해 어드레스 템플릿을 디코딩하는 것이 추가로 가능한, 캐시.
A14. 실시예 A13에 있어서, 제어 및 디코드 회로는 가상 원점을 조작하고, 가상 원점이 조작됨에 따라 원격 메모리로부터 데이터를 판독함으로써 메모리 셀들을 초기화 및/또는 업데이트하도록 로드/저장 유닛에 지시하는 것이 추가로 가능한, 캐시.
B1. 실시예들 A1 내지 A14 중 어느 한 실시예에 따른 캐시에 액세스하는 방법으로서,
2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제1 복수의 메모리 유닛들을 초기화하는 단계; 및
개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀에 액세스하는 단계
를 포함하는, 방법.
B2. 실시예 B1에 있어서, 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를, 개개의 메모리 셀을 표시하는 물리적 어드레스로 변환하는 단계를 더 포함하는, 방법.
B3. 실시예 B2에 있어서, 판독 제어 신호들을 형성하고 판독 제어 신호들을 로우 및/또는 컬럼 어드레싱 유닛들에 전송하여 개개의 메모리 셀의 내용들을 판독하는 단계를 더 포함하는, 방법.
B4. 실시예들 B1 내지 B3 중 어느 한 실시예에 있어서, 개개의 메모리 셀의 내용들에 의해 표현된 2차원 데이터 구조의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 제1 복수의 메모리 유닛들 내의 하나 이상의 메모리 셀에 액세스하는 단계는:
복수의 가상 어드레스들을 갖는 어드레스 템플릿을 디코딩하는 단계; 및
복수의 가상 어드레스들 각각에 대응하는 메모리 셀들의 내용들로 피연산자 벡터를 형성하는 단계
를 포함하는, 방법.
B5. 실시예들 B1 내지 B4 중 어느 한 실시예에 있어서,
가상 원점을 갖는 피연산자 영역을 유지하는 단계
를 더 포함하고,
피연산자 영역은, 2차원 데이터 구조의 일 부분을 표현하는 메모리 유닛들을 포괄하는, 방법.
B6. 실시예 B5에 있어서,
가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 단계; 및
가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계
를 더 포함하는, 방법.
B7. 실시예 B6 중 임의의 한 실시예에 있어서, 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들이 2차원 데이터 구조의 일 부분을 표현하도록, 2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제2 복수의 메모리 유닛들을 초기화하는 단계는:
(1) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 우측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최좌측 컬럼을 메모리 유닛들의 새로운 최우측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 플러스 단일 메모리 유닛의 폭의 합으로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계;
(2) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 좌측으로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최우측 컬럼을 메모리 유닛들의 새로운 최좌측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 마이너스 단일 메모리 유닛의 폭 사이의 차이로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계;
(3) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 위로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최하측 로우를 메모리 유닛들의 새로운 최상측 로우로 대체하고 이전 최상측 로우의 가상 어드레스 플러스 단일 메모리 유닛의 높이의 합으로서 새로운 로우의 가상 어드레스를 재할당하는 단계; 및
(4) 가상 원점 및 그 가상 원점과 연관된 피연산자 영역을 아래로 이동시키는 것에 응답하여, 메모리 유닛들의 이전 최상측 로우를 메모리 유닛들의 새로운 최하측 로우로 대체하고 이전 최하측 로우의 가상 어드레스 마이너스 단일 메모리 유닛의 높이 사이의 차이로서 새로운 로우의 가상 어드레스를 재할당하는 단계
중 하나를 포함하는, 방법.
B8. 실시예들 B1 내지 B7 중 어느 한 실시예에 있어서, 메모리 유닛들의 어레이의 단지 서브세트만이 2차원 데이터 구조의 프로세싱의 부분으로서 2차원 데이터 구조에 대응하는 데이터를 저장하는 데 사용되고, 메모리 유닛들의 어레이의 나머지 부분이 스크래치패드 공간을 위해 사용되는, 방법.
B9. 실시예들 B1 내지 B8 중 어느 한 실시예에 있어서, 2차원 데이터 구조는 이미지 데이터를 포함하는, 방법.
B10. 실시예들 B1 내지 B8 중 어느 한 실시예에 있어서, 2차원 데이터 구조는 매트릭스를 포함하는, 방법.
C1. 명령어들을 포함하는 컴퓨터 프로그램으로서, 명령어들은, 프로세싱 회로부에 의해 실행될 때, 프로세싱 회로부로 하여금 실시예들 B1 내지 B10 중 어느 한 실시예의 방법을 수행하게 하는, 컴퓨터 프로그램.
C2. 실시예 C1의 컴퓨터 프로그램을 포함하는 캐리어로서, 캐리어는 전자 신호, 광 신호, 라디오 신호, 또는 컴퓨터 판독가능 저장 매체 중 하나인, 캐리어.
D1. 실시예들 A1 내지 A14 중 어느 한 실시예의 캐시를 포함하는 장치로서, 장치는 범용 컴퓨터, 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU), 주문형 집적 회로(ASIC), 및 필드 프로그래밍가능 게이트 어레이(FPGA) 중 하나인, 장치.
본 개시내용의 다양한 실시예들이 본 명세서에 설명되지만, 이들은 제한이 아니라 단지 예시로서 제시되었음을 이해해야 한다. 따라서, 본 개시내용의 폭 및 범주는 상술된 예시적인 실시예들 중 어떠한 것에 의해서도 제한되어서는 안 된다. 더욱이, 본 명세서에 달리 나타내지 않는 한 또는 그렇지 않으면 문맥에 의해 명확하게 모순되지 않는 한, 모든 가능한 변형들에서의 상술된 요소들의 임의의 조합이 본 개시내용에 의해 포괄된다.
부가적으로, 상술되고 도면들에 예시되는 프로세스들이 단계들의 시퀀스로서 도시되지만, 이는 오로지 예시를 위해서만 행해진 것이다. 이에 따라, 일부 단계들이 부가될 수 있고, 일부 단계들이 생략될 수 있고, 단계들의 순서가 재배열될 수 있고, 일부 단계들이 병렬로 수행될 수 있다는 것이 고려된다.

Claims (24)

  1. 캐시(100)로서,
    메모리 유닛들(102)의 p(로우(row)들) x q(컬럼(column)들) 어레이;
    로우 어드레싱 유닛; 및
    컬럼 어드레싱 유닛
    을 포함하고;
    각각의 메모리 유닛(102)은 메모리 셀들(B0-B15)의 m(로우들) x n(컬럼들) 어레이를 가지며;
    상기 컬럼 어드레싱 유닛은, 각각의 메모리 유닛(102)에 대해, m개의 n-대-1 멀티플렉서(n-to-one multiplexer)(104)를 가지며, 그 하나는 상기 메모리 유닛(102)의 m개의 로우 각각과 연관되고, 각각의 n-대-1 멀티플렉서(104)는, 상기 멀티플렉서(104)와 연관된 로우와 연관된 n개의 메모리 셀(B0-B15) 각각에 커플링되는 입력을 가지며;
    상기 로우 어드레싱 유닛은, 각각의 메모리 유닛(102)에 대해, n개의 m-대-1 멀티플렉서(106)를 가지며, 그 하나는 상기 메모리 유닛(102)의 n개의 컬럼 각각과 연관되고, 각각의 m-대-1 멀티플렉서(106)는, 상기 멀티플렉서(106)와 연관된 컬럼과 연관된 m개의 메모리 셀(B0-B15) 각각에 커플링되는 입력을 가지며,
    상기 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 상기 메모리 유닛들(102)의 어레이의 판독 및/또는 기입을 지원하여, 상기 메모리 유닛들(102)의 어레이의 다수의 로우들 및/또는 컬럼들이 병렬로 판독 및/또는 기입될 수 있는, 캐시.
  2. 제1항에 있어서,
    m = n = 4이고, 각각의 메모리 셀(B0-B15)은 1바이트(byte)를 포함하여, 각각의 메모리 유닛(102)이 16바이트를 포함하고, p = q = 8이어서, 상기 메모리 유닛들(102)의 어레이가 1024바이트를 포함하는, 캐시.
  3. 제1항에 있어서,
    상기 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 단일 클록 사이클에서 상기 메모리 유닛들(102) 중 하나 이상의 메모리 유닛의 메모리 셀들(B0-B15)의 다수의 로우들 및/또는 컬럼들에 대한 판독 및/또는 기입을 지원하는, 캐시.
  4. 제1항에 있어서,
    상기 로우 어드레싱 유닛은 상기 메모리 유닛들(102)의 어레이 중 하나 이상에 걸쳐 메모리 셀들(B0-B15)의 최대 p*m개의 로우를 어드레싱하고 상기 p*m개의 로우 각각에서 임의의 셀을 판독하는 것이 가능하고, 2개의 상기 셀이 동일한 로우에 있지 않은, 캐시.
  5. 제1항에 있어서,
    상기 컬럼 어드레싱 유닛은 상기 메모리 유닛들(102)의 어레이 중 하나 이상에 걸쳐 메모리 셀들(B0-B15)의 최대 q*n개의 컬럼을 어드레싱하고 상기 q*n개의 컬럼 각각에서 임의의 셀을 판독하는 것이 가능하고, 2개의 상기 셀이 동일한 컬럼에 있지 않은, 캐시.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 로우 어드레싱 유닛은, 상기 메모리 유닛들(102)의 어레이의 제1 로우에 있지 않은 각각의 메모리 유닛(102)에 대해, 선행 로우에서의 상기 메모리 유닛(102)과 연관된 상기 n-대-1 멀티플렉서(104)의 출력 및 상기 메모리 유닛(102)의 각각의 컬럼과 연관된 상기 n-대-1 멀티플렉서(104)의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 가지며,
    상기 컬럼 어드레싱 유닛은, 상기 메모리 유닛들(102)의 어레이의 제1 컬럼에 있지 않은 각각의 메모리 유닛(102)에 대해, 선행 컬럼에서의 상기 메모리 유닛(102)과 연관된 상기 m-대-1 멀티플렉서(106)의 출력 및 상기 메모리 유닛(106)의 각각의 로우와 연관된 상기 m-대-1 멀티플렉서(106)의 출력에 커플링되는 입력을 갖는 2-대-1 멀티플렉서를 추가로 갖는, 캐시.
  7. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 로우 어드레싱 유닛 및 컬럼 어드레싱 유닛은 각각 상기 메모리 유닛들(102)의 어레이의 메모리 셀들(B0-B15)의 판독을 지원하고, 상기 로우 어드레싱 유닛은 상기 메모리 유닛들(102)의 어레이의 메모리 셀들(B0-B15)의 기입을 지원하는, 캐시.
  8. 제7항에 있어서,
    단지 상기 로우 어드레싱 유닛만이 상기 메모리 유닛들(102)의 어레이의 메모리 셀들(B0-B15)의 기입을 지원하여, 상기 컬럼 어드레싱 유닛이 상기 메모리 유닛들(102)의 어레이의 메모리 셀들(B0-B15)의 기입을 지원하지 않는, 캐시.
  9. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 메모리 유닛들(102)의 p x q 어레이에서의 메모리 유닛(102)은, 가상 어드레스에 의해 표현될 수 있는 최소 엔티티(minimum entity)를 표현하는, 캐시.
  10. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 메모리 유닛들(102)의 p x q 어레이에서의 각각의 메모리 유닛에 대해, 상기 메모리 유닛(102) 내의 각각의 메모리 셀(B0-B15)은 상기 캐시(100)에서의 데이터의 최소 어드레싱가능 양자(smallest addressable quantum)이고, 상기 메모리 유닛(102) 내에 단지 물리적 어드레스만을 갖는, 캐시.
  11. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 로우 어드레싱 유닛은 q*n개의 컬럼 각각에 대한 별개의 어드레스들을 가지며 상기 컬럼 어드레싱 유닛은 p*m개의 로우 각각에 대한 별개의 어드레스들을 가져서, 상기 로우 및 컬럼 어드레싱 유닛들이 상기 메모리 유닛들(102)의 어레이 및 각각의 메모리 유닛(102) 내의 메모리 셀들(B0-B15)의 어레이 내에서 상이한 로우들로부터 최대 p*m개의 메모리 셀(B0-B15)을 그리고 상이한 컬럼들로부터 최대 q*n개의 메모리 셀(B0-B15)을 동시에 판독 및/또는 기입하는 것을 지원하는, 캐시.
  12. 제1항 내지 제5항 중 어느 한 항에 있어서,
    2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 상기 메모리 셀들(B0-B15) 중 일부 또는 전부를 채우는 것이 가능한 로드/저장 유닛(load/store unit)(906), 및 특정 메모리 셀들(B0-B15)에 액세스하도록 상기 로우 및 컬럼 어드레싱 유닛들에 지시하기 위한 신호들을 제어하기 위해 상기 원격 메모리에 의해 표현된 2차원 데이터 구조의 일 부분을 표현하는 가상 어드레스를 변환하는 것이 가능한 제어 및 디코드 회로(control and decode circuit)(903)를 더 포함하는, 캐시.
  13. 제12항에 있어서,
    상기 제어 및 디코드 회로(903)는, 가상 원점(404)을 갖는 피연산자 영역(operand region)(402)을 유지하여, 상기 가상 원점(404)이, 상기 원격 메모리에 대한 복수의 가상 어드레스들을 포함하는 어드레스 템플릿(address template)에 대한 기준 포인트로서 기능하고, 상기 제어 및 디코드 회로(903)는 상기 복수의 가상 어드레스들을 결정하기 위해 상기 어드레스 템플릿을 디코딩하는 것이 추가로 가능한, 캐시.
  14. 제13항에 있어서,
    상기 제어 및 디코드 회로(903)는 상기 가상 원점(404)을 조작하고, 상기 가상 원점(404)이 조작됨에 따라 상기 원격 메모리로부터 데이터를 판독함으로써 메모리 셀들(B0-B15)을 초기화 및/또는 업데이트하도록 상기 로드/저장 유닛(906)에 지시하는 것이 추가로 가능한, 캐시.
  15. 제1항에 따른 캐시(100)에 액세스하는 방법으로서,
    2차원 데이터 구조를 표현하는 원격 메모리를 이용하여 제1 복수의 메모리 유닛들(102)을 초기화하는 단계; 및
    개개의 메모리 셀(B0-B15)의 내용들에 의해 표현된 상기 2차원 데이터 구조(1010)의 일 부분을 표시하는 가상 어드레스를 이용하여 로우 및/또는 컬럼 어드레싱 유닛들에 의해 상기 제1 복수의 메모리 유닛들(102) 내의 하나 이상의 메모리 셀(B0-B15)에 액세스하는 단계
    를 포함하는, 방법.
  16. 제15항에 있어서,
    상기 2차원 데이터 구조(1010)의 일 부분을 표시하는 가상 어드레스를, 상기 개개의 메모리 셀(B0-B15)을 표시하는 물리적 어드레스로 변환하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서,
    판독 제어 신호들을 형성하고 상기 판독 제어 신호들을 상기 로우 및/또는 컬럼 어드레싱 유닛들에 전송하여 상기 개개의 메모리 셀(B0-B15)의 내용들을 판독하는 단계를 더 포함하는, 방법.
  18. 제15항 내지 제17항 중 어느 한 항에 있어서,
    상기 개개의 메모리 셀(B0-B15)의 내용들에 의해 표현된 상기 2차원 데이터 구조(1010)의 일 부분을 표시하는 가상 어드레스를 이용하여 상기 로우 및/또는 컬럼 어드레싱 유닛들에 의해 상기 제1 복수의 메모리 유닛들(102) 내의 하나 이상의 메모리 셀(B0-B15)에 액세스하는 단계는:
    복수의 가상 어드레스들을 갖는 어드레스 템플릿을 디코딩하는 단계; 및
    상기 복수의 가상 어드레스들 각각에 대응하는 메모리 셀들(B0-B15)의 내용들로 피연산자 벡터를 형성하는 단계
    를 포함하는, 방법.
  19. 제15항 내지 제17항 중 어느 한 항에 있어서,
    가상 원점(404)을 갖는 피연산자 영역(402)을 유지하는 단계
    를 더 포함하고, 상기 피연산자 영역(402)은, 상기 2차원 데이터 구조(1010)의 일 부분을 표현하는 메모리 유닛들(102)을 포괄하는, 방법.
  20. 제19항에 있어서,
    상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 이동시키는 단계; 및
    상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들(102)이 상기 2차원 데이터 구조(1010)의 일 부분을 표현하도록, 상기 2차원 데이터 구조(1010)를 표현하는 원격 메모리를 이용하여 상기 제2 복수의 메모리 유닛들(102)을 초기화하는 단계
    를 더 포함하는, 방법.
  21. 제20항에 있어서,
    상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 이동시키는 것에 응답하여 제2 복수의 메모리 유닛들(102)이 상기 2차원 데이터 구조(1010)의 일 부분을 표현하도록, 상기 2차원 데이터 구조(1010)를 표현하는 원격 메모리를 이용하여 상기 제2 복수의 메모리 유닛들(102)을 초기화하는 단계는:
    (1) 상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 우측으로 이동시키는 것에 응답하여, 메모리 유닛들(102)의 이전 최좌측 컬럼을 메모리 유닛들(102)의 새로운 최우측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 플러스(plus) 단일 메모리 유닛(102)의 폭의 합으로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계;
    (2) 상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 좌측으로 이동시키는 것에 응답하여, 메모리 유닛들(102)의 이전 최우측 컬럼을 메모리 유닛들(102)의 새로운 최좌측 컬럼으로 대체하고 이전 최우측 컬럼의 가상 어드레스 마이너스(minus) 단일 메모리 유닛(102)의 폭 사이의 차이로서 새로운 컬럼의 가상 어드레스를 재할당하는 단계;
    (3) 상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 위로 이동시키는 것에 응답하여, 메모리 유닛들(102)의 이전 최하측 로우를 메모리 유닛들(102)의 새로운 최상측 로우로 대체하고 이전 최상측 로우의 가상 어드레스 플러스 단일 메모리 유닛(102)의 높이의 합으로서 새로운 로우의 가상 어드레스를 재할당하는 단계; 및
    (4) 상기 가상 원점(404) 및 상기 가상 원점(404)과 연관된 피연산자 영역(402)을 아래로 이동시키는 것에 응답하여, 메모리 유닛들(102)의 이전 최상측 로우를 메모리 유닛들(102)의 새로운 최하측 로우로 대체하고 이전 최하측 로우의 가상 어드레스 마이너스 단일 메모리 유닛(102)의 높이 사이의 차이로서 새로운 로우의 가상 어드레스를 재할당하는 단계
    중 하나를 포함하는, 방법.
  22. 제15항 내지 제17항 중 어느 한 항에 있어서,
    상기 메모리 유닛들(102)의 어레이의 단지 서브세트만이 상기 2차원 데이터 구조(1010)의 프로세싱의 부분으로서 상기 2차원 데이터 구조(1010)에 대응하는 데이터를 저장하는 데 사용되고, 상기 메모리 유닛들(102)의 어레이의 나머지 부분이 스크래치패드 공간(scratchpad space)을 위해 사용되는, 방법.
  23. 제15항 내지 제17항 중 어느 한 항에 있어서,
    상기 2차원 데이터 구조(1010)는 이미지 데이터를 포함하는, 방법.
  24. 제15항 내지 제17항 중 어느 한 항에 있어서,
    상기 2차원 데이터 구조(1010)는 매트릭스를 포함하는, 방법.
KR1020237002153A 2020-06-24 2021-06-11 공간 캐시 KR20230025891A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/910,813 US11687465B2 (en) 2020-06-24 2020-06-24 Spatial cache
US16/910,813 2020-06-24
PCT/IB2021/055185 WO2021260482A1 (en) 2020-06-24 2021-06-11 Spatial cache

Publications (1)

Publication Number Publication Date
KR20230025891A true KR20230025891A (ko) 2023-02-23

Family

ID=76523254

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237002153A KR20230025891A (ko) 2020-06-24 2021-06-11 공간 캐시

Country Status (6)

Country Link
US (1) US11687465B2 (ko)
EP (1) EP4172786A1 (ko)
JP (1) JP2023531250A (ko)
KR (1) KR20230025891A (ko)
CN (1) CN115698962A (ko)
WO (1) WO2021260482A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102631193B1 (ko) * 2023-10-23 2024-01-31 주식회사 뷰웍스 방사선 검출기의 리프레시 장치 및 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10600475B2 (en) * 2016-05-18 2020-03-24 Sitaram Yadavalli Method and apparatus for storing and accessing matrices and arrays by columns and rows in a processing unit
US11568920B2 (en) * 2017-08-02 2023-01-31 Samsung Electronics Co., Ltd. Dual row-column major dram

Also Published As

Publication number Publication date
US11687465B2 (en) 2023-06-27
EP4172786A1 (en) 2023-05-03
US20210406197A1 (en) 2021-12-30
WO2021260482A1 (en) 2021-12-30
CN115698962A (zh) 2023-02-03
JP2023531250A (ja) 2023-07-21

Similar Documents

Publication Publication Date Title
US9542307B2 (en) Shiftable memory defragmentation
US20120005451A1 (en) Data storage device and bad block managing method thereof
US9576619B2 (en) Shiftable memory supporting atomic operation
RU2006124547A (ru) Замещение регистров обработки данных
KR20010085614A (ko) 임의 벡터 어드레싱을 이용한 벡터 레지스터 파일
US9431074B2 (en) Shiftable memory supporting bimodal storage
EP1854011A2 (en) Enhancing performance of a memory unit of a data processing device by separating reading and fetching functionalities
US20060092161A1 (en) Method and apparatus for management of bit plane resources
WO2022206556A1 (zh) 图像数据的矩阵运算方法、装置、设备及存储介质
CN110096450B (zh) 多粒度并行存储系统及存储器
IL102001A (en) A method of operating a computer by simulating the attachment capacity of caches
GB2557657A (en) Mipmap rendering
KR20230025891A (ko) 공간 캐시
JP6800312B2 (ja) キャッシュメモリおよびその制御方法
CN106780415B (zh) 一种直方图统计电路及多媒体处理系统
CA1312393C (en) Method of tiling a figure in graphics rendering system
US11321092B1 (en) Tensor-based memory access
CN111553847B (zh) 图像处理方法及装置
JP5295958B2 (ja) エクストリーム仮想メモリ
Shahbahrami et al. FPGA implementation of parallel histogram computation
Wittenbrink et al. Cache tiling for high performance morphological image processing
KR20090095606A (ko) 콤팩션 및/또는 디콤팩션을 위한 방법, 장치 및 시스템
Walker et al. The Impact of Space-Filling Curves on Data Movement in Parallel Systems
KR101547366B1 (ko) 병렬 프로세서용 어드레싱 디바이스
US20050097127A1 (en) Reordering data between a first predefined order and a second predefined order with secondary hardware

Legal Events

Date Code Title Description
A201 Request for examination