KR20230058487A - 수집-분산 연산에 대한 메모리 보호 - Google Patents
수집-분산 연산에 대한 메모리 보호 Download PDFInfo
- Publication number
- KR20230058487A KR20230058487A KR1020237010969A KR20237010969A KR20230058487A KR 20230058487 A KR20230058487 A KR 20230058487A KR 1020237010969 A KR1020237010969 A KR 1020237010969A KR 20237010969 A KR20237010969 A KR 20237010969A KR 20230058487 A KR20230058487 A KR 20230058487A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- vector
- memory protection
- range
- address
- Prior art date
Links
- 239000013598 vector Substances 0.000 claims abstract description 379
- 238000000034 method Methods 0.000 claims abstract description 121
- 239000008187 granular material Substances 0.000 claims abstract description 92
- 230000004044 response Effects 0.000 claims description 13
- 238000001514 detection method Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 description 107
- 238000010586 diagram Methods 0.000 description 20
- 239000011159 matrix material Substances 0.000 description 8
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 239000003990 capacitor Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
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/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/1425—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
- G06F12/1441—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/454—Vector or matrix data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Storage Device Security (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
Abstract
수집-분산 연산에 대한 메모리 보호에 대한 시스템 및 방법이 개시된다. 예를 들어, 집적 회로는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및 인덱스 범위 회로를 포함할 수도 있으며, 인덱스 범위 회로는 인덱스의 튜플이 벡터 레지스터에 쓰일 때 프로세서 코어의 벡터 레지스터에 저장되는 인덱스의 튜플의 최댓값 및 최솟값을 메모이즈하고; 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값 및 메모이즈된 최댓값에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며; 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록 구성된다.
Description
본 개시는 수집-분산 연산에 대한 메모리 보호에 관한 것이다.
Roger Espasa와 Mateo Valero를 포함하는 연구자들은, 스트라이디드 연산(strided operation)을 기준+범위(base+range)로 기록하고, 프로그램 순서에 대한 메모리 위험을 검출할 목적으로 전체 주소 범위로 분산/수집하는 계획을 조사했다.
본 개시는 첨부의 도면과 연계하여 판독될 때 다음의 상세한 설명으로부터 가장 잘 이해된다. 일반적인 관행에 따르면, 도면의 다양한 피쳐는 일정한 비율이 아니다(not-to-scale)는 것이 강조된다. 반대로, 다양한 피쳐의 치수는 명확화를 위해 임의적으로 확장되거나 또는 축소된다.
도 1은 벡터 연산에 대한 메모리 보호를 지원하는 집적 회로의 한 예시에 대한 블록도이다.
도 2는 벡터 연산에 대한 메모리 보호를 지원하는 집적 회로의 한 예시에 대한 블록도이다.
도 3은 벡터 메모리 명령어의 예시들의 메모리 맵이다.
도 4는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 5는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 6은 2개의 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 7은 단일 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 8은 수집-분산 메모리 명령어에 대한 메모리 보호를 지원하는 집적 회로의 한 예시의 블록도이다.
도 9는 인덱스 익스트리마 메모이제이션(index extrema memoization)을 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 10은 인덱스 크기 제한(index size constraint)을 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 11은 인덱스 바운드(index bound)를 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 1은 벡터 연산에 대한 메모리 보호를 지원하는 집적 회로의 한 예시에 대한 블록도이다.
도 2는 벡터 연산에 대한 메모리 보호를 지원하는 집적 회로의 한 예시에 대한 블록도이다.
도 3은 벡터 메모리 명령어의 예시들의 메모리 맵이다.
도 4는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 5는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 6은 2개의 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 7은 단일 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 8은 수집-분산 메모리 명령어에 대한 메모리 보호를 지원하는 집적 회로의 한 예시의 블록도이다.
도 9는 인덱스 익스트리마 메모이제이션(index extrema memoization)을 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 10은 인덱스 크기 제한(index size constraint)을 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
도 11은 인덱스 바운드(index bound)를 이용한 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스의 한 예시의 흐름도이다.
개요
수집-분산 연산에 대한 메모리 보호에 대한 시스템 및 방법이 본 명세서에서 설명된다. 일부 프로세서 아키텍처는 순차적(in-order) 또는 비순차적(out-of-order) 벡터 기계를 구현할 수도 있다. 벡터 메모리 명령어를 실행하기 위해 몇 사이클이 걸릴 수 있다. 순차적 벡터 기계의 경우에도, 현재 벡터 명령어(current vector instruction) 및 다음 명령어 양자가 메모리에 액세스하고 예외를 발생시킬 수 있는 경우라도, 현재 벡터 명령어가 완료되기 전에 다음 명령어가 실행을 시작할 수 있도록 허용하는 것이 유리하다. 또한 다음 메모리 명령어가 현재 벡터 메모리 명령어와의 임의의 쓰기 후 읽기(ReadAfterWrite; RAW), 읽기 후 쓰기(WriteAfterRead; WAR) 또는 쓰기 후 쓰기(WriteAfterWrite; WAW)의 위험(hazard)을 갖는지를 결정하는 것이 유용할 수도 있다.
메모리 보호 위반에 대한 벡터의 고속 스캔을 가능하게 하려면, 최소한의 하드웨어로 고속으로 임의의 메모리 보호 위반에 대한 벡터 메모리 명령어를 검사하는 것이 유리하다. 각각의 벡터 메모리 명령어는 다수의 상이한 주소(address)의 다수의 요소들을 터치할 수도 있고, 실행하는 데 많은 사이클이 걸릴 수도 있다. 명령어 발행시에 주소 범위가 알려진 경우(예를 들어, 단위 스트라이드 또는 그 이상의 일정한 스트라이드가 있는 벡터의 경우), 주소의 가능한 범위는 발행시간(issue time)에 다음과 같이 계산될 수 있다.
Range = [ Base, Base + (VL-1) * stride + (bytes-per-element - 1)]
여기서 Base는 벡터의 메모리에서 기준 주소(base address)이고 VL은 명령어의 활성 벡터 길이(active vector length) 이다. 그런 다음 프로세서 아키텍처의 하드웨어는 범위 내의 각 요소 주소가 아닌 범위만을 검사하도록 최적화될 수도 있다. 주소가 실행 시간(예를 들어, 분산-수집 명령어)까지 알 수 없는 경우, 종래의 디자인은 보수적이고 모든 주소를 건드릴 수 있다고 가정한다.
단위 스트라이드(unit-stride) 또는 다른 일정한 스트라이드(constant-stride) 벡터 메모리 명령어에 대해, C가 사이클당 가능한 개별 하드웨어 메모리 검사의 개수라면, 종래의 시스템은 사이클당 C개의 요소만을 처리할 것이다. 본 명세서에 설명된 일부 프로세서 아키텍처 및 방법은 동일한 하드웨어로부터 더 큰 처리량을 허용하기 위해 주어진 C에 대해 사이클마다 처리되는 요소의 개수 K를 증가시킬 수도 있다. 더 적은 메모리 주소/사이클(예를 들어, C=1 또는 C=2)를 검사하는 것은 더 단순화된 하드웨어, 더 높은 주파수, 그리고/또는 더 낮은 전력을 허용한다.
C=2인 경우, 스트라이드 값과 보호 그래뉼(protection granule)을 기반으로 K>2를 선택함으로써, 그룹에 대해 여전히 두 개의 메모리 주소만 검사하는 것이 요구되면 되므로, 성능이 향상될 수도 있다 - 여기서 두 개의 메모리 주소는 그룹이 터치한 첫 번째 및 마지막 바이트 주소에 대응함 -. 예를 들어, 그룹마다 또는 서브벡터마다 요소의 최대 수는 다음과 같이 결정될 수도 있다,
K=f1(스트라이드, 보호 그래뉼, 기계 너비)
여기서 f1()은 스트라이드, 보호 그래뉼 및 너비를 요소의 최대 개수에 매핑(mapping)하는 임의의 함수이다. 일부 구현에서, K는 하드웨어를 단순화하기 위해 2의 거듭제곱 값을 취하도록 제한될 수도 있다.
C=1인 경우, 크기가 K>=1인 그룹에 대하여 C=1인 메모리 주소만 검사하는 것이 충분하게 되도록, 검사는 또한 기준 주소를 고려함으로써 최적화될 수도 있다(예를 들어, K = f2(base, stride, protection-granule, machine-width)). K-요소 그룹에 의해 접촉되는 주소의 범위는 모두 단일 보호 그래뉼에 있도록 제한될 수도 있다, 즉, 마지막 바이트 주소는 기준 주소와 동일한 보호 그래뉼에 있다. 이 C=1의 경우, 모든 요소가 보호 위반을 발생시키거나, 요소 중 어느 것도 보호 위반을 발생시키지 않아, 예외 처리를 단순화시킨다.
일부 아키텍처에서, 분산/수집 벡터 메모리 연산은 메모리 보호 그래뉼 내에 포함될 수도 있다. 주소 인덱스 요소의 너비가 8b 또는 16b로 제한되거나, 전체 주소 너비보다 작은 알려진 값으로 제한되는 경우, 범위는 데이터 값에 관계없이 제한된다. 무부호(unsigned) n비트 인덱스의 경우:
Range = [ base, base + 2^n - 1 + bytes-per-element - 1]
기준 주소와 관계없이, 인덱스 범위가 단일 보호 그래뉼 내에 맞으면, C=2 보호 검사를 사용하여 전체 범위를 검사할 수 있다(예를 들어, 범위의 첫 번째 및 마지막 바이트 주소 검사). 기준이 알려진 경우, 범위의 기준 및 마지막 바이트가 동일한 보호 그래뉼에 속할 때, 단일 메모리 검사(C=1)만 사용하도록 최적화할 수 있다.
일부 아키텍처에서, n이 알려지지 않았거나 큰 경우, 벡터 레지스터가 분산/수집 명령어에 대해 인덱스 벡터로 사용될 때 참조될 수 있는 주소 범위를 기억함으로써 분산/수집 명령어에 대한 메모리 보호 위반 검사를 여전히 최적화할 수 있다. 벡터 레지스터가 쓰일(written) 때 벡터 내의 가장 작은 요소와 가장 큰 요소가 기록(recorded)될 수도 있다. 그런 다음 명령어에 의해 암시된 요소가 다음 범위 내에 저장되도록 보장된다.
Range = [base + min, base + max + bytes-per-element - 1]
기준(base), 최소(min), 및 최대(max)에 따라, 메모리 보호 검사는 C=2 또는 C=1 기계에서 효율적으로 처리될 수도 있다.
본 명세서에서 사용된 용어 "메모이즈(memoize)"는 벡터 레지스터가 측면의 마이크로아키텍처 구조(예를 들어, 레지스터)에 쓰이고 기록될 때 최소/최대가 온 더 플라이(on the fly)로 계산됨을 의미한다. 정보가 메모이즈되는 입상도(granularity)는 더 미세할 수도 있고(예를 들어, 벡터 레지스터의 하위 조각) 또는 더 굵을 수도 있다(예를 들어, 벡터 레지스터 그룹).
일부 구현(implementation)에서, 최소/최대를 유지하기 위한 측면 구조를 갖는 것에 비해 공간(space)을 절약하기 위해, 그러나 빠르고 작은 회로로 여전히 최소/최대를 계산하기 위해, 최소=(인덱스 벡터의 모든 요소의 비트단위(bitwise) AND) 및 최대=(모든 요소의 비트단위 OR)가 사용될 수도 있다. VL이, 가능한 최대 VL보다 작아서, 테일 요소(tail element)가 방해받지 않고 남아 있거나, 일부 요소가 마스크에서 벗어나고(masked off) 방해받지 않으면, 이전 범위는 덮어써지기 보다는 확장된다. 만약 VL이 가능한 최대 VL보다 작아서 테일-애그노스틱(tail-agnostic) 정책이 테일 요소를 최대 가능한 값으로 설정하거나, 또는 만약 일부 요소가 마스크에서 벗어나서 마스크-애그노스틱(mask-agnostic) 정책으로 마스크에서 벗어난 요소를 최대 가능한 값으로 설정하는 경우, 메모이즈된 상한(upper bound)은 그것의 가능한 최댓값으로 설정된다. 만약 VL이 가능한 최대 VL보다 작아서 테일-애그노스틱 정책으로 테일 요소를 최소 가능한 값으로 설정하거나, 또는 만약 일부 요소가 마스크에서 벗어나서 마스크-애그노스틱 정책으로 마스크에서 벗어난 요소를 최소 가능한 값으로 설정하는 경우, 메모이즈된 하한(lower bound)은 그것의 가능한 최소 값으로 설정된다.
최소/최대가 프로그래머에게 알려진 경우, 보다 효율적인 위험(hazard) 검사가 구현될 수도 있다. 최소/최대를 기록하는 대신, 최소/최대 명령어에 대한 명시적 매개변수(explicit argument)를 가질 수 있다. 모든 요소가 최소/최대 내에 있다고 가정할 수 있고, 가정이 위반되면 런타임에 예외를 발생시킬 수 있다.
일부 구현에서, 벡터 연산에 대한 메모리 보호에 대한 기술은 종래의 프로세서에 비해 하나 이상의 장점을 실현하는 데 사용될 수도 있다. 예를 들어, 본 명세서에 설명된 구조 및 기술은 작은 회로 영역 및 전력 소비를 갖는 간단한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 할 수도 있다.
본 명세서에서 사용되는 바와 같이, "회로"라는 용어는 하나 이상의 기능을 구현하도록 구성된 전자 부품(예를 들어, 트랜지스터, 저항기, 커패시터 및/또는 인덕터)의 배열을 의미한다. 예를 들어, 회로는 논리적 기능을 집합적으로 구현하는 논리 게이트(logic gate)를 형성하기 위해 상호 연결된 하나 이상의 트랜지스터를 포함할 수도 있다.
세부사항
도 1은 벡터 메모리 연산에 대한 메모리 보호를 사용하여 명령어를 실행하기 위한 집적 회로(110)의 한 예시의 블록도이다. 집적 회로(110)는 프로세서 코어(120)를 포함한다. 프로세서 코어(120)는 벡터 메모리 명령어에 대한 빠른 메모리 보호 스캐닝을 용이하게 하기 위해, 메모리 내의 벡터를 서브벡터로 분할하도록 구성된 벡터 분할 회로(130)를 포함한다. 프로세서 코어(120)는 집적 회로(110) 외부의 메모리(140) 및/또는 집적 회로(110) 내부의 메모리(142)로부터 명령어를 가져오고, 메모리에 저장된 데이터에 액세스하도록 구성된다. 집적 회로(110)는 메모리 보호 회로(150)를 포함하며, 이는 보호 그래뉼이 있는 하나 이상의 주소에 대해 메모리 보호 검사를 수행하도록 구성될 수도 있다. 집적 회로(110)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 프로세서 아키텍처에 비해 이점을 제공할 수도 있다. 예를 들어, 집적 회로(110)는 도 4의 프로세스(400)를 구현할 수도 있다. 예를 들어, 집적 회로(110)는 도 6의 프로세스(500)를 구현할 수도 있다. 예를 들어, 집적 회로(110)는 도 6의 프로세스(600)를 구현할 수도 있다. 예를 들어, 집적 회로(110)는 도 7의 프로세스(700)를 구현할 수도 있다.
집적 회로(110)는 프로세서 코어(120)를 포함하며, 이는 일정한 스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인을 포함할 수도 있다. 가져오기(fetch), 디코딩(decode), 리네임(rename), 디스패치(dispatch), 발행(issue), 실행(execute), 메모리 액세스(memory access) 및 후기입(write-back) 스테이지와 같은 파이프라인 스테이지. 예를 들어, 프로세서 코어(120)는 RISC V 명령어 세트의 명령어를 실행하도록 구성될 수도 있다.
프로세서 코어(120)는 명령어 및/또는 데이터를 저장하는 집적 회로(110) 외부의 메모리(140)로부터 명령어를 가져오도록 구성될 수도 있다. 프로세서 코어(120)는 벡터 메모리 명령어(예를 들어, 벡터 로드(load) 명령어(310) 또는 벡터 저장(store) 명령어(330))를 포함하는 명령어에 반응하여 메모리(140)의 데이터에 액세스하도록 구성될 수도 있다. 예를 들어, 프로세서 코어(120)는 메모리 내의 데이터에 직접 또는 하나 이상의 캐시를 통해 액세스할 수도 있다. 프로세서 코어(120)는 또한 명령어 및/또는 데이터를 저장하는 집적 회로(110) 내부의 메모리(142)로부터 명령어를 가져오도록 구성될 수도 있다. 프로세서 코어(120)는 벡터 메모리 명령어를 포함하는 명령어에 반응하여 메모리(142)의 데이터에 액세스하도록 구성될 수도 있다. 도 1에는 도시되어 있지 않지만, 집적 회로(110)는 일부 구현에서 다중 프로세서 코어를 포함할 수도 있다.
집적 회로(110)는 보호 그래뉼로 메모리 보호 위반에 대하여 검사하도록 구성된 메모리 보호 회로(150)를 포함한다. 메모리 보호 회로(150)는 특권을 가진(privileged) 소프트웨어가 메모리 영역을 정의하고 그것들 각각에 메모리 액세스 허가를 할당하도록 허용할 수도 있다. 메모리 보호 회로(150)의 보호 그래뉼은 관련된 액세스 허가를 갖는 이 메모리 영역의 크기 및 해상도를 제한한다. 예를 들어, 보호 그래뉼은 메모리의 페이지(예시: 4kB 또는 8kB 페이지)에 대응할 수도 있다. 일부 구현에서, 메모리 보호 회로(150)는 또한 이러한 메모리 영역에 대한 메모리 속성을 지정하며(specify), 이는 이러한 영역의 정렬(ordering) 및 병합(merging) 동작뿐만 아니라 캐싱 및 버퍼링 속성을 지정할 수도 있다. 메모리 보호 회로(150)는 프로세서 코어(120)에 의한 명령어 가져오기 및 데이터 액세스를 포함하는 트랜잭션(transaction)를 모니터하는데 사용될 수도 있으며, 이는 메모리 보호 위반이 검출될 때 결함 예외(fault exception)를 유발할 수 있다. 예를 들어, 승인되지 않은 메모리에 액세스하려는 시도는 하드웨어 결함(예를 들어, 분할 결함, 스토리지 위반 예외 또는 잘못된 프로세스의 비정상 종료)로 이어질 수도 있다. 메모리 보호 회로(150)는 프로세스가 자신에게 할당되지 않은 메모리에 액세스하는 것을 방지하는 역할을 할 수도 있으며, 이는 프로세스 내의 버그 또는 악성 소프트웨어(malware)가 다른 프로세스 또는 운영 시스템에 영향을 미치는 것을 방지할 수도 있다. 이 예시에서, 메모리 보호 회로(150)는 프로세서 코어(120)의 일부이다. 일부 구현에서, 메모리 보호 회로(150)는 프로세서 코어(120) 외부(예를 들어, 외부 메모리 시스템의 일부)에 있을 수도 있다.
메모리 보호 회로(150)는 다양한 크기 및 복잡도를 가질 수도 있다. 일부 구현에서, 메모리 보호 회로(150)는 클록 사이클마다 2개의 주소를 검사하도록 구성된다. 예를 들어, 메모리 보호 회로(150)는 2개의 주소를 수신하는 것을 허용하고, 단일 클록 사이클 동안 메모리 보호 위반에 대해 메모리에서 2개의 주소 모두를 독립적으로 검사하게 하는 2개의 주소 포트를 가질 수도 있다. 예를 들어, 주소는 프로세서 코어(120)에 의해 실행되고 주소의 메모리에 액세스를 시도하는 프로세스와 관련된 메모리 보호 키 또는 링 넘버에 주소를 포함하는 메모리 영역에 대한 메모리 보호 키 또는 링을 비교함으로써 검사될 수도 있다. 일부 구현에서, 메모리 보호 회로(150)는 클록 사이클마다 단일 주소를 검사하도록 구성되므로, 더 적은 회로 영역을 차지하고 더 적은 전력을 소비할 수도 있다. 일부 구현에서, 메모리 보호 회로(150)는 2개보다 많은 주소 포트를 가질 수도 있거나 그렇지 않으면 메모리 보호 위반에 대해 클록 사이클마다 2개보다 많은 주소 또는 주소 범위를 검사하도록 구성될 수도 있다.
집적 회로(110)는 벡터 분할 회로(130)를 포함한다. 벡터 분할 회로(130)는 벡터의 다른 서브벡터에 대한 메모리 액세스와 병렬로 수행될 서브벡터에 대한 메모리 보호 스캐닝을 허용하기 위해 및 벡터 메모리 명령어에 대한 처리량을 늘리기 위해 메모리(예를 들어, 메모리(140) 또는 메모리(142))에서 액세스되는 벡터를 분할하도록 구성될 수도 있다. 벡터 분할 회로(130)는 벡터 메모리 명령어에 의해 식별되는 벡터를, 1보다 큰, 최대 길이의 서브벡터와 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하도록 구성될 수도 있다. 일부 구현에서, 최대 길이는 벡터 메모리 명령어(예를 들어, 벡터 로드 명령어(310) 또는 벡터 저장 명령어(330))에 의해 식별되는 벡터의 스트라이드 및 보호 그래뉼에 기반하여 결정될 수도 있다. 예를 들어, 벡터 분할 회로(130)는 최대 길이가 보호 그래뉼에 정비례하고 벡터의 스트라이드에 반비례하도록 최대 길이를 결정하도록 구성될 수도 있다. 예를 들어, 최대 길이는 g/s로 결정될 수도 있으며, 여기서 g는 보호 그래뉼(예를 들어, 바이트 단위)이고 s는 벡터의 스트라이드(예를 들어, 바이트 단위)이다. 일부 구현에서, 최대 길이는 2의 거듭제곱(예를 들어, g/s이하의 최대 2의 거듭제곱)으로 제한된다. 최대 길이는 벡터의 요소 너비(element witdth)에 의존할 수도 있다. 최대 길이는 또한 프로세서 코어(120)의 기계 너비(machine width), 즉 프로세서 코어가 클록 사이클마다 처리할 수 있는 벡터의 요소 개수에 의존할 수도 있다. 예를 들어, 최대 길이는 최소(w, (g/s))로 결정될 수도 있으며, 여기서 w는 프로세서 코어(120)의 기계 너비이다. 예를 들어, 벡터는 스트라이드가 1인 단위-스트라이드 벡터일 수도 있다. 예를 들어, 벡터는 1보다 큰 일정한 스트라이드를 가질 수도 있다(예를 들어, 스트라이드는 일련의 행으로 저장되는 행렬 데이터 구조의 열 벡터에 액세스하기 위한 행렬의 행 길이에 대응할 수도 있다). 벡터 분할 회로(130)는, 메모리 보호 회로(150)를 사용하여 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록 구성될 수도 있다. 벡터 분할 회로(130)는, 메모리 보호 회로(150)를 사용하여 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하도록 구성될 수도 있다. 예를 들어, 벡터 분할 회로(130)는 프로세서 코어(120)의 파이프라인의 실행 스테이지의 일부일 수도 있다.
일부 구현에서, 메모리 보호 회로(150)는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 벡터 분할 회로(130)는 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를, 단일 클록 사이클 동안, 서브벡터의 첫 번째 요소의 주소 및 서브벡터의 마지막 요소의 주소를 메모리 보호 회로(150)에 입력함으로써 검사한다. 일부 구현에서, 메모리 보호 회로(150)는 클록 사이클마다 단일 주소를 검사하도록 구성되고, 벡터 분할 회로(130)는 벡터의 기준 주소에 기반하여 최대 길이를 결정하도록 구성된다. 예를 들어, 벡터에 대한 기준 주소를 고려하는 것은, 서브벡터가 단일 보호 그래뉼 내에 포함되고, 따라서 메모리 보호 위반에 대하여, 서브벡터의 임의의 요소와 관련된 주소를 사용하여 메모리 보호 회로(150)의 단일 참조로 검사될 수 있는 것을 확실하게 하도록, 메모리 내 보호 그래뉼 경계에 정렬된(aligned) 서브벡터로의 벡터의 분할의 결정을 가능하게 할 수도 있다.
예를 들어, 집적 회로(110)는, 하나 이상의 추가 서브벡터 중 하나의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성될 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 프로세서 코어(120)의 실행을 중단시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 디스크로부터 메모리(140) 또는 메모리(142)로 페이지를 가져오도록 유발할 수도 있다.
도 2는 벡터 연산에 대한 메모리 보호를 사용하여 명령어를 실행하기 위한 집적 회로(210)의 한 예시의 블록도이다. 집적 회로(210)는 프로세서 코어(220)를 포함한다. 프로세서 코어(220)는 벡터 메모리 명령어에 대한 빠른 메모리 보호 스캐닝을 용이하게 하기 위해, 메모리 내의 벡터를 서브벡터로 분할하도록 구성된 벡터 분할 회로(280)를 포함하는 프로세서 파이프라인(230)을 포함한다. 프로세서 코어(220)는 벡터 레지스터를 포함할 수도 있는 하나 이상의 레지스터 파일(240)을 포함한다. 프로세서 코어(220)는 L1 명령어 캐시(250) 및 L1 데이터 캐시(252)를 포함한다. 집적 회로(210)는 외부 메모리 시스템(260)을 포함하며, 이는 명령어 및 데이터를 저장하는 메모리를 포함할 수도 있고, 및/또는 명령어 및/또는 데이터를 저장하는 집적 회로(210) 외부의 메모리(262)에 대한 액세스를 제공할 수도 있다. 외부 메모리 시스템(260)은 메모리 보호 회로(270)를 포함하며, 이는 보호 그래뉼로 하나 이상의 주소에 대한 메모리 보호 검사를 수행하도록 구성될 수 있다. 집적 회로(210)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 프로세서 아키텍처에 비해 이점을 제공할 수도 있다. 예를 들어, 집적 회로(210)는 도 4의 프로세스(400)를 구현할 수도 있다. 예를 들어, 집적 회로(210)는 도 6의 프로세스(500)를 구현할 수도 있다. 예를 들어, 집적 회로(210)는 도 6의 프로세스(600)를 구현할 수도 있다. 예를 들어, 집적 회로(210)는 도 7의 프로세스(700)를 구현할 수도 있다.
집적 회로(210)는 일정한 스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인(230)을 포함하는 프로세서 코어(220)를 포함한다. 파이프라인(230)은 집적 회로(210)의 메모리 시스템으로부터 명령어를 검색하도록 구성된 하나 이상의 가져오기 스테이지(fetch stage)를 포함한다. 예를 들어, 파이프라인(230)은 L1 명령어 캐시(250)를 통해 명령어를 가져올 수도 있다. 파이프라인(230)은 디코딩, 리네임, 디스패치, 발행, 실행, 메모리 액세스 및 후기입 스테이지와 같은 추가 스테이지를 포함할 수도 있다. 예를 들어, 프로세서 코어(220)는 RISC V 명령어 세트의 명령어를 실행하도록 구성된 파이프라인(230)을 포함할 수도 있다.
집적 회로(210)는 프로세서 코어(220)를 위한 하나 이상의 레지스터 파일(240)을 포함한다. 하나 이상의 레지스터 파일(240)은 프로세서 코어(220)의 일부 또는 전부 또는 아키텍처 상태를 저장할 수도 있다. 예를 들어, 하나 이상의 레지스터 파일(240)은 벡터 레지스터 세트를 포함할 수도 있다. 예를 들어, 하나 이상의 레지스터 파일(240)은 제어 및 상태 레지스터(control and status registers; CSR) 세트를 포함할 수 있다. 예를 들어, 하나 이상의 레지스터 파일(240)은 스칼라(scalar) 레지스터 세트를 포함할 수도 있다.
집적 회로(210)는 프로세서 코어(220)를 위한 L1 명령어 캐시(250)를 포함한다. L1 명령어 캐시(250)는 명령어 메모리를 위한 집합-연관(set-associative) 캐시일 수도 있다. 태그 어레이(tag array)와 데이터 어레이(data array)를 직렬로 읽는 것의 긴 대기 시간(latency) 및, 어레이를 병렬로 읽는 것의 높은 전력을 피하기 위해, 방식 예측기(way predictor)가 사용될 수도 있다. 방식 예측기가 초기(early) 가져오기 스테이지에서 액세스될 수도 있고, 히트 방식(hit way)이 데이터 어레이의 읽기 인덱스(read index)로 인코딩될 수도 있다. 태그 어레이는 후기(later) 가져오기 스테이지에서 액세스될 수도 있고, 방식 예측기를 입증하는 데 사용될 수도 있다.
집적 회로(210)는 프로세서 코어(220)를 위한 L1 데이터 캐시(252)를 포함한다. 예를 들어, L1 데이터 캐시(252)는 집합-연관 VIPT 캐시일 수도 있는데, 이는 가상 주소(virtual address) 비트 VA[set]로 순전히 인덱스되고 모든 변환(translate) 물리적 주소(physical address) 비트 PA[msb:12]로 완전히 태그됨을 의미한다. 낮은 전력 소비를 위해, 태그 및 데이터 어레이는 기껏해야 단일 데이터 SRAM 방식에 액세스할 수 있도록 직렬로 조회될 수도 있다. 예를 들어, L1 데이터 캐시(252)의 라인 크기는 64바이트, 비트 사이즈(beat size)는 26바이트일 수도 있다.
집적 회로(210)는 명령어 및 데이터를 저장하는 메모리를 포함할 수도 있고, 및/또는 명령어 및/또는 데이터를 저장하는 집적 회로(210) 외부의 메모리(262)에 대한 액세스를 제공할 수도 있는, 외부 메모리 시스템(260)을 포함한다. 예를 들어, 외부 메모리 시스템(260)은 다중 L1 캐시에 걸쳐 캐시 일관성을 유지하기 위해 캐시 일관성 프로토콜/정책을 구현하도록 구성될 수도 있는 L2 캐시를 포함할 수도 있다. 도 2에는 도시되어 있지 않지만, 집적 회로(210)는 일부 구현에서 다중 프로세서 코어를 포함할 수도 있다. 예를 들어, 외부 메모리 시스템(260)은 다중 레이어를 포함할 수도 있다.
외부 메모리 시스템(260)은 보호 그래뉼로 메모리 보호 위반에 대하여 검사하도록 구성된 메모리 보호 회로(270)를 포함한다. 메모리 보호 회로(270)는 특권을 가진 소프트웨어가 메모리 영역을 정의하고 그것들 각각에 메모리 액세스 허가를 할당하도록 허용할 수도 있다. 메모리 보호 회로(270)의 보호 그래뉼은 관련된 액세스 허가를 갖는 이 메모리 영역의 크기 및 그에 따라 해상도를 제한한다. 예를 들어, 보호 그래뉼은 메모리의 페이지(예시: 4kB 또는 8kB 페이지)에 대응할 수도 있다. 일부 구현에서, 메모리 보호 회로(270)는 또한 이러한 메모리 영역에 대한 메모리 속성을 지정하며, 이는 이러한 영역의 정렬 및 병합 동작뿐만 아니라 캐싱 및 버퍼링 속성을 지정할 수도 있다. 메모리 보호 회로(270)는 프로세서 코어(220)에 의한 명령어 가져오기 및 데이터 액세스를 포함하는 트랜잭션을 모니터하는데 사용될 수도 있으며, 이는 메모리 보호 위반이 검출될 때 결함 예외를 유발할 수 있다. 예를 들어, 승인되지 않은 메모리에 액세스하려는 시도는 하드웨어 결함(예를 들어, 분할 결함, 스토리지 위반 예외 또는 잘못된 프로세스의 비정상 종료)으로 이어질 수도 있다. 메모리 보호 회로(270)는 프로세스가 자신에게 할당되지 않은 메모리에 액세스하는 것을 방지하는 역할을 할 수도 있으며, 이는 프로세스 내의 버그 또는 악성 소프트웨어가 다른 프로세스 또는 운영 시스템에 영향을 미치는 것을 방지할 수도 있다.
메모리 보호 회로(270)는 다양한 크기 및 복잡도를 가질 수 있다. 일부 구현에서, 메모리 보호 회로(270)는 클록 사이클마다 2개의 주소를 검사하도록 구성된다. 예를 들어, 메모리 보호 회로(270)는 2개의 주소를 수신하는 것을 허용하고, 단일 클록 사이클 동안 메모리 보호 위반에 대해 메모리에서 2개의 주소 모두를 독립적으로 검사하게 하는 2개의 주소 포트를 가질 수도 있다. 예를 들어, 주소는 프로세서 코어(220)에 의해 실행되고 주소의 메모리에 액세스를 시도하는 프로세스와 관련된 메모리 보호 키 또는 링 넘버에 주소를 포함하는 메모리 영역에 대한 메모리 보호 키 또는 링을 비교함으로써 검사될 수도 있다. 일부 구현에서, 메모리 보호 회로(270)는 클록 사이클마다 단일 주소를 검사하도록 구성되므로 더 적은 회로 영역을 차지하고 더 적은 전력을 소비할 수도 있다. 일부 구현에서, 메모리 보호 회로(270)는 2개보다 많은 주소 포트를 가질 수도 있거나 그렇지 않으면 메모리 보호 위반에 대해 클록 사이클마다 2개보다 많은 주소 또는 주소 범위를 검사하도록 구성될 수도 있다.
파이프라인(230)은 벡터 분할 회로(280)를 포함한다. 벡터 분할 회로(280)는 벡터의 다른 서브벡터에 대한 메모리 액세스와 병렬로 수행될 서브벡터에 대한 메모리 보호 스캐닝을 허용하기 위해 및 벡터 메모리 명령어에 대한 처리량을 증가시키기 위해 메모리에서 액세스되는 벡터를 분할하도록 구성될 수도 있다. 벡터 분할 회로(280)는 단일 클록 사이클에서 액세스되는 벡터 요소의 개수에 대응하는, 1보다 큰, 최대 길이를 결정하도록 구성될 수도 있다. 최대 길이는 벡터 메모리 명령어(예를 들어, 벡터 로드 명령어(310) 또는 벡터 저장 명령어(330))에 의해 식별되는 벡터의 스트라이드 및 보호 그래뉼에 기반하여 결정될 수도 있다. 예를 들어, 최대 길이는 보호 그래뉼에 정비례하고 스트라이드에 반비례할 수도 있다. 예를 들어, 최대 길이는 g/s로 결정될 수 있으며, 여기서 g는 보호 그래뉼(예를 들어, 바이트 단위)이고 s는 벡터의 스트라이드(예를 들어, 바이트 단위)이다. 일부 구현에서, 최대 길이는 2의 거듭제곱(예를 들어, g/s이하의 최대 2의 거듭제곱)으로 제한된다. 최대 길이는 벡터의 요소 너비에 의존할 수도 있다. 최대 길이는 또한 파이프라인(230)의 기계 너비, 즉 파이프라인이 클록 사이클마다 처리할 수 있는 벡터의 요소 개수에 의존할 수도 있다. 예를 들어, 최대 길이는 최소(w, (g/s))로 결정될 수도 있으며, 여기서 w는 파이프라인(230)의 기계 너비이다. 예를 들어, 벡터는 스트라이드가 1인 단위-스트라이드 벡터일 수도 있다. 예를 들어, 벡터는 1보다 큰 일정한 스트라이드를 가질 수도 있다(예를 들어, 스트라이드는 일련의 행으로 저장되는 행렬 데이터 구조의 열 벡터에 액세스하기 위한 행렬의 행 길이에 대응할 수도 있다). 벡터 분할 회로(280)는 벡터를 최대 길이의 서브벡터와 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하도록 구성될 수도 있다. 벡터 분할 회로(280)는, 메모리 보호 회로(270)를 사용하여 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할지 여부를 검사하도록 구성될 수도 있다. 벡터 분할 회로(280)는, 메모리 보호 회로(270)를 사용하여 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하도록 구성될 수도 있다. 예를 들어, 벡터 분할 회로(280)는 파이프라인(230)의 실행 스테이지의 일부일 수도 있다.
일부 구현에서, 메모리 보호 회로(270)는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 벡터 분할 회로(280)는 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를, 단일 클록 사이클 동안, 서브벡터의 첫 번째 요소의 주소 및 서브벡터의 마지막 요소의 주소를 메모리 보호 회로(270)에 입력함으로써 검사한다. 일부 구현에서, 메모리 보호 회로(270)는 클록 사이클마다 단일 주소를 검사하도록 구성되고, 벡터 분할 회로(280)는 벡터의 기준 주소에 기반하여 최대 길이를 결정하도록 구성된다. 예를 들어, 벡터에 대한 기준 주소를 고려하는 것은, 서브벡터가 단일 보호 그래뉼 내에 포함되고, 따라서 메모리 보호 위반에 대하여, 서브벡터의 임의의 요소와 관련된 주소를 사용하여 메모리 보호 회로(270)의 단일 참조로 검사될 수 있는 것을 확실하게 하도록, 메모리 내 보호 그래뉼 경계에 정렬된(aligned) 서브벡터로의 벡터의 분할의 결정을 가능하게 할 수도 있다.
예를 들어, 집적 회로(210)는, 하나 이상의 추가 서브벡터 중 하나의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성될 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 프로세서 코어(220)의 실행을 중단시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 디스크로부터 페이지를 가져오도록 유발할 수도 있다.
도 3은 벡터 로드 명령어(310) 및 벡터 저장 명령어(330)을 포함하는 예시적인 벡터 메모리 명령어(300)의 메모리 맵이다. 벡터 로드 명령어(310)는 연산코드(312), 벡터 로드 명령어(310)의 결과를 저장하는 데 사용되는 아키텍처 레지스터를 식별하는 목적지 레지스터 필드(314), 메모리로부터 로드되는 벡터의 메모리 요소 크기를 지정하는 너비 필드(316), 벡터에 대한 기준 주소를 메모리에 저장하는 아키텍처 레지스터를 식별하는 기준 레지스터 필드(318), 벡터에 대한 스트라이드(예를 들어, 단위-스트라이드 벡터 로드 또는 다른 일정한 스트라이드에 대한 것)를 메모리에 저장하는 아키텍처 레지스터를 식별하는 스트라이드 레지스터 필드(320), 벡터 로드 명령어(310)에 대한 추가 또는 선택적 파라미터(예를 들어, 메모리 어드레싱 모드 및/또는 각 세그먼트의 필드 개수를 포함함)를 지정하는 모드 필드(322)를 포함한다. 벡터 저장 명령어(330)는 연산코드(332), 저장을 위한 벡터 데이터를 보유하는 아키텍처 레지스터를 식별하는 소스 레지스터 필드(334), 메모리에 저장되는 벡터의 메모리 요소 크기를 지정하는 너비 필드(336), 벡터에 대한 기준 주소를 메모리에 저장하는 아키텍처 레지스터를 식별하는 기준 레지스터 필드(338), 벡터에 대한 스트라이드를 메모리에 저장하는 아키텍처 레지스터를 식별하는 스트라이드 레지스터 필드(340), 및 벡터 저장 명령어(330)에 대한 추가 또는 선택적 파라미터(예를 들어, 메모리 어드레싱 모드 및/또는 각 세그먼트의 필드 개수를 포함함)를 지정하는 모드 필드(342)를 포함한다. 예를 들어, RISC-V 프로세서 코어에서, 벡터 로드 명령어(310)는 벡터 인코딩 확장을 갖는 LOAD-FP 명령어일 수도 있고 벡터 저장 명령어(330)는 벡터 인코딩 확장을 갖는 STORE-FP 명령어일 수도 있다.
도 4는 벡터 연산에 대한 메모리 보호에 대한 프로세스(400)의 한 예시의 흐름도이다. 프로세스(400)는 프로세서 코어를 사용하여 벡터 메모리 명령어를 가져오는 단계(410); 벡터 메모리 명령어에 의해 식별되는 벡터를, 1보다 큰 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하는 단계(420); 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(430); (단계(435)에서) 메모리 보호 위반이 검출된 경우, 예외를 발생시키는 단계(440); 및 (단계(435)에서) 메모리 보호 위반이 검출되지 않은 경우, 메모리 보호 회로를 사용하여, 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하는 단계(450)를 포함한다. 프로세스(400)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(400)는 도 1의 집적 회로(110)를 사용하여 구현될 수도 있다. 예를 들어, 프로세스(400)는 도 2의 집적 회로(210)를 사용하여 구현될 수도 있다.
프로세스(400)는 일정한-스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어(예를 들어, 프로세서 코어(220))를 사용하여 벡터 메모리 명령어를 가져오는 단계(410)를 포함한다. 예를 들어, 벡터 메모리 명령어는 벡터 로드 명령어(310)일 수도 있다. 예를 들어, 벡터 메모리 명령어는 벡터 저장 명령어(330)일 수도 있다. 일부 구현에서, 벡터 메모리 명령어는 하나 이상의 캐시(예를 들어, L1 명령어 캐시(250))를 통해 메모리(예를 들어, 메모리(262))로부터 가져와진다(410).
프로세스(400)는 벡터 메모리 명령어에 의해 식별되는 벡터를 1보다 큰 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하는 단계(420)를 포함한다. 예를 들어, 벡터는 메모리의 기준 주소, 요소 너비, 및/또는 벡터가 메모리에 저장되거나 저장될 위치를 지정하는 스트라이드를 포함하는 벡터 메모리 명령어의 파라미터에 의해 부분적으로 식별될 수도 있다. 일부 구현에서, 최대 길이는 보호 그래뉼 및 벡터의 스트라이드(예를 들어, 벡터 로드 명령어(310) 또는 벡터 저장 명령어(330))에 기반하여 결정될 수도 있다. 예를 들어, 프로세스(400)는 최대 길이가 메모리 보호 회로(예를 들어, 메모리 보호 회로(150))의 보호 그래뉼에 정비례하고 벡터의 스트라이드에 반비례하도록 최대 길이를 결정하는 단계를 포함할 수도 있다. 예를 들어, 최대 길이는 g/s로 결정될 수도 있으며, 여기서 g는 보호 그래뉼(예를 들어, 바이트 단위)이고 s는 벡터의 스트라이드(예를 들어, 바이트 단위)이다. 일부 구현에서, 최대 길이는 2의 거듭제곱(예를 들어, g/s이하의 최대 2의 거듭제곱)으로 제한된다. 최대 길이는 벡터의 요소 너비에 의존할 수도 있다. 최대 길이는 또한 명령어를 실행하는 프로세서 코어의 기계 너비, 즉 프로세서 코어가 클록 사이클마다 처리할 수 있는 벡터의 요소 개수에 의존할 수도 있다. 예를 들어, 최대 길이는 최소(w, (g/s))로 결정될 수도 있으며, 여기서 w는 프로세서 코어의 기계 너비이다. 예를 들어, 벡터는 스트라이드가 1인 단위-스트라이드 벡터일 수도 있다. 예를 들어, 벡터는 1보다 큰 일정한 스트라이드를 가질 수도 있다(예를 들어, 스트라이드는 일련의 행으로 저장되는 행렬 데이터 구조의 열 벡터에 액세스하기 위한 행렬의 행 길이에 대응할 수도 있다). 일부 구현에서, 최대 길이는 벡터의 기준 주소에 기반하여 결정되며, 이는 서브벡터의 모든 요소가 서브벡터에 대한 메모리 보호 스캐닝을 단순화하기 위해 단일 보호 그래뉼에 위치하는 것을 확실하게 하도록, 메모리에서 보호 그래뉼을 갖는 벡터의 분할(420)로 인한 서브벡터의 정렬(alignment)을 가능하게 할 수도 있다. 예를 들어, 이러한 단순화는 클록 사이클마다 단일 주소를 검사하도록 구성된 메모리 보호 회로의 사용을 가능하게 할 수도 있으며, 따라서 더 적은 회로 영역을 차지할 수도 있고 더 적은 전력을 소비할 수도 있다.
프로세스(400)는 메모리 보호 회로를 사용하여, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(430)를 포함한다. 일부 구현에서, 메모리 보호 회로(예를 들어, 메모리 보호 회로(150))는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(430)는 단일 클록 사이클 동안, 서브벡터의 첫 번째 요소의 주소 및 서브벡터의 마지막 요소의 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 예를 들어, 서브벡터의 최대 길이가 서브벡터의 요소가 2개 이하의 인접한 보호 그래뉼에 위치될 수 있는 것을 확실하게 하는 경우 이 접근법은 효과적일 수도 있다. 일부 구현에서, 서브벡터의 요소가 단일 보호 그래뉼에 있는 것으로 알려진 경우, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(430)는 서브벡터의 요소(예를 들어, 첫 번째 요소 또는 다른 요소)와 관련된 단일 주소를 메모리 보호 회로로 입력함으로써 이루어질 수도 있다. 더 큰 서브벡터가 사용되는 일부 구현에서, 메모리 보호 위반에 대해 서브벡터의 요소를 검사하는 단계(430)와 관련된 복잡도(complexity)는 관련된 보호 그래뉼의 개수에 따라 스케일(scale)될 수도 있다. 예를 들어, 더 많은 입력 주소 포트가 있는 더 큰 메모리 보호 회로는 벡터 메모리 명령어의 실행에 대한 성능을 높이기 위해 클록 사이클마다 더 많은 요소를 검사하기위해 사용될 수도 있다.
(단계(435)에서) 메모리 보호 위반이 검출되는 경우, 서브벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여 예외를 발생시키는 단계(440). 일부 구현에서, 예외를 발생시키는 것은 프로세서 코어(예를 들어, 프로세서 코어(120))에서의 실행을 중단시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 디스크로부터 메모리(예를 들어, 메모리(140) 또는 메모리(142))로 페이지를 가져오도록 유발할 수도 있다.
(단계(435)에서) 메모리 보호 위반이 검출되지 않는 경우, (예를 들어, 메모리 보호 회로(150)를 사용하여) 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하는 단계(450). 예를 들어, 요소에 액세스하는 단계(450)는 벡터 로드 명령어의 실행 동안 메모리로부터(예를 들어, 메모리(140)로부터) 이들 요소의 값을 읽는 것을 포함할 수도 있다. 예를 들어, 요소에 액세스하는 단계(450)는 벡터 저장 명령어의 실행 동안 메모리에(예를 들어, 메모리(140)로부터) 이들 요소의 값을 쓰는 것을 포함할 수도 있다. 따라서 메모리 보호 스캐닝을 위해 벡터를 서브벡터로 분할하는 단계(420)는 벡터 메모리 명령어의 실행에서 더 많은 병렬성을 가능하게 할 수도 있고 프로세싱 코어의 성능을 증가시킬 수도 있다. 도 4에 명시적으로 도시되어 있지는 않지만, 메모리 보호 위반에 대한 벡터의 서브벡터를 검사하는 단계(430)는 직렬로 계속될 것인데 반하여, 이전에 검사(430)된 서브벡터는 모든 서브벡터가 검사(430)되고 액세스(450)되거나 또는 예외(440)가 발생할 때까지 프로세서 코어의 파이프라인의 후속 스테이지에 의해 메모리에서 계속 액세스(450)될 것이다.
도 5는 벡터 연산에 대한 메모리 보호에 대한 프로세스(400)의 한 예시의 흐름도이다. 프로세스(500)는 단일 클록 사이클에서 액세스될 벡터 요소의 개수에 대응하는 1보다 큰 최대 길이를 결정하는 단계(510); 벡터를 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하는 단계(520); 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(530); (단계(535)에서) 메모리 보호 위반이 검출된 경우, 예외를 발생시키는 단계(540); 및 (단계(535)에서) 메모리 보호 위반이 검출되지 않은 경우, 메모리 보호 회로를 사용하여, 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하는 단계(450)를 포함한다. 프로세스(500)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(500)는 도 1의 집적 회로(110)를 사용하여 구현될 수도 있다. 예를 들어, 프로세스(500)는 도 2의 집적 회로(210)를 사용하여 구현될 수도 있다.
프로세스(500)는 단일 클록 사이클에서 액세스될 벡터 요소의 개수에 대응하는 1보다 큰 최대 길이를 결정하는 단계(510)를 포함한다. 최대 길이는 보호 그래뉼(예를 들어, 메모리 보호 회로(150)의 보호 그래뉼) 및 벡터 메모리 명령어에 의해 식별되는 벡터의 스트라이드에 기반하여 결정(510)될 수도 있다. 일부 구현에서, 최대 길이는 보호 그래뉼에 정비례하고 스트라이드에 반비례한다. 예를 들어, 최대 길이는 g/s로 결정(510)될 수도 있으며, 여기서 g는 보호 그래뉼(예를 들어, 바이트 단위)이고 s는 벡터의 스트라이드(예를 들어, 바이트 단위)이다. 일부 구현에서, 최대 길이는 2의 거듭제곱(예를 들어, g/s이하의 최대 2의 거듭제곱)으로 제한된다. 최대 길이는 벡터의 요소 너비에 의존할 수도 있다. 최대 길이는 또한 명령어를 실행하는 프로세서 코어의 기계 너비, 즉 프로세서 코어가 클록 사이클마다 처리할 수 있는 벡터의 요소 개수에 의존할 수도 있다. 예를 들어, 최대 길이는 최소(w, (g/s))로 결정될 수도 있으며, 여기서 w는 프로세서 코어의 기계 너비이다. 예를 들어, 벡터는 스트라이드가 1인 단위-스트라이드 벡터일 수도 있다. 예를 들어, 벡터는 1보다 큰 일정한 스트라이드를 가질 수도 있다(예를 들어, 스트라이드는 일련의 행으로 저장되는 행렬 데이터 구조의 열 벡터에 액세스하기 위한 행렬의 행 길이에 대응할 수도 있다). 일부 구현에서, 최대 길이는 벡터의 기준 주소에 기반하여 결정(510)되며, 이는 서브벡터의 모든 요소가 서브벡터에 대한 메모리 보호 스캐닝을 단순화하기 위해 단일 보호 그래뉼에 위치하는 것을 확실하게 하도록, 메모리에서 보호 그래뉼을 갖는 벡터의 분할(520)로 인한 서브벡터의 정렬(alignment)을 가능하게 할 수도 있다. 예를 들어, 이러한 단순화는 클록 사이클마다 단일 주소를 검사(530)하도록 구성된 메모리 보호 회로의 사용을 가능하게 할 수도 있으며, 따라서 더 적은 회로 영역을 차지할 수도 있고 더 적은 전력을 소비할 수도 있다.
프로세스(500)는 벡터를 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하는 단계(520)를 포함한다. 일부 구현에서, 벡터를 분할하는 단계(520)는 벡터의 모든 요소가 서브벡터에 할당될 때까지, 벡터의 최대 길이 연속 요소(consecutive elements)의 그룹을 각각의 서브벡터에 할당하는 것을 포함한다. 예를 들어, 벡터의 요소 수가 최대 길이로 나누어지지 않는 경우 서브벡터는 최대 길이보다 적은 요소를 가질 수도 있다. 일부 구현에서, 벡터를 분할하는 단계(520)는 최대 길이 이하의 크기를 갖는 벡터의 연속적인 요소의 그룹을 각각의 서브벡터에 할당하는 것을 포함하며, 여기서 각 그룹은 (예를 들어, 벡터의 기준 주소에 기반하고 결국 그룹내 요소의 주소에 기반하여) 메모리 보호 회로의 단일 보호 그래뉼의 경계 내에 위치하는 것으로 알려져 있다. 예를 들어, 서브벡터는 그것의 첫 번째 요소나 마지막 요소가 보호 그래뉼 경계로부터 멀리 위치하는 경우, 최대 길이보다 적은 요소를 가질 수도 있다.
프로세스(500)는 (예를 들어, 메모리 보호 회로를 사용하여) 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(530)를 포함한다. 일부 구현에서, 메모리 보호 회로(예를 들어, 메모리 보호 회로(150))는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(530)는 단일 클록 사이클 동안, 서브벡터의 첫 번째 요소의 주소 및 서브벡터의 마지막 요소의 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 예를 들어, 서브벡터의 최대 길이가 서브벡터의 요소가 2개 이하의 인접한 보호 그래뉼에 위치될 수 있는 것을 확실하게 하는 경우 이 접근법은 효과적일 수도 있다. 일부 구현에서, 서브벡터의 요소가 단일 보호 그래뉼에 있는 것으로 알려진 경우, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계(530)는 서브벡터의 요소(예를 들어, 첫 번째 요소 또는 다른 요소)와 관련된 단일 주소를 메모리 보호 회로로 입력함으로써 이루어질 수도 있다. 더 큰 서브벡터가 사용되는 일부 구현에서, 메모리 보호 위반에 대해 서브벡터의 요소를 검사하는 단계(530)와 관련된 복잡도(complexity)는 관련된 보호 그래뉼의 개수에 따라 스케일(scale)될 수도 있다. 예를 들어, 더 많은 입력 주소 포트가 있는 더 큰 메모리 보호 회로는 벡터 메모리 명령어의 실행에 대한 성능을 높이기 위해 클록 사이클마다 더 많은 요소를 검사하기위해 사용될 수도 있다.
(단계(535)에서) 메모리 보호 위반이 검출되는 경우, 서브벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여 예외를 발생시키는 단계(540). 일부 구현에서, 예외를 발생시키는 것은 프로세서 코어(예를 들어, 프로세서 코어(120))에서의 실행을 중단시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 디스크로부터 메모리(예를 들어, 메모리(140) 또는 메모리(142))로 페이지를 가져오도록 유발할 수도 있다.
(단계(535)에서) 메모리 보호 위반이 검출되지 않는 경우, (예를 들어, 메모리 보호 회로(150)를 사용하여) 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하는 단계(550). 예를 들어, 요소에 액세스하는 단계(550)는 벡터 로드 명령어의 실행 동안 메모리로부터(예를 들어, 메모리(140)로부터) 이들 요소의 값을 읽는 것을 포함할 수도 있다. 예를 들어, 요소에 액세스하는 단계(550)는 벡터 저장 명령어의 실행 동안 메모리에(예를 들어, 메모리(140)로부터) 이들 요소의 값을 쓰는 것을 포함할 수도 있다. 따라서 메모리 보호 스캐닝을 위해 벡터를 서브벡터로 분할하는 단계(520)는 벡터 메모리 명령어의 실행에서 더 많은 병렬성을 가능하게 할 수도 있고 프로세싱 코어의 성능을 증가시킬 수도 있다. 도 5에 명시적으로 도시되어 있지는 않지만, 메모리 보호 위반에 대한 벡터의 서브벡터를 검사하는 단계(530)는 직렬로 계속될 것인데 반하여, 이전에 검사(530)된 서브벡터는 모든 서브벡터가 검사(530)되고 액세스(550)되거나 또는 예외(540)가 발생할 때까지 프로세서 코어의 파이프라인의 후속 스테이지에 의해 메모리에서 계속 액세스(550)될 것이다.
도 6은 2개의 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스(600)의 한 예시의 흐름도이다. 프로세스(600)는 서브벡터의 요소가 메모리에서 최대 2개의 인접한 보호 그래뉼에 저장되도록 서브벡터의 최대 길이를 결정하는 단계(610); 및 단일 클록 사이클 동안, 메모리 보호 위반에 대하여 전체 서브벡터를 검사하기 위해, 서브벡터의 첫 번째 요소의 주소 및 서브벡터의 마지막 요소의 주소를 입력하는 단계(620)를 포함한다. 분할에서 벡터를 처리하기 위한 서브벡터의 크기를 제한함으로써, 각 서브벡터에 대한 메모리 보호 스캔을 수행하는 것의 복잡성이 감소될 수도 있다. 메모리 보호 회로의 메모리 보호 그래뉼과 벡터의 스트라이드 및/또는 요소 너비에 대한 서브벡터의 크기에 대한 제한을 조정함(tailoring)으로써, 벡터 메모리 명령어 실행의 병렬성과 성능이 증가될 수도 있다. 프로세스(600)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(600)는 도 1의 집적 회로(110)를 사용하여 구현될 수도 있다. 예를 들어, 프로세스(600)는 도 2의 집적 회로(210)를 사용하여 구현될 수도 있다.
도 7은 단일 입력 주소 포트를 갖는 메모리 보호 회로를 사용하는 벡터 연산에 대한 메모리 보호에 대한 프로세스(700)의 한 예시의 흐름도이다. 프로세스(700)는 각 서브벡터가 메모리에 있는 오직 하나의 보호 그래뉼의 요소를 갖게 되도록, 메모리 보호 회로의 보호 그래뉼과 벡터의 스트라이드, 너비, 기준 주소에 기반하여 분할의 서브벡터를 결정하는 단계(710); 및 메모리 보호 위반에 대해 전체 서브벡터를 검사하기 위해 서브벡터의 임의의 요소(예를 들어, 첫 번째 요소)의 주소를 메모리 보호 회로에 입력하는 단계(720)를 포함한다. 벡터의 요소의 주소를 메모리 보호 회로의 보호 그래뉼의 경계에 대응하는 주소와 비교함으로써, 서브벡터의 모든 요소가 단일 보호 그래뉼 내에 위치하는 것을 확실하게 하도록 분할이 결정될(710) 수도 있다. 이렇게 하면 각 서브벡터에 대한 메모리 보호 스캔의 복잡도를 줄일 수도 있다. 프로세스(700)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 벡터 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(700)는 도 1의 집적 회로(110)를 사용하여 구현될 수도 있다. 예를 들어, 프로세스(700)는 도 2의 집적 회로(210)를 사용하여 구현될 수도 있다.
도 8은 수집-분산 메모리 명령어에 대한 메모리 보호를 지원하는 집적 회로(810)의 예시의 블록도이다. 집적 회로(810)는 프로세서 코어(820)를 포함한다. 프로세서 코어(820)는 수집-분산 메모리 명령어에 대한 고속 메모리 보호 스캐닝을 용이하게 하기 위해 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하도록 구성된 인덱스 범위 회로(880)를 포함하는 프로세서 파이프라인(830)을 포함한다. 프로세서 코어(820)는, 벡터 레지스터(882)를 포함하는 하나 이상의 레지스터 파일(840)을 포함한다. 프로세서 코어(820)는 L1 명령어 캐시(850) 및 L1 데이터 캐시(852)를 포함한다. 집적 회로(810)는 외부 메모리 시스템(860)을 포함하는데, 이는 명령어 및 데이터를 저장하는 메모리를 포함할 수도 있고, 및/또는 명령어 및/또는 데이터를 저장하는, 집적 회로(810) 외부의 메모리(862)에 대한 액세스를 제공할 수도 있다. 외부 메모리 시스템(860)은 메모리 보호 회로(870)를 포함하며, 이는 보호 그래뉼로 하나 이상의 주소에 대한 메모리 보호 검사를 수행하도록 구성될 수도 있다. 집적 회로(810)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 수집-분산 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 프로세서 아키텍처에 비해 이점을 제공할 수도 있다. 예를 들어, 집적 회로(810)는 도 9의 프로세스(900)를 구현할 수도 있다. 예를 들어, 집적 회로(810)는 도 10의 프로세스(1000)를 구현할 수도 있다. 예를 들어, 집적 회로(810)는 도 11의 프로세스(1100)를 구현할 수 있다.
집적 회로(810)는 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인(830)을 포함하는 프로세서 코어(820)를 포함한다. 파이프라인(830)은 집적 회로(810)의 메모리 시스템으로부터 명령어를 검색하도록 구성된 하나 이상의 가져오기 스테이지(fetch stage)를 포함한다. 예를 들어, 파이프라인(830)은 L1 명령어 캐시(850)를 통해 명령어를 가져올 수도 있다. 파이프라인(830)은 디코딩, 리네임, 디스패치, 발행, 실행, 메모리 액세스 및 후기입 스테이지와 같은 추가 스테이지를 포함할 수도 있다. 예를 들어, 프로세서 코어(820)는 RISC V 명령어 세트의 명령어를 실행하도록 구성된 파이프라인(830)을 포함할 수도 있다.
집적 회로(810)는 프로세서 코어(820)에 대한 하나 이상의 레지스터 파일(240)을 포함한다. 하나 이상의 레지스터 파일(840)은 프로세서 코어(820)의 일부 또는 전부 또는 아키텍처 상태를 저장할 수도 있다. 예를 들어, 하나 이상의 레지스터 파일(840)은 벡터 레지스터 세트를 포함할 수도 있다. 예를 들어, 하나 이상의 레지스터 파일(840)은 제어 및 상태 레지스터(control and status registers; CSR) 세트를 포함할 수 있다. 예를 들어, 하나 이상의 레지스터 파일(840)은 스칼라(scalar) 레지스터의 세트를 포함할 수도 있다.
집적 회로(810)는 프로세서 코어(820)에 대한 L1 명령어 캐시(850)를 포함한다. L1 명령어 캐시(850)는 명령어 메모리에 대한 집합-연관(set-associative) 캐시일 수도 있다. 태그 어레이(tag array)와 데이터 어레이(data array)를 직렬로 읽는 것의 긴 대기 시간(latency) 및, 어레이를 병렬로 읽는 것의 높은 전력을 피하기 위해, 방식 예측기(way predictor)가 사용될 수도 있다. 방식 예측기가 초기(early) 가져오기 스테이지에서 액세스될 수도 있고, 히트 방식(hit way)이 데이터 어레이의 읽기 인덱스(read index)로 인코딩될 수도 있다. 태그 어레이는 후기(later) 가져오기 스테이지에서 액세스될 수도 있고, 방식 예측기를 입증하는 데 사용될 수도 있다.
집적 회로(810)는 프로세서 코어(820)에 대한 L1 데이터 캐시(852)를 포함한다. 예를 들어, L1 데이터 캐시(852)는 집합-연관 VIPT 캐시일 수도 있는데, 이는 가상 주소(virtual address) 비트 VA[set]로 순전히 인덱스되고 모든 변환(translate) 물리적 주소(physical address) 비트 PA[msb:12]로 완전히 태그됨을 의미한다. 낮은 전력 소비를 위해, 태그 및 데이터 어레이는 기껏해야 단일 데이터 SRAM 방식에 액세스될 수 있도록 직렬로 조회될 수도 있다. 예를 들어, L1 데이터 캐시(852)의 라인 크기는 64바이트, 비트 사이즈는 86바이트일 수도 있다.
집적 회로(810)는, 명령어 및 데이터를 저장하는 메모리를 포함할 수도 있고, 및/또는 명령어 및/또는 데이터를 저장하는 집적 회로(810) 외부의 메모리(862)에 대한 액세스를 제공할 수도 있는, 외부 메모리 시스템(860)을 포함한다. 예를 들어, 외부 메모리 시스템(860)은 다중 L1 캐시에 걸쳐 캐시 일관성을 유지하기 위해 캐시 일관성 프로토콜/정책을 구현하도록 구성될 수도 있는 L2 캐시를 포함할 수도 있다. 도 8에는 도시되어 있지 않지만, 집적 회로(810)는 일부 구현에서 다중 프로세서 코어를 포함할 수도 있다. 예를 들어, 외부 메모리 시스템(860)은 다중 레이어를 포함할 수도 있다.
외부 메모리 시스템(860)은 보호 그래뉼로 메모리 보호 위반에 대하여 검사하도록 구성된 메모리 보호 회로(870)를 포함한다. 메모리 보호 회로(870)는 특권을 가진 소프트웨어가 메모리 영역을 정의하고 그것들 각각에 메모리 액세스 허가를 할당하도록 허용할 수도 있다. 메모리 보호 회로(870)의 보호 그래뉼은 관련된 액세스 허가를 갖는 이 메모리 영역의 크기 및 그에 따라 해상도를 제한한다. 예를 들어, 보호 그래뉼은 메모리의 페이지(예를들어, 4kB 또는 8kB 페이지)에 대응할 수도 있다. 일부 구현에서, 메모리 보호 회로(870)는 또한 이러한 메모리 영역에 대한 메모리 속성을 지정하며, 이는 이러한 영역의 정렬 및 병합 동작뿐만 아니라 캐싱 및 버퍼링 속성을 지정할 수도 있다. 메모리 보호 회로(870)는 프로세서 코어(820)에 의한 명령어 가져오기 및 데이터 액세스를 포함하는 트랜잭션을 모니터하는데 사용될 수도 있으며, 이는 메모리 보호 위반이 검출될 때 결함 예외를 유발할 수 있다. 예를 들어, 승인되지 않은 메모리에 액세스하려는 시도는 하드웨어 결함(예를 들어, 분할 결함, 스토리지 위반 예외 또는 잘못된 프로세스의 비정상 종료)으로 이어질 수도 있다. 메모리 보호 회로(870)는 프로세스가 자신에게 할당되지 않은 메모리에 액세스하는 것을 방지하는 역할을 할 수도 있으며, 이는 프로세스 내의 버그 또는 악성 소프트웨어가 다른 프로세스 또는 운영 시스템에 영향을 미치는 것을 방지할 수도 있다.
메모리 보호 회로(870)는 다양한 크기 및 복잡도를 가질 수도 있다. 일부 구현에서, 메모리 보호 회로(870)는 클록 사이클마다 2개의 주소를 검사하도록 구성된다. 예를 들어, 메모리 보호 회로(870)는 2개의 주소를 수신하는 것을 허용하고, 단일 클록 사이클 동안 메모리 보호 위반에 대해 메모리에서 2개의 주소 모두를 독립적으로 검사하는 2개의 주소 포트를 가질 수도 있다. 예를 들어, 주소는 주소를 포함하는 메모리 영역에 대한 메모리 보호 키 또는 링과, 프로세서 코어(820)에 의해 실행되고 있고 주소에서 메모리에 액세스를 시도하고 있는 프로세스와 관련된 메모리 보호 키 또는 링 넘버를 비교함으로써 검사될 수도 있다. 일부 구현에서, 메모리 보호 회로(870)는 클록 사이클마다 단일 주소를 검사하도록 구성되고, 따라서 더 적은 회로 영역을 차지할 수도 있고 더 적은 전력을 소비할 수도 있다. 일부 구현에서, 메모리 보호 회로(870)는 2개보다 많은 주소 포트를 가질 수도 있거나, 그렇지 않으면 메모리 보호 위반에 대해 클록 사이클마다 2개보다 많은 주소 또는 주소의 범위를 검사하도록 구성될 수도 있다.
파이프라인(830)은 인덱스 범위 회로(880)를 포함한다. 인덱스 범위 회로(880)는 수집-분산 메모리 명령어에 대한 빠른 메모리 보호 스캐닝을 용이하게 하기 위해 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하도록 구성될 수도 있다. 인덱스 범위 회로(880)는, 단일 클록 사이클 동안 메모리 보호 회로(870)를 사용하여, 주소 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하도록 구성될 수도 있다. 인덱스 범위 회로(880)는 주소의 범위의 크기를 메모리 보호 회로(870)의 메모리 보호 그래뉼(크기)과 비교하도록 구성될 수도 있다. 주소의 범위의 스팬(span)이 메모리 보호 그래뉼보다 작으면, 수집-분산 명령어에 의해 관련된 벡터의 요소는 메모리에서 하나 또는 두 개의 인접한 메모리 보호 그래뉼 내에 위치하도록 보장될 수도 있다. 일부 구현에서, 메모리 보호 회로(870)는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 인덱스 범위 회로(880)는, 단일 클록 사이클 동안, 주소 범위의 첫 번째 바이트의 주소 및 주소 범위의 마지막 바이트의 주소를 메모리 보호 회로(870)에 입력하도록 구성된다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고, 인덱스 범위 회로는 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하도록 구성되며; 단일 클록 사이클 동안, 주소 범위의 단일 주소를 메모리 보호 회로에 입력하도록 구성된다. 예를 들어, 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 것은 주소의 범위를 메모리내 상이한 메모리 보호 모듈 간의 경계와 비교하는 것을 포함할 수도 있다.
수집-분산 메모리 명령어에 대한 주소의 범위를 결정하기 위해 인덱스 범위 회로(880)에 의해 다양한 기술이 구현될 수도 있다. 일부 구현에서, 인덱스 범위 회로(880)는 인덱스의 튜플이 벡터 레지스터(882)에 쓰일 때 프로세서 코어(820)의 벡터 레지스터(882)에 저장된 인덱스의 튜플의 최댓값을 메모이즈하고, 인덱스의 튜플이 벡터 레지스터(882)에 쓰일 때 인덱스의 튜플의 최솟값을 메모이즈하도록 구성된다. 메모이제이션에 의해 결정되는 인덱스의 최댓값 및 최솟값을 저장하기 위해 다양한 유형의 데이터 저장 회로(예를 들어, 플립-플롭, 래치 또는 레지스터)가 사용될 수도 있다. 예를 들어, 인덱스 범위 회로(880)는 프로세서 코어(820)의 마이크로아키텍처 레지스터에 최댓값을 저장하도록 구성될 수도 있다. 인덱스 범위 회로(880)는 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값, 및 메모이즈된 최댓값에 기반하여 벡터 레지스터(882)를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하도록 구성될 수도 있다. 예를 들어, 기준 주소는 수집-분산 메모리 명령어에 의해 식별되는 레지스터 내에서 공급될 수도 있다. 예를 들어, 주소의 범위는 [(기준 주소 + 메모이즈된 최솟값), (기준 주소 + 메모이즈된 최댓값 + 요소당 바이트 - 1)]으로 결정될 수도 있다. 예를 들어, 집적 회로(810)는 도 9의 프로세스(900)를 구현할 수도 있다.
일부 구현에서, 인덱스 범위 회로(880)는 메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터(882)를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하도록 구성된다. 예를 들어, 주소의 범위는 다음과 같이 결정될 수 있고: [기준 주소, 기준 주소 + 2^n - 1 + 요소당 바이트 - 1], 여기서 n은 인덱스의 세트의 최대 비트 너비이다. 예를 들어, 집적 회로(810)는 도 10의 프로세스(1000)를 구현할 수도 있다.
일부 구현에서, 인덱스 범위 회로(880)는 벡터 레지스터(882)에 저장된 모든 인덱스의 비트단위 OR로서 프로세서 코어의 벡터 레지스터(882)에 저장된 인덱스의 튜플의 상한을 결정하도록 구성되고, 벡터 레지스터(882)에 저장된 모든 인덱스의 비트단위 AND로서 인덱스의 튜플의 하한을 결정하도록 구성된다. 인덱스 범위 회로(880)는 메모리 내 벡터의 기준 주소, 상한, 하한을 기반으로 벡터 레지스터(882)를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하도록 구성될 수도 있다. 예를 들어, 주소의 범위는 [(기준 주소 + 하한), (기준 주소 + 상한 + 요소당 바이트 - 1)]로 결정될 수도 있다. 예를 들어, 집적 회로(810)는 도 11의 프로세스(1100)를 구현할 수도 있다.
예를 들어, 인덱스 범위 회로(880)는 파이프라인(830)의 실행 스테이지의 일부일 수도 있다. 예를 들어, 집적 회로(810)는, 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성될 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 프로세서 코어(820)에서 실행을 중단시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 것은 디스크로부터 페이지가 가져와질 수도 있다.
도 9는 인덱스 익스트리마 메모이제이션(index extrema memoization)을 사용하는 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스(900)의 한 예시의 흐름도이다. 프로세스(900)는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(902); 인덱스의 튜플이 벡터 레지스터에 쓰일 때 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 최댓값을 메모이즈하는 단계(910); 인덱스의 튜플이 벡터 레지스터에 쓰일 때 인덱스의 튜플의 최솟값을 메모이즈하는 단계(912); 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값 및 메모이즈된 최댓값에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계(920); 및 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(930)를 포함한다. 935에서, 메모리 보호 위반이 검출된 경우, 프로세스(900)는 예외를 발생시키는 단계(940)를 포함한다. 935에서, 메모리 보호 위반이 검출되지 않은 경우, 프로세스(900)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 것을 포함한다. 프로세스(900)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 수집-분산 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래의 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(900)는 도 8의 집적 회로(810)를 사용하여 구현될 수도 있다.
프로세스(900)는 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어(예를 들어, 프로세서 코어(820))를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(902)를 포함한다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 로드 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vloxei16.v 명령어)일 수도 있다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 저장 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vsuxei64.v 명령어)일 수도 있다. 일부 구현에서, 수집-분산 메모리 명령어는 하나 이상의 캐시(예를 들어, L1 명령어 캐시(250))를 통해 메모리(예를 들어, 메모리(262))로부터 가져와진다(902).
프로세스(900)는 인덱스의 튜플이 벡터 레지스터에 쓰일 때 프로세서 코어의 벡터 레지스터(예를 들어, 벡터 레지스터(882))에 저장된 인덱스의 튜플의 최댓값을 메모이즈하는 단계(910)를 포함한다. 프로세스(900)는 인덱스의 튜플이 벡터 레지스터에 쓰일 때 인덱스의 튜플의 최솟값을 메모이즈하는 단계(912)를 포함한다. 메모이제이션에 의해 결정된 인덱스의 최댓값과 최솟값을 저장하기 위해 다양한 형태의 데이터 저장 회로(예를 들어, 플립-플롭, 래치, 레지스터)가 사용될 수도 있다. 예를 들어, 벡터 레지스터에 저장된 인덱스의 튜플의 최댓값을 메모이즈하는 단계(910)는 프로세서 코어의 마이크로아키텍처 레지스터에 최댓값을 저장하는 단계를 포함할 수도 있다. 일부 구현에서, 정보가 메모이즈되는 입상도는 더 미세할 수도 있고(예를 들어, 벡터 레지스터의 하위 조각) 또는 더 굵을 수도 있다(예를 들어, 벡터 레지스터의 그룹).
프로세스(900)는 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값 및 메모이즈된 최댓값에 기반하여 벡터 레지스터를 인덱스 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계(920)를 포함한다. 예를 들어, 기준 주소는 수집-분산 메모리 명령어에 의해 식별되는 레지스터에 공급될 수도 있다. 예를 들어, 주소의 범위는 [(기준 주소 + 메모이즈된 최솟값), (기준 주소 + 메모이즈된 최댓값 + 요소당 바이트 - 1)]로 결정(920)될 수도 있다.
프로세스(900)는 단일 클록 사이클 동안 메모리 보호 회로(예를 들어, 메모리 보호 회로(870))를 사용하여 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 일으키는지 여부를 검사하는 단계(930)를 포함한다. 예를 들어, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 일으키는지 여부를 검사하는 단계(930)는 주소의 범위의 크기를 메모리 보호 회로의 메모리 보호 그래뉼(크기)과 비교하는 것을 포함할 수도 있다. 주소의 범위의 스팬이 메모리 보호 그래뉼보다 작으면, 수집-분산 명령어와 관련된 벡터의 요소는 메모리에서 하나 또는 두 개의 인접한 메모리 보호 그래뉼 내에 위치하도록 보장될 수 있다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(930)는 단일 클록 사이클 동안 주소 범위의 첫 번째 바이트의 주소 및 주소 범위의 마지막 바이트의 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(930)는 주소의 범위가 단일 메모리 보호 그래뉼에 속하는지 검사하는 단계; 및 단일 클록 사이클 동안, 주소 범위 내 단일 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 예를 들어, 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계는 주소의 범위를 메모리 내 상이한 메모리 보호 모듈 간의 경계와 비교하는 것을 포함할 수도 있다.
(단계 935에서) 메모리 보호 위반이 검출되면, 프로세스(900)는, 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계(940)를 포함한다. 일부 구현에서, 예외를 발생시키는 단계는 프로세서 코어(예를 들어, 프로세서 코어(820))에서의 실행을 정지시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 단계는 디스크로부터 메모리(예: 메모리(860) 또는 메모리(862))로 페이지를 가져올 수도 있다.
(단계 935에서) 메모리 보호 위반이 검출되지 않으면, 프로세스(900)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 단계(950)를 포함한다. 예를 들어, 요소에 액세스하는 단계(950)는 벡터 로드 명령어의 실행 동안 메모리로부터(예를 들어, 메모리(860)로부터) 이들 요소의 값을 읽는 것을 포함할 수도 있다. 예를 들어, 요소에 액세스하는 단계(950)는 벡터 저장 명령어의 실행 동안 메모리(예를 들어, 메모리(860)로부터)에 이들 요소의 값을 쓰는 것을 포함할 수도 있다.
도 10은 인덱스 크기 제한을 사용하는 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스(1000)의 한 예시의 흐름도이다. 프로세스(1000)는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(1002); 메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소 범위를 결정하는 단계(1020); 및 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 일으키는지 여부를 검사하는 단계(1030)를 포함한다. 1035에서, 메모리 보호 위반이 검출된 경우, 프로세스(1000)는 예외를 발생시키는 단계(1040)를 포함한다. 1035에서, 메모리 보호 위반이 검출되지 않았다면, 프로세스(1000)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 단계를 포함한다. 프로세스(1000)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 수집-분산 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(1000)는 도 8의 집적 회로(810)를 사용하여 구현될 수도 있다.
프로세스(1000)는 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어(예를 들어, 프로세서 코어(820))를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(1002)를 포함한다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 로드 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vloxei16.v 명령어)일 수도 있다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 저장 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vsuxei64.v 명령어)일 수도 있다. 일부 구현에서, 수집-분산 메모리 명령어는 하나 이상의 캐시(예를 들어, L1 명령어 캐시(250))를 통해 메모리(예를 들어, 메모리(262))로부터 가져와진다(1002).
프로세스(1000)는 메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계(1020)를 포함한다. 예를 들어, 기준 주소는 수집-분산 메모리 명령어에 의해 식별되는 레지스터에 공급될 수도 있다. 예를 들어, 주소의 범위는 다음과 같이 결정(1020)될 수 있고, [기준 주소, 기준 주소 + 2^n - 1 + 요소당 바이트 - 1], 여기서 n은 인덱스의 세트의 최대 비트 너비이다(예를 들어, 8비트 또는 16비트 인덱스의 경우 8 또는 16).
프로세스(1000)는, 단일 클록 사이클 동안 메모리 보호 회로(예를 들어, 메모리 보호 회로(870))를 사용하여, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1030)를 포함한다. 예를 들어, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1030)는 주소의 범위의 크기를 메모리 보호 회로의 메모리 보호 그래뉼(크기)과 비교하는 단계를 포함할 수도 있다. 주소의 범위의 스팬이 메모리 보호 그래뉼보다 작은 경우, 수집-분산 명령어에 관련된 벡터의 요소는 메모리 내 하나 또는 두 개의 인접한 메모리 보호 그래뉼 내에 위치하도록 보장될 수도 있다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1030)는, 단일 클록 사이클 동안, 주소 범위의 첫 번째 바이트의 주소 및 주소 범위의 마지막 바이트의 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되며, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1030)는, 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계; 및 단일 클록 사이클 동안, 주소 범위의 단일 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 예를 들어, 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계는 주소의 범위를 메모리 내 상이한 메모리 보호 모듈 간의 경계와 비교하는 단계를 포함할 수도 있다.
(단계 1035에서) 메모리 보호 위반이 검출되면, 프로세스(1000)는 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계(1040)를 포함한다. 일부 구현에서, 예외를 발생시키는 단계는 프로세서 코어(예를 들어, 프로세서 코어(820))에서의 실행을 정지시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 단계는 디스크로부터 메모리(예를 들어, 메모리(860) 또는 메모리(862))로 페이지를 가져올 수 있다.
(단계 1035에서) 메모리 보호 위반이 검출되지 않으면, 프로세스(1000)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 단계(1050)를 포함한다. 예를 들어, 1050개의 요소에 액세스하는 단계는 벡터 로드 명령의 실행 동안 메모리로부터(예를 들어, 메모리(860)로부터) 그러한 요소의 값을 읽는 단계를 포함할 수도 있다. 예를 들어, 1050개의 요소에 액세스하는 단계는 벡터 저장 명령어의 실행 동안 메모리(예를 들어, 메모리(860)로부터)에 해당 요소의 값을 쓰는 단계를 포함할 수도 있다.
도 11은 인덱스 바운드를 사용하는 수집-분산 메모리 명령어에 대한 메모리 보호에 대한 프로세스(1100)의 한 예시의 흐름도이다. 프로세스(1100)는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(1102); 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 상한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 OR로 결정하는 단계(1110); 인덱스의 튜플의 하한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 AND로 결정하는 단계(1112); 메모리 내 벡터의 기준 주소, 상한 및 하한에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계(1120); 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1130)를 포함한다. 1135에서, 메모리 보호 위반이 검출된 경우, 프로세스(1100)는 예외를 발생시키는 단계(1140)를 포함한다. 1135에서, 메모리 보호 위반이 검출되지 않은 경우, 프로세스(1100)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 단계를 포함한다. 프로세스(1100)는, 예를 들어, 작은 회로 영역 및 전력 소비를 갖는 단순한 메모리 보호 회로를 사용하여 수집-분산 메모리 연산에 대한 빠른 메모리 보호 스캐닝을 가능하게 하는 것과 같이, 종래 기술에 비해 이점을 제공할 수도 있다. 예를 들어, 프로세스(1100)는 도 8의 집적 회로(810)를 사용하여 구현될 수도 있다.
프로세스(1100)는 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성된 파이프라인을 포함하는 프로세서 코어(예를 들어, 프로세서 코어(820))를 사용하여 수집-분산 메모리 명령어를 가져오는 단계(1102)를 포함한다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 로드 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vloxei16.v 명령어)일 수도 있다. 예를 들어, 수집-분산 메모리 명령어는 인덱스된 벡터 저장 명령어(예를 들어, RISC V 명령어 세트 아키텍처의 vsuxei64.v 명령어)일 수도 있다. 일부 구현에서, 수집-분산 메모리 명령어는 하나 이상의 캐시(예를 들어, L1 명령어 캐시(250))를 통해 메모리(예를 들어, 메모리(262))로부터 가져와진다(1102).
프로세스(1100)는 프로세서 코어의 벡터 레지스터(예를 들어, 벡터 레지스터(882))에 저장된 인덱스의 튜플의 상한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 OR로 결정하는 단계(1110)를 포함한다. 프로세스(1100)는 인덱스의 튜플의 하한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 AND로 결정하는 단계(1112)를 포함한다.
프로세스(1100)는 메모리 내 벡터의 기준 주소, 상한 및 하한에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계(1120)를 포함한다. 예를 들어, 주소의 범위는 [(기준 주소 + 하한), (기준 주소 + 상한 + 요소당 바이트 - 1)]으로 결정될 수도 있다.
프로세스(1100)는, 단일 클록 사이클 동안 메모리 보호 회로(예를 들어, 메모리 보호 회로(870))를 사용하여, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1130)를 포함한다. 예를 들어, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1130)는 주소의 범위의 크기를 메모리 보호 회로의 메모리 보호 그래뉼(크기)과 비교하는 단계를 포함할 수도 있다. 주소의 범위의 스팬이 메모리 보호 그래뉼보다 작으면 수집-분산 명령어에 관련된 벡터의 요소는 메모리 내 하나 또는 두 개의 인접한 메모리 보호 그래뉼 내에 위치하도록 보장될 수도 있다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고, 주소의 범위 내의 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1130)는, 단일 클록 사이클 동안, 주소 범위의 첫 번째 바이트의 주소 및 주소 범위의 마지막 바이트의 주소를 메모리 보호 회로에 입력하는 것을 포함한다. 일부 구현에서, 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되며, 주소의 범위 내에서 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발하는지 여부를 검사하는 단계(1130)는 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계; 및 단일 클록 사이클 동안 주소 범위의 단일 주소를 메모리 보호 회로에 입력하는 단계를 포함한다. 예를 들어, 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계는 주소의 범위를 메모리 내 상이한 메모리 보호 모듈 간의 경계와 비교하는 것을 포함할 수도 있다.
(단계 1135에서) 메모리 보호 위반이 검출되면, 프로세스(1100)는 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계(1140)를 포함한다. 일부 구현에서, 예외를 발생시키는 단계는 프로세서 코어(예를 들어, 프로세서 코어(820))에서의 실행을 정지시킬 수도 있다. 일부 구현에서, 예외를 발생시키는 단계는 디스크로부터 메모리(예: 메모리(860) 또는 메모리(862))로 페이지를 가져올 수도 있다.
(단계 1135에서) 메모리 보호 위반이 검출되지 않으면, 프로세스(1100)는 수집-분산 메모리 명령어를 실행하기 위해 벡터의 요소에 액세스하는 단계(1150)를 포함한다. 예를 들어, 요소에 액세스하는 단계(1150)는 벡터 로드 명령어의 실행 동안 메모리로부터(예를 들어, 메모리(860)로부터) 이러한 요소의 값을 읽는 단계를 포함할 수도 있다. 예를 들어, 요소에 액세스하는 단계(1150)는 벡터 저장 명령어의 실행 동안 메모리에(예를 들어, 메모리(860)로부터) 이러한 요소의 값을 쓰는 것을 포함할 수도 있다.
제1 양태에서, 본 명세서에서 설명되는 주제는, 일정한 스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반을 검사하도록 구성되는 메모리 보호 회로; 및 벡터 분할 회로를 포함하는 명령어를 실행하는 집적 회로에서 구현될 수 있다. 벡터 분할 회로는, 단일 클록 사이클에서 액세스될 벡터 요소의 개수에 대응하는, 1보다 큰, 최대 길이를 결정하고 - 최대 길이는 보호 그래뉼 및 벡터 메모리 명령어에 의해 식별되는 벡터의 스트라이드에 기반하여 결정됨- ; 벡터를 최대 길이의 서브벡터와 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하고; 메모리 보호 회로를 사용하여, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하며; 메모리 보호 회로를 사용하여, 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하도록 구성된다.
제2 양태에서, 본 명세서에서 설명된 주제는, 일정한 스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 벡터 메모리 명령어를 가져오는 단계; 벡터 메모리 명령어에 의해 식별되는 벡터를, 1보다 큰, 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하는 단계; 메모리 보호 회로를 사용하여, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계; 및 메모리 보호 회로를 사용하여, 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하는 단계를 포함하는 방법으로 구현될 수 있다.
제3 양태에서, 본 명세서에서 설명되는 주제는, 일정한 스트라이드 벡터 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반을 검사하도록 구성되는 메모리 보호 회로; 및 벡터 분할 회로를 포함하는 명령어를 실행하는 집적 회로에서 구현될 수 있다. 벡터 분할 회로는, 벡터 메모리 명령어에 의해 식별되는 벡터를, 1보다 큰, 최대 길이의 서브벡터 및 최대 길이 이하의 길이를 갖는 하나 이상의 추가 서브벡터로 분할하고; 메모리 보호 회로를 사용하여, 서브벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하며; 메모리 보호 회로를 사용하여, 하나 이상의 추가 서브벡터 중 하나의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하기 전에, 서브벡터의 요소에 액세스하도록 구성된다.
제4 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및 인덱스 범위 회로를 포함하는, 명령어를 실행하기 위한 집적 회로에서 구현될 수 있으며, 인덱스 범위 회로는 인덱스의 튜플이 벡터 레지스터에 쓰일 때 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 최댓값을 메모이즈하고; 인덱스의 튜플이 벡터 레지스터에 쓰일 때, 인덱스의 튜플의 최솟값을 메모이즈하고; 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값, 및 메모이즈된 최댓값에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며; 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록 구성된다.
제5 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계; 인덱스의 튜플이 벡터 레지스터에 쓰일 때 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 최댓값을 메모이즈하는 단계; 인덱스의 튜플이 벡터 레지스터에 쓰일 때 인덱스의 튜플의 최솟값을 메모이즈하는 단계; 메모리 내 벡터의 기준 주소, 메모이즈된 최솟값, 메모이즈된 최댓값에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를 포함하는 방법으로 구현될 수 있다.
제6 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및 인덱스 범위 회로를 포함하는, 명령어를 실행하기 위한 집적 회로에서 구현될 수 있으며, 인덱스 범위 회로는 메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며; 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록 구성된다.
제7 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계; 메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를 포함하는 방법으로 구현될 수 있다.
제8 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어; 보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및 인덱스 범위 회로를 포함하는 명령어를 실행하기 위한 집적 회로에서 구현될 수 있으며, 인덱스 범위 회로는 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 상한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 OR로 결정하고; 인덱스의 튜플의 하한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 AND로 결정하고; 메모리 내 벡터의 기준 주소, 상한, 하한에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며; 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록 구성된다.
제9 양태에서, 본 명세서에서 설명되는 주제는, 수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계; 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 상한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 OR로 결정하는 단계; 인덱스의 튜플의 하한을 벡터 레지스터에 저장된 모든 인덱스의 비트단위 AND로 결정하는 단계; 메모리 내 벡터의 기준 주소, 상한, 및 하한에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및 단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 주소의 범위 내 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를 포함하는 방법으로 구현될 수 있다.
본 개시가 특정 실시예와 관련하여 설명되었지만, 본 개시는 개시된 실시예로 제한되어서는 안되며, 반대로, 첨부된 청구범위의 범위 내에 포함된 다양한 수정 및 균등한 배열을 포함하도록 의도되며, 그 범위는 그러한 모든 수정 및 균등한 구조를 포함하도록 가장 넓은 해석이 부여되어야 한다는 점을 이해해야 한다.
Claims (29)
- 명령어를 실행하기 위한 집적 회로로서,
수집-분산(gather-scatter) 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어;
보호 그래뉼(protection granule)로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및
인덱스 범위 회로(index range circuit)를 포함하고,
상기 인덱스 범위 회로는,
인덱스의 튜플(tuple)이 벡터 레지스터에 쓰일 때 상기 프로세서 코어의 상기 벡터 레지스터에 저장된 상기 인덱스의 튜플의 최댓값을 메모이즈(memoize)하고;
상기 인덱스의 튜플(tuple)이 상기 벡터 레지스터에 쓰일 때 상기 인덱스의 튜플의 최솟값을 메모이즈하고;
메모리 내 벡터의 기준 주소(base address), 상기 메모이즈된 최솟값, 및 상기 메모이즈된 최댓값에 기반하여 상기 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며;
단일 클록 사이클 동안 상기 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록
구성되는, 집적 회로. - 제1항에 있어서,
상기 메모리 보호 회로는 클록 사이클 마다 2개의 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하도록 구성되는, 집적 회로. - 제1항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하며;
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하도록
구성되는, 집적 회로 - 제1항 내지 제3항 중 어느 한 항에 있어서,
상기 인덱스 범위 회로는 상기 파이프라인의 실행 스테이지의 일부인, 집적 회로. - 제1항 내지 제4항 중 어느 한 항에 있어서,
상기 인덱스 범위 회로는 상기 최댓값을 상기 프로세서 코어의 마이크로아키텍처(microarchitectural) 레지스터에 저장하도록 구성되는, 집적 회로. - 제1항 내지 제5항 중 어느 한 항에 있어서,
상기 집적 회로는, 상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성되는, 집적 회로. - 방법으로서,
수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계;
인덱스의 튜플이 벡터 레지스터에 쓰일 때 상기 프로세서 코어의 상기 벡터 레지스터에 저장된 상기 인덱스의 튜플의 최댓값을 메모이즈하는 단계;
상기 인덱스의 튜플이 상기 벡터 레지스터에 쓰일 때 상기 인덱스의 튜플의 최솟값을 메모이즈하는 단계;
메모리 내 벡터의 기준 주소, 상기 메모이즈된 최솟값, 및 상기 메모이즈된 최댓값에 기반하여 상기 벡터 레지스터를 인덱스의 세트로 취하는 상기 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및
단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를
포함하는, 방법. - 제7항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하는 단계를 포함하는, 방법. - 제7항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계; 및
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하는 단계를
포함하는, 방법. - 제7항 내지 제9항 중 어느 한 항에 있어서,
상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계를 포함하는, 방법. - 제7항 내지 제10항 중 어느 한 항에 있어서,
상기 벡터 레지스터에 저장된 상기 인덱스의 튜플의 상기 최댓값을 메모이즈 하는 단계는, 상기 최댓값을 상기 프로세서 코어의 마이크로아키텍처 레지스터에 저장하는 단계를 포함하는, 방법. - 명령어를 실행하기 위한 집적 회로로서,
수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어;
보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및
인덱스 범위 회로를 포함하고,
상기 인덱스 범위 회로는,
메모리 내 벡터의 기준 주소(base address) 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 상기 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며;
단일 클록 사이클 동안 상기 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록
구성되는, 집적 회로. - 제12항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하도록 구성되는, 집적 회로. - 제12항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하며;
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하도록
구성되는, 집적 회로 - 제12항 내지 제14항 중 어느 한 항에 있어서,
상기 인덱스 범위 회로는 상기 파이프라인의 실행 스테이지의 일부인, 집적 회로. - 제12항 내지 제15항 중 어느 한 항에 있어서,
상기 집적 회로는, 상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성되는, 집적 회로. - 방법으로서,
수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계;
메모리 내 벡터의 기준 주소 및 인덱스의 세트의 최대 비트 너비에 기반하여 벡터 레지스터를 상기 인덱스의 세트로 취하는 상기 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및
단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를
포함하는, 방법. - 제17항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하는 단계를 포함하는, 방법. - 제17항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계; 및
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하는 단계를
포함하는, 방법. - 제17항 내지 제19항 중 어느 한 항에 있어서,
상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계를 포함하는, 방법. - 명령어를 실행하기 위한 집적 회로로서,
수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어;
보호 그래뉼로 메모리 보호 위반에 대해 검사하도록 구성되는 메모리 보호 회로; 및
인덱스 범위 회로를 포함하고,
상기 인덱스 범위 회로는,
상기 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 상한(upper bound)을, 상기 벡터 레지스터에 저장된 모든 상기 인덱스의 비트단위 OR(bitwise OR)로 결정하고;
상기 인덱스의 튜플의 하한(lower bound)을, 상기 벡터 레지스터에 저장된 모든 상기 인덱스의 비트단위 AND(bitwise AND)로 결정하고;
메모리 내 벡터의 기준 주소, 상기 상한, 상기 하한에 기반하여 상기 벡터 레지스터를 인덱스의 세트로 취하는 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하며;
단일 클록 사이클 동안 상기 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하도록
구성되는, 집적 회로. - 제21항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하도록 구성되는, 집적 회로. - 제21항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 인덱스 범위 회로는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하며;
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하도록
구성되는, 집적 회로 - 제21항 내지 제23항 중 어느 한 항에 있어서,
상기 인덱스 범위 회로는 상기 파이프라인의 실행 스테이지의 일부인, 집적 회로. - 제21항 내지 제24항 중 어느 한 항에 있어서,
상기 집적 회로는, 상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키도록 구성되는, 집적 회로. - 방법으로서,
수집-분산 메모리 명령어를 포함하는 명령어를 실행하도록 구성되는 파이프라인을 포함하는 프로세서 코어를 사용하여 수집-분산 메모리 명령어를 가져오는 단계;
상기 프로세서 코어의 벡터 레지스터에 저장된 인덱스의 튜플의 상한(upper bound)을, 상기 벡터 레지스터에 저장된 모든 상기 인덱스의 비트단위 OR로 결정하는 단계;
상기 인덱스의 튜플의 하한(lower bound)을, 상기 벡터 레지스터에 저장된 모든 상기 인덱스의 비트단위 AND로 결정하는 단계;
메모리 내 벡터의 기준 주소, 상기 상한, 및 상기 하한에 기반하여 벡터 레지스터를 인덱스의 세트로 취하는 상기 수집-분산 메모리 명령어에 대한 주소의 범위를 결정하는 단계; 및
단일 클록 사이클 동안 메모리 보호 회로를 사용하여, 상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계를
포함하는, 방법. - 제26항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 2개의 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는, 단일 클록 사이클 동안, 상기 주소 범위의 첫 번째 바이트의 주소 및 상기 주소 범위의 마지막 바이트의 주소를 상기 메모리 보호 회로에 입력하는 단계를 포함하는, 방법. - 제26항에 있어서,
상기 메모리 보호 회로는 클록 사이클마다 단일 주소를 검사하도록 구성되고,
상기 주소의 범위 내 상기 벡터의 요소에 액세스하는 것이 메모리 보호 위반을 유발할 것인지 여부를 검사하는 단계는,
상기 주소의 범위가 단일 메모리 보호 그래뉼 내에 속하는지 검사하는 단계; 및
단일 클록 사이클 동안, 상기 주소 범위 내 단일 주소를 상기 메모리 보호 회로에 입력하는 단계를
포함하는, 방법. - 제26항 내지 제28항 중 어느 한 항에 있어서,
상기 벡터의 요소와 관련된 메모리 보호 위반의 검출에 반응하여, 예외를 발생시키는 단계를 포함하는, 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063073916P | 2020-09-02 | 2020-09-02 | |
US63/073,916 | 2020-09-02 | ||
US202163221422P | 2021-07-13 | 2021-07-13 | |
US63/221,422 | 2021-07-13 | ||
PCT/US2021/048650 WO2022051353A1 (en) | 2020-09-02 | 2021-09-01 | Memory protection for gather-scatter operations |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230058487A true KR20230058487A (ko) | 2023-05-03 |
Family
ID=77924521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237010969A KR20230058487A (ko) | 2020-09-02 | 2021-09-01 | 수집-분산 연산에 대한 메모리 보호 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230305969A1 (ko) |
EP (1) | EP4208780A1 (ko) |
KR (1) | KR20230058487A (ko) |
CN (1) | CN116057516A (ko) |
TW (1) | TW202215238A (ko) |
WO (1) | WO2022051353A1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118502822A (zh) * | 2024-07-22 | 2024-08-16 | 中科亿海微电子科技(苏州)有限公司 | 一种risc-v指令加速运算方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2557175B2 (ja) * | 1992-05-22 | 1996-11-27 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータ・システム |
US9244684B2 (en) * | 2013-03-15 | 2016-01-26 | Intel Corporation | Limited range vector memory access instructions, processors, methods, and systems |
WO2018022524A1 (en) * | 2016-07-27 | 2018-02-01 | Intel Corporation | Apparatus and method supporting code optimization |
-
2021
- 2021-08-30 TW TW110132114A patent/TW202215238A/zh unknown
- 2021-09-01 WO PCT/US2021/048650 patent/WO2022051353A1/en unknown
- 2021-09-01 CN CN202180053641.1A patent/CN116057516A/zh active Pending
- 2021-09-01 KR KR1020237010969A patent/KR20230058487A/ko active Search and Examination
- 2021-09-01 US US18/024,208 patent/US20230305969A1/en active Pending
- 2021-09-01 EP EP21778309.1A patent/EP4208780A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4208780A1 (en) | 2023-07-12 |
CN116057516A (zh) | 2023-05-02 |
US20230305969A1 (en) | 2023-09-28 |
WO2022051353A1 (en) | 2022-03-10 |
TW202215238A (zh) | 2022-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7873776B2 (en) | Multiple-core processor with support for multiple virtual processors | |
US8156309B2 (en) | Translation look-aside buffer with variable page sizes | |
US7426626B2 (en) | TLB lock indicator | |
US7685354B1 (en) | Multiple-core processor with flexible mapping of processor cores to cache banks | |
US7240160B1 (en) | Multiple-core processor with flexible cache directory scheme | |
US5895501A (en) | Virtual memory system for vector based computer systems | |
US8984261B2 (en) | Store data forwarding with no memory model restrictions | |
EP1471421A1 (en) | Speculative load instruction control | |
US7721066B2 (en) | Efficient encoding for detecting load dependency on store with misalignment | |
CN112602069A (zh) | 范围检查指令 | |
US11886882B2 (en) | Pipelines for secure multithread execution | |
US11307857B2 (en) | Dynamic designation of instructions as sensitive for constraining multithreaded execution | |
CN111201518A (zh) | 用于管理能力元数据的设备和方法 | |
US8046538B1 (en) | Method and mechanism for cache compaction and bandwidth reduction | |
US20230305969A1 (en) | Memory protection for gather-scatter operations | |
EP1979819A1 (en) | Cache locking without interference from normal allocation | |
US20230315649A1 (en) | Memory protection for vector operations | |
US11263015B1 (en) | Microarchitectural sensitive tag flow | |
US8423719B2 (en) | Apparatus, processor and method of controlling cache memory | |
US11822652B1 (en) | Prime and probe attack mitigation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |