KR20180100229A - 벡터 원자 메모리 갱신 명령 - Google Patents

벡터 원자 메모리 갱신 명령 Download PDF

Info

Publication number
KR20180100229A
KR20180100229A KR1020187023244A KR20187023244A KR20180100229A KR 20180100229 A KR20180100229 A KR 20180100229A KR 1020187023244 A KR1020187023244 A KR 1020187023244A KR 20187023244 A KR20187023244 A KR 20187023244A KR 20180100229 A KR20180100229 A KR 20180100229A
Authority
KR
South Korea
Prior art keywords
active data
vector
address
atomic
data element
Prior art date
Application number
KR1020187023244A
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 KR20180100229A publication Critical patent/KR20180100229A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0787Storage of error reports, e.g. persistent data storage, storage using memory protection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

처리회로(85)는 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 메모리 갱신을 행하기 위해 적어도 한 개의 원자 메모리 갱신 연산을 기동하기 위한, 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령을 지원한다. 어드레스 벡터의 특정한 결함을 일으키는 활성 데이터 성분을 사용하여 결정된 어드레스에 대해 결함 상태가 결정되면, 소정의 시퀀스 내부의 이 성분과 후속하는 성분에 대한 원자 메모리 갱신 연산이 금지된다. 결함을 일으키는 성분이 시퀀스 내부의 첫 번째 활성 데이터 성분이면, 결함처리 응답이 기동되는 한편, 그렇지 않으면, 결함처리 응답이 금지되고 어떤 성분이 결함을 일으키는 성분인지 나타내는 상태 정보가 기억된다.

Description

벡터 원자 메모리 갱신 명령
본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 벡터 원자(atomic) 메모리 갱신 명령의 처리에 관한 것이다.
일부의 데이터 처리장치는, 벡터의 각 데이터 성분에 대해 특정한 처리 연산이 행해져 결과 벡터의 대응하는 데이터 성분들을 생성하는 벡터 처리를 지원한다. 이것은 단일 명령을 사용하여 다수의 다른 데이터 값들이 처리될 수 있도록 함으로써, 특정한 수의 데이터 값들을 처리하는데 필요한 프로그램 명령들의 수를 줄인다. 벡터 처리는 SIMD(single instruction, multiple data) 처리로도 불린다.
적어도 일부 실시예는, 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 기동하는 처리회로를 구비하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고, 상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고, 상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 처리회로는 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 원자 메모리 갱신 연산을 금지하도록 구성되고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 상기 처리회로는 결함처리 응답을 기동하도록 구성되고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 처리회로는, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하도록 구성된 장치를 제공한다.
적어도 일부 실시예는, 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 실행하는 실행수단을 구비하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고, 상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고, 상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 실행수단은 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 상기 원자 메모리 갱신 연산을 금지하도록 구성되고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 상기 실행수단은 결함처리 응답을 기동하도록 구성되고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 실행수단은, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하도록 구성된 데이터 처리장치를 제공한다.
적어도 일부 실시예는, 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 기동하는 단계를 포함하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고, 상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고, 상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 상기 원자 메모리 갱신 연산을 금지하고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 결함처리 응답을 기동하고, 상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하는 데이터 처리방법을 제공한다.
적어도 일부 실시예는, 데이터 처리장치에 의해 실행될 때, 전술한 장치에 대응하는 명령 실행 환경을 제공하는 가상 머신을 제공하는 컴퓨터 판독가능한 기억매체에 기억된 컴퓨터 프로그램을 제공한다.
본 발명의 또 다른 발명내용, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 이하의 실시예의 설명으로부터 명백해질 것이다.
도 1은 벡터처리를 지원하는 데이터 처리장치의 일례를 개략적으로 나타낸 것이다.
도 2는 벡터 원자 메모리 갱신 명령의 일례를 나타낸 것이다.
도 3은 히스토그램을 결정하기 위해 벡터 원자 메모리 갱신 명령을 이용하는 이용 사례의 일례를 나타낸 것이다.
도 4는 벡터 원자 메모리 갱신 명령의 첫 번째 활성 데이터 성분에 대해 검출된 결함 상태를 처리하는 일례를 나타낸 것이다.
도 5는 벡터 원자 메모리 갱신 명령에 대해 검출되고 있는 결함 상태에 응답하여 결함처리 응답을 금지하고 상태 정보를 기억하는 일례를 나타낸 것이다.
도 6은 벡터 원자 메모리 갱신 명령의 처리의 일례를 나타낸 흐름도이다.
도 7은 가상머신 구현을 나타낸 것이다.
이하에서 일부 구체적인 실시예를 설명한다. 본 발명이 이들 실시예에 한정되지 않는다는 것은 자명하다.
데이터 처리장치는 적어도 한 개의 활성 데이터 성분을 포함하는 다수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령을 지원한다. 벡터 원자 메모리 갱신 명령에 응답하여, 처리회로는 적어도 한 개의 원자 메모리 갱신 연산을 기동한다. 각각의 메모리 갱신 연산은 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함한다.
메모리 위치에 대한 원자 갱신은 동일한 메모리 위치를 수정하려고 동시에 시도하고 있는 시스템 내부의 다른 프로세서들 또는 에이전트들에 대해 불가분으로 행해지는 것으로 관찰되는 갱신 연산이어도 된다. 원자 갱신은, 예를 들어, 시스템 내부의 다수의 프로세스 또는 에이전트들이 각각 메모리 내부의 공통된 세트의 위치들을 갱신하고 있을 때 유용할 수 있다. 일부 경우에, 이와 같은 갱신은 메모리 위치에 기억된 이전 값을 판독하고, 판독된 값에 대해 일부 연산을 행하여 갱신된 값을 생성하고, 갱신된 값을 다시 기록함으로써 행해지고, 비원자(non-atomic) 갱신을 사용하며, 메모리 위치에서 값을 판독하는 첫 번째 프로세스와 메모리 위치에 갱신된 값을 다시 기록하는 첫 번째 프로세스 사이의 기간에, 두번째 프로세스가 메모리 위치를 판독할 수도 있으므로, 첫 번째 프로세스에 의해 행해진 갱신이 두 번째 프로세스에 의해 고려되지 않을 수도 있어, 두 번째 프로세스가 그것의 갱신된 값을 메모리 위치에 기록할 때, 첫 번째 프로세스에 의해 행해진 갱신이 사실상 손실될 위험이 존재할 수도 있다. 이와 같은 문제는 불가분으로 행해지는 것으로 관찰되는 원자 갱신을 제공함으로써 회피할 수 있다. 예를 들어, 첫 번째 및 두 번째 프로세스/에이전트 중에서 어느 한 개가 선택되어 먼저 그것의 원자 갱신을 실행하고, 나머지 프로세스/에이전트가 값을 판독하기 전에 첫 번째 갱신이 완료할 때까지 대기해야만 한다. 이것은 각각의 프로세서들 또는 에이전트들에 의해 행해진 경합하는 판독, 수정 및 기록 동작들 사이의 경쟁으로 인해 갱신이 손실되는 것을 방지할 수 있다.
벡터 원자 메모리 갱신 명령은 다수의 메모리 위치들에 대한 원자 메모리 갱신 연산들이 한 개의 명령에 의해 시동될 수 있도록 하여, 실제 원자 메모리 갱신 연산을 행하기 위한 명령에서 뿐만 아니라, 갱신이 행해져야 하는 어드레스들을 결정하는 오버헤드를 줄인다는 점에서 코드 밀도를 향상시킬 수 있기 때문에 유용할 수 있다. 단일 명령이 갱신될 메모리 위치들의 대응하는 어드레스들을 결정하기 위한 다수의 데이터 성분들을 포함하는 어드레스 벡터를 지정할 수 있도록 함으로써, 덜 효율적일 수 있는, 어드레스 성분들의 분해와 스칼라 원자 메모리 갱신 명령들의 시퀀스를 통한 원자 메모리 갱신들의 마살링(marshalling)의 필요를 없앨 수 있다. 또한, 벡터 원자 메모리 갱신 명령은, 하드웨어가 한번에 처리할 다수의 어드레스들을 인식하여, 예를 들어, 어드레스 벡터에 대응하는 다수의 어드레스들이 동일한 메모리 위치나 캐시 라인에 매핑되는 경우에, 특정한 메모리 위치에 대한 갱신을 통합할 수 있기 때문에, 성능 향상을 허용한다.
그러나, 벡터 원자 메모리 갱신을 구현함에 있어서 한가지 문제는, 어드레스 벡터의 대응하는 데이터 성분들에 근거하여 결정된 한 개 이상의 어드레스들에 대해 결함 상태가 발생할 수 있다는 것이다. 예를 들어, 어드레스들 중에서 한 개가, 현재 매핑되지 않은 가상 어드레스에 대응하거나, 또는 현재 실행되고 있는 프로세스가 액세스할 수 있는 허가를 갖지 않는 메모리의 영역에 대응할 수도 있기 때문에, 변환 결함을 일으킬 수도 있다. 어드레스 결함을 처리하는 유용한 방법은, 결함의 원인을 수리한 후 결함을 유발한 명령의 실행을 재시작하기 위한 운영체계에 대한 트랩(trap) 등의 결함처리 응답을 기동하는 것이다. 그러나, 벡터 원자 메모리 갱신 명령에 대해서는, 벡터 명령에 응답하여 행해진 원자 갱신들의 일부가 이미 어드레스 벡터의 다른 성분에 대해 결함이 검출되기 전에 행해졌고, 이들 이미 행해진 갱신을 반복하는 것은 부정확한 결과를 발생할 수도 있기 때문에, 명령을 다시 시작하는 것이 안전하지 않을 수도 있다. 예를 들어, 한가지 형태의 벡터 원자 메모리 갱신 명령은 어드레스 벡터의 대응하는 활성 데이터 성분들에 근거하여 어드레스가 결정된 각각의 메모리 위치에 대한 증분을 기동하여, 동일한 메모리 위치를 두 번, 즉 결함이 검출되기 전에 한번과 명령을 재시작한 후에 한번 증분하는 것이 잘못된 결과를 발생할 수도 있다. 따라서, 어드레스 결함을 처리하는 표준 기술은 벡터 원자 메모리 갱신 명령들에 적합하지 않을 수도 있다.
어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖는 것으로 가정된다. 어드레스 벡터의 특정한 활성 데이터 성분(이 성분은 "결함을 일으키는 활성 데이터 성분"으로 부른다)에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 처리회로는 소정의 시퀀스 내부의 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 벡터 원자 메모리 갱신 연산을 금지한다. 결함을 일으키는 활성 데이터 성분이 소정의 시퀀스에서 첫 번째 활성 데이터 성분일 때, 처리회로는 결함처리 응답을 기동한다. 그러나, 결함을 일으키는 활성 데이터 성분이 소정의 시퀀스 내부의 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 처리회로는 결함처리 응답을 금지하고, 적어도 어드레스 벡터의 어떤 데이터 성분들이 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억한다.
이와 같은 접근방법은, 특정한 원자 메모리 갱신 연산을 두 번 행할 위험이 없이 결함 후에 벡터 원자 메모리 갱신 명령의 실행을 안전하게 재시작할 수 있다는 것을 의미한다. 결함처리 응답은 첫 번째 활성 데이터 성분이 결함을 유발할 때 행해지고, 이 경우, 시퀀스 내부의 첫 번째 활성 데이터 성분 및 후속하는 활성 데이터 성분(즉, 모든 활성 데이터 성분들)에 대한 원자 메모리 갱신 연산이 금지되므로, 어떤 메모리 갱신 연산도 실제로 일어나지 않으며, 따라서 명령을 나중에 완전히 재시작하는 것이 안전하다. 이에 반해, 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분이 결함을 일으키면, 결함처리 응답이 기동되지 않고, 그 대신에 어드레스 벡터의 어떤 데이터 성분이 결함을 일으키는 활성 데이터 성분인지를 나타내기 위해 일부의 상태 정보가 기억될 수 있다. 그후, 이 상태 정보를 사용하여 나중에 벡터 원자 메모리 갱신 명령을 재시작할 수 있으므로, 이미 완료된 성분들에 대한 메모리 갱신 연산이 다시 행해지지 않게 된다. 후술하는 것과 같이, 이와 같은 목적을 위해 상태 정보가 사용될 수 있는 다양한 다른 방법들이 존재한다. 첫 번째 활성 데이터 성분이 결함 상태에 마주치지 않으면, 적어도 첫 번째 활성 데이터 성분이 성공적으로 그것의 원자 메모리 갱신을 실행할 수 있기 때문에, 진척이 존재한다. 따라서, 벡터 원자 메모리 갱신 명령을 실행하고자 하는 일련의 시도를 통해, 모든 결함이 해결될 수 있으며 진척이 이루어질 수 있다.
일부 구현예에서, 어드레스 벡터의 모든 성분들이 활성 데이터 성분들로 생각될 수도 있으며, 시스템이 특정한 성분들을 비활성으로 표시하는 수단이 존재하지 않을 수도 있다.
그러나, 다른 시스템에서는 어드레스 벡터의 어떤 데이터 성분들이 활성인지 비활성인지 지정하는 일부 제어 정보가 존재해도 된다. 예를 들어, 어떤 데이터 성분들이 활성 성분인지를 일련의 비트들이 나타낼 때 마스크가 설치될 수도 있다. 이것은, 예를 들어, 원자 갱신이 행해져야 하는 서로 다른 어드레스들의 수가 벡터 길이의 정확한 배수가 아닐 수도 있는 경우가 많기 때문에 유용할 수 있다. 이것은 마스크를 사용하여 처리될 수 있는데, 벡터 원자 메모리 갱신 명령의 적어도 한 개의 인스턴스가, 전체 벡터를 채우는데 충분한 어드레스들이 존재하지 않는 벡터의 특정한 성분들을 비활성으로 표시하는 마스크를 사용하여 실행된다. 이 마스크는 "술어(predicate)"로 부를 수도 있다. 용어 마스크와 술서는 본 출원에는 교환하여 사용된다.
처리회로는, 상태 정보에 근거하여, 적어도 한 개의 추가적인 명령에 응답하여, 벡터 원자 메모리 갱신 명령의 실행하려는 그후의 시도에 대해 새로운 어드레스 벡터와 새로운 마스크 중에서 적어도 한개를 생성한다. 예를 들어, 어드레스 벡터 또는 이전 벡터 원자 메모리 갱신 명령의 마스크를 수정하여, 결함을 일으키는 활성 데이터 성분이 벡터 원자 메모리 갱신 명형을 실행하기 위한 그후의 시도에 대한 첫 번째 활성 데이터 성분이 될 수 있다. 예를 들어, 상태 정보를 사용하여 마스크를 수정할 수도 있으므로, 결함을 일으키는 활성 데이터 성분이 벡터 내부의 동일한 위치에 유지되지만, 소정의 시퀀스 내부의 첫 번째 활성 데이터 성분으로 표시된다. 예를 들어, 결함을 일으키는 활성 데이터 성분 이전의 성분들은, 이들의 원자 갱신이 이미 성공적으로 완료되었기 때문에, 비활성으로 표시될 수도 있다. 이와 달리, 이전 어드레스 벡터의 성분들이 이동하여 이들이 오래된 마스크에 의해 표시된 첫 번째 활성 데이터 성분들과 후속하는 성분들에 대응하는 위치에 있도록 어드레스 벡터 그 자체가 수정될 수도 있다. 프로그래머는 예를 들어 벡터 원자 메모리 갱신 명령과 적어도 한 개의 추가적인 명령을 둘러싸는 루프를 구현하여, 결함이 존재하는 경우에, 상태 정보에 따라, 이 명령에 대한 마스크 또는 어드레스 벡터를 수정할 수 있으며, 그후 새로운 마스크 또는 어드레스 벡터를 사용하여 벡터 원자 메모리 갱신 명령이 다시 시도된다. 모든 활성 성분들이 성공적으로 완료할 때까지 루프가 반복될 수 있다.
상태 정보는 다양한 방식으로 표현될 수 있다. 일부 경우에, 상태 정보는 간단히 결함을 일으키는 활성 데이터 성분의 성분 수의 표시이어도 된다.
그러나, 상태 정보를 표시하는 특히 유용한 방법은, 소정의 시퀀스 내부의 결함을 일으키는 활성 데이터 성분 앞에 있는 적어도 한 개의 데이터 성분에 대해 제1 값을 갖는 결함 표시와, 소정의 시퀀스에 있는 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대해 제2 값을 갖는 결함 표시를 포함하는 결함 마스크를 제공하는 것이다. 이와 같은 형태의 상태 정보는, 그후의 시도가 명령을 실행하기 위해 새로운 마스크를 생성하기 위해 상태 정보에 따라 벡터 원자 메모리 갱신 명령에 대한 마스크를 간단히 수정할 수 있기 때문에 유용하다. 예를 들어, 결함 마스크가 새로운 마스크를 생성하기 위해 단순히 간단한 논리 연산(예를 들어, AND) 또는 선술 연산(예를 들어, 감산)을 사용하여 벡터 원자 메모리 갱신 명령에 대한 마스크와 결합될 수도 있다.
또한, 벡터 원자 메모리 갱신 명령은 어드레스 벡터에 의해 어드레스들이 지정된 값들을 사용하여 연산을 실행하는 일련의 명령들 중에서 단지 한 개이므로, 이들 어드레스들 중에서 한 개에 결함이 존재하면, 원자 메모리 갱신 연산 뿐만 아니라, 이들 다른 연산들 중 일부도 금지할 필요가 있기 때문에, 이와 같은 종류의 결함 마스크가 유용할 수 있다. 이와 같은 종류의 결함 마스크를 제공함으로써, 결함 마스크를 사용하여 다른 명령들에 대한 마스크도 유도할 수 있으며, 어떤 경우에는 일련의 명령들에 걸쳐 결함 마스크를 누적함으로써, 결함이 있는 성분들이 결함 마스크로부터 제거되어, 남아 있는 성공적인 성분들만이 일련의 벡터 명령들에 의해 계속 처리될 수 있다. 이것은, 벡터 원자 메모리 갱신 명령 다음에, 결함을 일으키는 활성 데이터 성분에 대해 결함이 존재하면, 시퀀스에 있는 이 성분과 후속 성분에 대한 결함 표시가 제2 값으로 설정되지만, 시퀀스 내부의 결함을 일으키는 성분 앞의 모든 이전 성분들이 결함 마스크에서 제1 값을 갖는 것은 불필요한데, 이것은 이전의 성분들이 이전의 명령에 대해 어떤 종류의 결함과 마주친 경우에 이 이전의 명령이 결함 마스크의 이들 결함 표시를 제2 값으로 이미 소거했을 수도 있기 때문이다.
프로그래머의 관점에서는, 벡터 원자 메모리 갱신 명령은 어드레스 벡터의 각각의 활성 데이터 성분에 대한 원자 메모리 갱신 연산을 기동한다. 그러나, 이와 같은 거동을 하드웨어로 구현하는 다양한 방법이 존재한다. 일부 시스템에서는, 시퀀스 내부의 첫 번째 활성 데이터 성분에 근거하여 결정된 어드레스에 대해 결함 상태가 검출되지 않을 때, 처리회로는 이 시퀀스 내부의 모든 결함을 일으키는 활성 성분 앞에 있는 어드레스 벡터의 각각의 활성 데이터 성분에 대해 행해지는 원자 메모리 갱신 연산을 기동한다. 결함을 일으키는 활성 데이터 성분들이 존재하지 않으면, 활성 데이터 성분들에 대한 모든 원자 메모리 갱신 연산이 행해질 수도 있다. 따라서, 이 경우에 하드웨어는 결함을 일으키는 성분들에 이를 때까지 가능한한 많은 원자 메모리 갱신 연산을 실행하여, 필요한 명령들의 반복 횟수를 줄인다. 이 접근방법은 성능면에서 더 효율적일 수 있다.
그러나, 다른 구현예에서는, 하드웨어를 간단하게 하기 위해, 처리회로가 결함을 일으키는 활성 성분 앞에 있는 결함을 일으키지 않는 성분들에 대한 모든 원자 메모리 갱신 연산을 반드시 기동할 필요는 없다. 예를 들어, 하드웨어가 특정한 명령에 응답하여 특정한 수 N의 원자 메모리 갱신을 실행하는 것에 제한되어, 원자 메모리 갱신에 대한 다수의 요구를 버퍼링하는데 있어서의 오버헤드를 제한할 수도 있다. 따라서, 활성 성분들이 N개보다 많은 원자 메모리 갱신들이 실행되도록 요구하고, 이 시점까지 결함이 없는 경우, (N+1)번째 원자 메모리 갱신 연산이 행해지도록 요구하는 활성 성분은 어드레스 벡터의 이 성분의 값에 무관하게 결함을 일으키는 것으로 결정된다. 이 때문에, 명령의 1회의 반복에서 처리될 수 있는 활성 성분들의 수에 대한 제한값에 도달하면, 다음의 활성 데이터 성분이 결함을 일으키는 것으로 표기될 수 있고, 이 성분과 관련된 실제 어드레스가 실제로 결함을 유발하지 않더라도, 이 성분을 결함이 있는 성분으로 표시하도록 상태 정보가 설정될 수 있다. 그후, 벡터 원자 메모리 갱신 명령을 실행하려는 다음의 시도는, 예를 들어, 전술한 방식으로 마스크 또는 어드레스 벡터를 수정함으로써, 이전에 결함이 있는 것으로 밝혀진 다음의 활성 성분으로부터 다시 시작된다. 이때, 일부 경우에는, 벡터의 1개보다 많은 수의 성분이 한 개의 원자 메모리 갱신 연산으로 처리되므로(예를 들어, 동일한 캐시 라인에 대한 갱신이 통합되므로), N개보다 많은 벡터의 성분들이 처리된 후 N개의 원자 메모리 갱신의 제한값에 도달하는 일이 많다. 다른 구현예는 요구들의 통합을 지원하지 않으므로, 이 경우에는, 이전의 성분이 결함이 없으면, (N+1)번째의 활성 성분이 항상 결함이 있는 것으로 생각될 수도 있다. 일부 경우에는, N=1이므로, 첫 번째 활성 성분이 결함이 없는 경우에 어드레스 벡터의 두 번째 활성 성분이 항상 결함이 있는 것으로 표기된다. 이 경우에는, 기껏해야 명령의 반복당 단지 한 개의 성공적인 원자 메모리 갱신이 존재할 것이기 때문에, 원자 메모리 갱신 연산들이 효율적으로 시리즈화된다. 이것은 최소의 회로 오버헤드를 갖는 단단한 구현을 제공할 수 있다. 프로그래머 관점에서는, 특정한 명령에 응답하여 하드웨어가 얼마나 많은 수의 갱신이 행해질 수 있는지를 제한하는지에 무관하게 동일한 프로그램이 실행될 수 있으며, 프로그래머의 관점과의 유일한 차이점은 달성될 수 있는 성능이다.
전술한 것과 같이, 어드레스 벡터의 데이터 성분들은 특정한 소정의 시퀀스를 갖는 것으로 생각된다. 데이터 성분들의 어떤 시퀀스가 사용되어도 된다. 드러나, 간단한 접근방법은 시퀀스 내부의 첫 번째 활성 성분이 어드레스 벡터의 최하위 활성 데이터 성분이 되는 것이다. 그후, 이 시퀀스는 활성 데이터 성분들의 중요도의 증가 순서로 계속될 수 있다. 이와 같은 접근방법은, 최하위 어드레스들이 어드레스 벡터의 최하위 데이터 성분들 내부에 채워지는 것이 일반적이기 때문에, 프로그래머가 실용상 벡터들을 채우기 쉬운 방식에 가장 잘 매핑된다. 그러나, 다른 구현예는 다른 시퀀스를 선택할 수도 있는데, 예를 들어, 그 대신에 시퀀스가 최상위 데이터 성분으로부터 최하위 데이터 성분이 되거나, 더 임의의 성분들의 시퀀스가 될 수도 있다.
본 발명을 이용하여 원자 메모리 갱신 연산에 대해 발생할 수 있는 모든 종류의 결함 상태를 지킬 수 있다. 그러나, 많은 경우에, 결함 상태는 어드레스 변환 결함이나 메모리 보호 결함을 포함할 수도 있다. 특정한 구현에 의해 취해지는 결함처리 응답은 변할 수 있다. 그러나, 한가지 접근방법은 결함이 발생할 때 결함처리 루틴의 실행을 기동하는 것이다. 예를 들어, 결함처리 루틴은 결함을 처리하기 위해 운영체계가 제공하는 예외 처리기이거나 루틴일 수도 있다. 예를 들어, 어드레스 변환 결함의 경우에는, 결함처리 루틴이 결함을 유발한 어드레스를 포함하는 어드레스들의 페이지에 대해 필요한 변환 데이터에 페이지를 할당하거나, 메모리 보호 결함의 경우에는, 결함처리 루틴이 메모리 보호 유닛에 의해 설정된 보안 허가의 위반을 처리하기 위한 조치를 취할 수도 있다.
일부 경우에는, 어드레스 벡터가 원자 메모리 갱신이 행해져야 하는 절대 어드레스들을 지정해도 된다. 이와 달리, 어드레스 벡터는, 갱신할 각 메모리 위치의 어드레스를 결정하기 위해, 기본 어드레스에 추가할 각 활성 데이터 성분의 어드레스 오프셋들을 지정할 수도 있다. 기본 어드레스로부터의 오프셋을 이용하여 어드레스를 간접적으로 지정하는 것이 더 유용한 경우가 많은데, 예를 들어, 벡터의 각 성분에 절대 어드레스를 지정한 경우보다 적은 비트로 벡터 성분들을 사용하여 어드레스가 계산될 수 있게 한다.
일부 실시예에서는, 처리회로가 원자 메모리 갱신 자체를 행할 수 있다.
그러나, 처리회로와 분리된 메모리 갱신회로를 설치하여, 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 행하는 것이 더 효율적인 경우가 많다. 따라서, 처리회로는 각각의 원자 메모리 갱신 연산을 기동하기 위해 단순히 메모리 갱신회로에 대한 요구를 발행한다. 결함이 존재할 때 명령이 안전하게 다시 시작될 수 있도록 보장하기 위해, 처리회로는, 예를 들어, 어드레스 벡터 내의 이전의 데이터 성분들이 결함을 유발하지 않았다고 결정될 때까지 어드레스 벡터의 특정한 활성 성분에 대해 메모리 갱신회로에 대한 요구의 발행을 금지할 수도 있다.
별개의 메모리 갱신회로를 설치하는 것은, 먼저 처리회로가 액세스가능한 캐시 내부에 메모리 위치로부터 데이터를 로드하지 않고, 메모리 갱신회로가 직접 메모리에 대한 원자 갱신을 실행할 수 있기 때문에 특히 유리할 수 있다. 이에 반해, 처리회로가 갱신을 실행할 수 있도록 하기 위해, 일반적으로, 처리회로가 캐시에 판독할 메모리로부터의 값을 필요로 하고, 그후 다시 메모리에 기록하기 전에 이 데이터의 캐시된 복사본에 대해 갱신이 행해진다. 동시에 원자 메모리 갱신을 행하려고 시도하는 다수의 에이전트들이 존재하는 경우에, 이것은 불필요한 다수의 캐시 라인 이주를 필요로 할 수 있고, 갱신후에 가까운 장래에 데이터를 다시 참조할 필요가 없기 때문에 불필요할 수 있는 캐시 내부의 공간을 낭비할 수 있다. 캐시에 데이터를 로드하지 않고 메모리를 직접 갱신할 수 있는 메모리 갱신 에이전트를 설치함으로써, 캐시가 더욱 효율적으로 사용될 수 있다. 또한, 이것은 처리회로가 어떤 원자 메모리 갱신이 완료되었는지 추적할 필요를 없애고, 캐시를 액세스하려고 시도하고 있는 다양한 프로세스/에이전트들 사이의 코히런시를 유지하는데 있어서의 오버헤드의 발생을 없앤다. 그 대신에, 각각의 프로세서/에이전트는 메모리 갱신회로가 특정한 어드레스를 갱신하도록 단순히 요구한 후, 코히런트를 계속해서 추적할 필요가 없다('발사후 망각형(fire and forget)' 접근방법).
특정한 메모리 위치에 대한 원자 갱신은 단일 연산으로 행해질 수도 있지만 단일 연산으로 행해질 필요가 없다. 일부 경우에, 원자 갱신은, 메모리에서 값을 판독하고, 그것을 수정한 후, 다시 메모리에 수정된 값을 기록하는 별개의 스텝들로서 행해질 수도 있다. 원자 갱신이라는 용어는, 단순히 전체 갱신처리가 다른 프로세서들에 의해 원자적으로 발생하는 것으로 관찰된다는 것을 나타내며, 실제 갱신이 단일의 원자 연산인 것을 요구하지 않는다. 또한, 원자 갱신은 어드레스 벡터의 특정한 어드레스 성분에 대해 행해진 갱신을 말하며, 전체 벡터에 대한 갱신이 원자적으로 발생하야야 한다는 것을 시사하지 않는다. 다른 프로세스들이 다른 데이터 성분들에 대응하는 성공적인 원자 갱신들 사이에 메모리에 대한 갱신을 행하는 것이 완벽하게 허용된다.
메모리 위치의 다양한 종류의 갱신에 대응하여, 다양한 형태의 벡터 원자 메모리 갱신 명령이 존재한다. 예를 들어, 메모리 위치에 대한 원자 갱신은 다음 중 어느 것을 포함할 수 있다:
· 메모리 위치에 기억된 값에 대해 특정한 값을 가산하거나 감산하는 것(예를 들어, 메모리 위치에 기억된 값에 대한 증분 또는 감분).
· 메모리 위치에 기억된 값과 적어도 한 개의 또 다른 값에 대해 비트단위의 논리 연산을 행하는 것(예를 들어, AND, OR, XOR 또는 NAND). 이들 종류의 비트단위의 논리 연산은 예를 들어 메모리 위치에 기억된 값의 특정한 비트를 소거하거나 설정하는데 유용할 수 있다.
· 메모리 위치를 메모리 위치에 기억된 이전 값과 적어도 한 개의 또 다른 값 중에서 최소값 또는 최대값을 설정하는 것(추가적인 값의 다른 값들을 사용하여 다수의 이와 같은 원자 갱신을 실행함으로써, 이 위치의 값이 장래의 추가적인 값으로 테스트되었던 모든 값들 중에서 전체 최소값 또는 최대값이 된다).
· 메모리 위치에 기억된 이전 값이 소정의 조건을 만족하는 경우 메모리 위치에 기억된 값을 갱신하는 것(예를 들어, 이전 값을 다른 값과 비교하고 이것이 다른 값과 같으면 제3 값으로 치환하거나, 메모리 위치의 특정한 비트들을 어떤 조건에 대해 테스트한 후, 조건이 만족하면 갱신을 적용한다).
이때, 다양한 다른 종류의 갱신이 구현될 수 있다는 것은 자명하다. 일부 시스템은, 전술한 것과 같이 각각 처리되지만 다른 종류의 갱신 연산을 기동하는 2가지 이상의 종류의 벡터 원자 메모리 갱신 명령을 지원한다. 이들 명령은 명령 연산코드 또는 각각의 메모리 위치에 적용할 연산의 종류를 명시하는 필드에 의해 구별할 수도 있다.
일부 경우에, 갱신 연산은, 갱신 전에 메모리 위치에 기억된 이전 값, 및/또는 갱신 후에 메모리 위치에 기억된 새로운 값을 레지스터 또는 캐시에 로드하는 것을 더 포함한다. 따라서, 메모리를 갱신하는 것 이외에, 오래되거나 새로운 값이 레지스터 또는 캐시에 반환되어, 처리회로가 그것을 액세스할 수 있다.
본 발명은 가상머신을 사용하여 구현할 수도 있다. 가상머신은, 호스트 장치에 의해 실행될 때, 호스트 장치가 전술한 회로를 갖는 것처럼 프로그래머의 관점에서 보이도록 명령을 실행하기 위한 명령 실행 환경을 제공하는 프로그램이다. 호스트 프로세서는 그 자체가 실제로 이 회로를 갖고 있을 필요는 없으며, 그 대신에 가상머신의 코드가 이와 같은 회로가 설치된 것처럼 명령을 실행하도록 호스트 하드웨어를 제어한다. 예를 들어, 가상머신은 기억매체에 기억된 컴퓨터 프로그램일 수 있다. 기억매체는 비일시적일 수 있다.
도 1은 전술한 실시예의 기술이 채용되는 시스템의 블록도이다. 도 1에 도시된 실시예에서는, 시스템이 파이프라인으로 접속된 프로세서의 형태를 취한다. 명령은 페치회로(10)에 의해 명령 캐시(15)(이것은 보통 레벨 2 캐시(50) 등의 한 개 이상의 추가적인 레벨의 캐시를 거쳐 메모리(55)에 접속된다)로부터 페치되고, 페치회로로부터 명령들이 디코드 회로(20)를 거쳐 전달되어 디코드 회로가 각각의 명령을 디코드하여, 파이프라인으로 접속된 프로세서 내부의 하향측의 실행 자원들을 제어하기 위한 적절한 제어신호를 발생함으로써 명령들에 의해 요구된 연산을 행한다. 디코드된 명령들을 구성하는 제어신호들은 발행 스테이지 회로(25)에 전달되어, 파이프라인으로 접속된 프로세서 내부의 한 개 이상의 실행 파이프라인들 30, 35, 40, 80, 85에 대해 발행된다. 실행 파이프라인들 30, 35, 40, 80, 85는 총괄적으로 처리회로를 구성하는 것으로 생각된다.
발행 스테이지 회로(25)는 연산이 필요로 하는 데이터 값들이 기억될 수 있는 레지스터들(60)을 액세스한다. 특히, 벡터 연산을 위한 소스 피연산자는 벡터 레지스터(65) 내부에 기억되고, 스칼라 연산을 위한 소스 피연산자는 스칼라 레지스터(75)에 기억된다. 더구나, 특정한 벡터 연산을 행할 때 처리된 벡터 피연산자들의 데이터 성분에 대한 제어 정보로서 사용하기 위해, 한 개 이상의 술어(마스크)가 술어 레지스터(70)에 기억된다. 또한, 한 개 이상의 스칼라 레지스터를 사용하여 특정한 벡터 연산의 실행 중에 사용하기 위한 이와 같은 제어 정보를 유도하는데 사용되는 데이터 값을 기억한다.
또한, 레지스터(60)는, 처리 파이프라인의 동작을 환경설정하기 위한 환경설정 정보, 또는 파이프라인에 의해 행해진 처리 연산의 결과에 대한 상태 정보를 제공하기 위한 레지스터들을 포함하는 제어 레지스터들(77)을 더 구비한다. 이들 제어 레지스터들(77) 중에서 한 개는 후술하는 제1 결함 레지스터(first faulting register: FFR)(79)이다.
소스 피연산자들과 모든 관련된 제어 정보는 경로(47)를 거쳐 발행 스테이지 회로에 전달되어, 각각의 디코드된 명령을 실형하기 위해 행해지는 연산(들)을 식별하는 제어 정보와 함께 적절한 실행 유닛에 할당될 수 있다. 도 1에 도시된 다양한 실행 유닛들 30, 35, 40, 80은 벡터 피연산자에 대해 동작하는 벡터 처리 유닛인 것으로 가정하지만, 필요한 경우에는 장치에 의해 지원된 스칼라 연산을 처리하기 위해 별개의 실행 유닛(미도시)이 설치될 수 있다.
다양한 벡터 연산을 고려하여, 소스 피연산자들에 대해 행해지는 산술 또는 논리 연산을 가능하게 하기 위해, 필요한 소스 피연산자( 및 술어 등의 제어 정보)와 함께 산술 연산이 예를 들어 산술 논리 유닛(ALU)(30)에 전달되고, 결과값은 일반적으로 벡터 레지스터 뱅크(65)의 지정된 레지스터에 기억하기 위해 목적지 피연산자로서 출력된다.
ALU(30) 이외에, 예를 들어, 디코드된 부동소수점 명령에 응답하여 부동소수점 연산을 행하는 부동소수점 유닛(FPU)과, 벡터 피연산자에 대해 특정한 치환(permutation) 연산을 행하는 벡터 치환(vector permute) 유닛(80) 등의 다른 실행 유닛 35가 설치되어도 된다. 더구나, 로드/스토어 유닛(LSU)(40)을 사용하여, (데이터 캐시(45)와 레벨 2 캐시(50) 등의 개재하는 추가적인 레벨의 캐시를 거쳐) 메모리(55)로부터 레지스터 세트(60) 내부의 지정된 레지스터 내부에 데이터 값을 로드하기 위한 로드 연산을 행하고, 이들 레지스터로부터의 데이터 값을 다시 메모리(55)에 기억하기 위한 스토어 연산을 행한다.
도 1에 도시된 시스템은, 명령들의 시퀀스가 프로그램 순서로 실행되는 순차적(in-order) 처리 시스템이거나, 이와 달리, 성능을 향상시키려는 목적으로 다양한 명령들이 실행되는 순서가 재정렬되는 것을 허용하는 비순차(out-of-order) 시스템이어도 된다. 본 기술분야의 당업자에게 있어서 자명한 것과 같이, 비순차 시스템에서는, 추가적인 구조(도 1에는 명시적으로 도시하지는 않는다), 예를 들어, 명령에 의해 제정된 아키텍처 레지스터들을 레지스터 뱅크(45) 내부의 물리 레지스터들의 풀(pool)로부터의 물리 레지스터들에 매핑하는 레지스터 재명명 회로가 설치됨으로써(물리 레지스터들의 풀은 보통 아키텍처 레지스터들의 수보다 크다), 특정한 위험이 제거될 수 있도록 하여, 비순차 처리의 더 많은 사용을 용이하게 한다. 더구나, 비순차 실행을 추적하고, 다양한 명령의 실행 결과가 순차적으로 커미트(commit)될 수 있도록 하기 위해 재배열 버퍼가 보통 설치된다.
전술한 실시예에서, 도 1의 회로는 벡터 레지스터(65)에 기억된 벡터 피연산자에 대해 벡터 연산을 실행하도록 구성되고, 이때 벡터 피연산자는 복수의 데이터 성분들을 포함한다. (산술 연산 등의) 이와 같은 벡터 피연산자에 대해 행해진 특정한 벡터 연산에 대해, 필요한 연산이 벡터 피연산자 내부의 다양한 데이터 성분들에 대해 병렬로(또는 반복적으로) 적용된다. (마스크로도 알려진) 술어 정보를 사용하여, 벡터 내부의 어떤 데이터 성분들이 특정한 벡터 연산에 대한 활성 데이터 성분, 따라서 연산이 적용되어야 하는 데이터 성분인지 식별한다.
도 1에 도시된 것과 같이, 실행 파이프라인은 원자 메모리 갱신 연산을 행하기 위한 원자 메모리 갱신 유닛(85)을 더 구비한다. 원자 메모리 갱신(AMU) 유닛을 도 1의 다른 실행 유닛으로부터 별개로 도시하지만, 다른 실시예에서는, AMU 유닛(85)의 기능을 ALU(30) 또는 로드/스토어 유닛(LSU)(40) 등의 다른 실행 유닛들 중에서 한 개와 결합할 수도 있다. AMU 유닛(85)은 메모리(55) 내부의 한 개 이상의 위치에 대한 원자 갱신을 기동하기 위해 원자 메모리 갱신(AMU) 명령의 처리를 취급한다. 메모리(55) 내부의 위치들로부터의 데이터가 캐시들 45, 50 내부에 로드되는 것을 요구하지 않고 이들 위치를 직접 갱신하기 위해 외부 AMU 에이전트(100)가 설치된다. 이와 같은 구성은 다시는 빈번하게 참조될 것 같지 않은 갱신되고 있는 다수의 임시로 액세스된 데이터로 캐시가 오염되는 것을 방지한다. 또한, 외부 AMU 에이전트(100)는 다른 갱신에 대해 불가분으로 행해지고 있는 메모리에 대한 원자 갱신을 관리함으로써, 프로세서 그 자체가 경쟁하는 갱신들 사이의 코히런시를 감시할 필요가 없게 할 수 있다.
따라서, AMU 처리 유닛(85)은, 원자 갱신이 행해지는 어드레스가 결함을 유발하는지 판정하고, 유발하지 않는 경우에는 외부 AMU 에이전트(100)에게 어드레스들의 요구에 대한 갱신을 행하도록 하는 요구를 발행하는 역할을 한다. 메모리 어드레스 공간의 각각의 영역에 대한 액세스 허가를 관리하기 위해 메모리 관리 유닛(MMU)(90)이 설치된다. MMU(90)는 어드레스 공간의 각각의 페이지들에 대한 가상-물리 어드레스 변환을 정의하는 변환 색인 버퍼(TLB)(92)를 갖는다. 또한, TLB 엔트리는, 예를 들어, 대응하는 페이지가 판독 전용인지 또는 기록할 수 있는지 정의하거나, 코드의 어떤 특권 레벨들이 페이지를 액세스할 수 있는지 정의하는 허가 정보를 지정한다. LSU(40) 또는 AMU 유닛(85)이 로드, 스토어 또는 원자 갱신이 행해질 어드레스를 수신하면, 이 어드레스가 TLB(92)에서 참조되고, MMU(90)는 액세스가 허용되는 여부를 나타낸 표시와, 허용되는 경우에는, LSU(40) 또는 AMU 유닛(85)에 의해 제공된 가상 어드레스에 대한 대응하는 물리 어드레스를 반환한다. 액세스가 허가되면, LSU(40) 또는 AMU 유닛(85)은 적절히 데이터 캐시(45)에 대한 액세스 또는 AMU 에이전트(100)에 대한 요구를 기동한다. 도 1에서는 메모리 관리 유닛(90)이 설치되는 예를 나타내었지만, 명령이 직접 물리 어드레스를 지정하는 시스템에서는, 그 대신에, (가상-물리 어드레스 변환이 없이) 메모리의 물리적으로 어드레스가 지정된 페이지에 대한 액세스 허가를 정의하는 메모리 보호 유닛(MPU)이 설치될 수도 있다.
도 2는 AMU 유닛(85)에 의해 처리될 수 있는 벡터 AMU 명령의 일례를 나타낸 것이다. 이 예는 입력으로서 추가할 기준 어드레스 &A, 어드레스 벡터 Zb, 마스크 레지스터(술어 레지스터) Pg 및 중간 값 #1을 지정하는 AMU 가상 명령이다. 도 2에 도시된 것과 같이, 술어 레지스터 Pg는 어드레스 벡터 Zb의 어떤 성분이 활성 성분인지 또는 비활성 성분인지 식별하는 비트값들의 마스크를 포함한다. 이 예에서는, 0의 마스크 비트 값이 비활성 성분을 나타내고 1의 마스크 비트 값이 활성 성분을 나타내지만, 필요한 경우에는 이와 반대의 매핑이 사용될 수도 있다는 것은 자명하다. 따라서, 이 예에서는, 어드레스 벡터 Zb의 0 및 1이 비활성이고 2 내지 7이 활성이다. 어드레스 벡터 Zb의 각각의 활성 데이터 성분은 원자 메모리 갱신이 행해질 메모리 위치의 어드레스를 결정하기 위해 기준 어드레스 &A에 추가되는 어드레스 오프셋을 지정한다.
따라서, 도 2에 나타낸 것과 같이, 벡터 AMU 명령에 응답하여, 각각의 활성 데이터 성분 2 내지 7에 대해, AMU 유닛(85)은 외부 AMU 에이전트(100)에 대한 요구를 기동하여, 기준 어드레스 &A와 활성 성분들 2 내지 7에 의해 지정된 각각의 연속된 오프셋 109, 56, 90 등의 합에 대응하는 일련의 어드레스를 원자적으로 갱신한다. 어드레스 벡터 ZB의 비활성 성분 0, 1에 대해서는 요구가 전송되지 않는다. 도시된 것과 같이, 어드레스 벡터 Zb의 다양한 성분들에 있어서 어드레스 오프셋들의 에일리어싱(aliasing)이 존재하므로, 동일한 어드레스가 벡터 AMU 명령에 응답하여 적용되는 복수의 갱신을 갖는다. 도 2에서는, 예를 들어, 어드레스 벡터의 성분 2 및 5가 모두 동일한 오프셋 109를 지정하므로, 어드레스 &A+109를 사용한 메모리 위치를 갱신하기 위한 2개의 별개의 요구가 발행된다.
이 예에서는, 벡터 AMU 명령이 가산 명령이고 중간값이 1이므로, 각각의 요구는 각각의 오프셋에 근거하여 계산된 어드레스를 갖는 메모리 위치에 기억된 값을 증분하는 것이다. 이때, 1 이외의 값의 가산, 어드레스가 지정된 메모리 위치에 기억된 값으로부터 특정한 값의 감산, 메모리 위치에 기억된 값과 적어도 한 개의 추가적인 값에 대해 AND, OR, XOR, NAND 등의 비트단위의 논리 연산을 행하는 것, 메모리 위치에 기억된 값과 적어도 한 개의 추가적인 지정된 값의 최대값 또는 최소값으로 메모리 위치를 설정하는 것, 및 메모리 위치에 있는 값을 특정한 다른 값과 비교하거나 이 값이 어떤 조건을 만족하는지 판정한 후 조건이 만족되면 이 값을 갱신하는 것 등의 다른 종류의 원자 갱신이 행해질 수도 있다. AMU 에이전트(100)는, 메모리를 액세스하려도 시도하는 다른 프로세서에 의해 불가분인 것으로 관찰되도록 각각의 원자 갱신을 처리한다. 따라서, 특정한 갱신 요구에 응답하여 원자 갱신을 개시하는 것과 종료하는 것 사이에, 갱신이 손실되지 않도록 보장하기 위해, 다른 프로세서가 갱신되고 있는 메모리 위치를 판독하거나 기록할 수 없다. 도 2에 도시된 거소가 같이 동일한 벡터 내부에 각각의 어드레스들의 에일리어싱이 존재하는 경우에는, 원자 갱신은 두 번째 에일리어싱된 요청이 개시하기 전에 첫 번째 에일리어싱된 요구에 응답하는 갱신이 완료하도록 보장한다.
도 3은 이와 같은 종류의 벡터 AMU 명령에 대한 이용 사례의 예를 나타낸 것이다. 예를 들어, 프로그래머는 데이터 값들의 어드레스를 검토하기 위해 어떤 코드를 작성하고 각각의 가능한 수치값이 어드레스 내부에서 얼마나 많이 출현하는지 계수하기를 원할 수 있다. 즉, 프로그래머는 사실상 도 3의 상단에 나타낸 히스토그램(120)을 결정하기 원할 수 있다. 따라서, 고려하고자 하는 데이터 값들의 어레이가 기준 어드레스 &V에서 시작하여 메모리 내부에 위치들의 블록(122)으로서 기억되고, 어레이(122)의 얼마나 많은 수의 값들이 각각 가능한 수치값을 갖는지 표시하는 계수값들을 기억하기 위해 기준 어드레스 &A에서 시작하는 메모리 어드레스 공간의 또 다른 영역(124)이 할당된다.
도 3의 우측에 의사코드로 나타낸 것과 같이, 이것은 간단한 루프를 이용하여 구현될 수 있다. 루프의 반복시마다, 벡터 로드 명령(VLoad)이 데이터 값을 어레이(122)부터 어드레스 벡터 Zb에 로드할 수 있다. 어드레스 벡터 Zb 내부에 로드된 첫 번째 데이터 값의 어드레스는 계수값 오프셋 i를 데이터 값들을 기억하는 어레이(122)의 기준 어드레스 &V에 가산함으로써 결정된다. 최초의 반복시에, 어레이(122)의 첫 번째 VL 성분들이 어드레스 벡터 Zb 내부에 로드되는데, 이때 VL은 벡터 Zb의 성분들의 수(벡터 길이)이다.
어드레스 벡터가 채워지면, 계수값 어드레스(124)의 시작을 나타내는 기준 어드레스 &A, 벡터 로드 명령의 결과인 어드레스 벡터 Zb와, 어드레스 벡터 Zb에 있는 각각의 오프셋들을 기준 어드레스 &A에 가산하여 어드레스가 결정되는 각각의 메모리 위치에 가산할 1의 중간값을 지정하여, 도 2에 도시된 종류의 벡터 AMU 명령(VAMU-ADD)이 실행된다. 이 예에서는, 간단화를 위해, 모든 성분들이 활성이 되도록 벡터 로드 및 벡터 AMU 명령에 대한 마스크가 모두 1인 것으로 가정한다. 따라서, 벡터 AMU 명령에 응답하여, AMU 유닛(85)은 원자 메모리 갱신 에이전트(100)를 기동하여, 데이터 어레이(122)로부터 액세스된 특정한 값들에 대응하는 계수값 어레이(124) 내부의 위치를 증분한다. 주어진 수치 데이터 값에 대한 계수값은 이 데이터 값과 같은 오프셋에 위치한다(예를 들어, 값 '72'의 출현 횟수를 나타내는 계수값은 기준 어드레스 &A로부터의 오프셋 72이다). 따라서, 주어진 수치값이 어레이 122 내부에 출현할 때마다, 이것은 어레이 124에 있는 대응하는 계수값의 증분을 기동하게 된다.
벡터 AMU 명령을 행하면, 카운터 i를 벡터 길이 VL에 대응하는 어드레스들의 수만큼 증분할 수 있으며(i:=i+VL), 그후 루프가 다시 시작하여 VL 성분들의 다음 블록을 어드레스 벡터 내에 페치하고 고려되는 다음 블록의 데이터 값들에 대해 벡터 AMU 명령을 반복한다. 이에 따라 루프는 한 개의 벡터 길이 VL에 대응하는 각각의 연속된 청크의 데이터 값들을 거쳐 반복을 계속할 수 있다.
루프는 데이터 어레이(122)의 끝에 도달하면 루프를 중지시키기 위해 if 문을 포함한다. 예를 들어, if 문은 카운터 i가 어레이의 전체 길이 이상인지 아닌지를 검사한다. 이와 달리, 가상 어드레스 공간 내부의 데이터 어레이(122) 후의 가상 어드레스(126)가 특정한 정지 표시값 XXXX(이때 정지값은 임의의 소정 값일 수 있다)을 기억하고, if 문이 루프 내부에 포함되어 어드레스 벡터 Zb의 성분들 중에서 한 개가 정지값 XXXX와 같은 것으로 밝혀질 때 루프를 정지시킬 수도 있다. 이와 달리, 다른 정지 조건이 정의될 수 있다.
이에 따르면, 벡터 AMU 명령을 사용하여 비교적 적은 수의 정적 명령으로 히스토그램(120)을 결정할 수 있다. 이때, 도 3은 단순화된 예이며 마스크를 조작하거나 처리할 각각의 성분에 대한 더 많은 수의 복잡한 연산을 행하는데 필요한 더 많은 명령이 존재할 수도 있다는 것은 명백하다. 스칼라 AMU 구현에 비해, 코드를 벡터화하는 것은, 데이터 어레이(122)의 각각의 성분을 개별적으로 페치하고, 정지 조건이 만족하는지 여부를 검사하고, 각각의 위치에 대한 개별적인 종류의 메모리 갱신을 기동하기 위해 다수의 명령을 실행할 필요가 줄어들므로, 더욱 효율적일 수 있다. 또한, 스칼라 세트의 연산과 달리, 벡터 AMU는 더욱 효율적으로 처리될 수 있다. 예를 들어, 벡터의 다수의 성분들이 동일한 캐시 라인에 대응하면, 이들을 한 개의 AMU 에이전트(100)에 대한 요구를 이용하여 처리하여 한 개의 연산으로 대응하는 캐시 라인을 갱신할 수 있다.
그러나, 도 2 및 도 3에 도시된 종류의 벡터 원자 메모리 갱신 명령을 실행할 때, 어드레스 벡터 Zb를 사용하여 계산된 어드레스들이 어드레스 변환 결함이나 메모리 보호 결함 등의 결함 상태를 기동하는 것이 가능하다. 어드레스 변환 결함은 TLB(92) 내부의 변환 데이터의 참조에 근거하여 MMU(90)에 의해 전송된 결함일 수 있다. 메모리 보호 결함은 물리적으로 어드레스가 지정된 요구에 대해 허가 데이터를 참조하는 메모리 보호 유닛에 의해 유발된 결함일 수 있다. 예를 들어, MMU(90)는, 현재 실행되고 있는 프로세서가 요구되고 있는 어드레스를 갱신할 수 있는 허가를 갖지 않거나, 벡터의 특정한 성분에 대해 계산된 어드레스가 허가가 설정되지 않은 매핑되지 않은 가상 어드레스에 대응하는 경우에 결함을 발생한다. 이와 같은 결함 상태는 보통, 운영체계에 대한 트랩 등의 어떤 종류의 결함 처리 응답을 기동하거나, 개입하여 문제를 고치려고 시도하는 예외처리 루틴의 실행에 의해 처리된다. 결함의 원인을 보수하면(예를 들어, TLB(92) 내부에 매핑되지 않은 페이지에 대한 페이지를 할당하면), 운영체계나 다른 종류의 제어 소프트웨어가 명령을 다시 시작하여 완료할 수 있다. 통상적인 벡터 연산에 대해서는, 이들 연산이 멱등(idempotent)일 수 있기 때문에, 스크래치로부터 전체 명령을 재생하는 것이 안전할 수 있다.
그러나, 도 2 및 도 3에 도시된 종류의 벡터 AMU 명령은 멱등이 아닐 수도 있다. 예를 들어, 도 2에 도시된 연산을 스크래치로부터 반복한다면, 결함이 식별되기 전에 행해진 성공적으로 완료된 원자 갱신이 다시 행해질 것으로, 메모리 내부의 대응하는 위치들이 1회보다 많은 횟수 증분할 수 있을 것이다. 이것은, 예를 들어, 도 3의 히스토그램에 대해 잘못된 값을 발생할 수도 있다. 이와 유사한 문제가 다른 종류의 AMU에 대해서도 발생할 수 있다(예를 들어, 1회의 XOR 등의 논리 연산을 너무 많이 적용하면 결과를 변경할 수도 있다). 따라서, 벡터 원자 메모리 갱신 명령에 의해 기동된 한 개 이상의 어드레스들에 대해 결함이 발생하면, 이미 행해진 갱신들을 반복하지 않고 명령을 재실행되도록 하는 것이 바람직할 수 있다. 도 4 내지 도 6은 이것을 행하기 위한 예시적인 기술을 나타낸 것이다.
도 4에 나타낸 것과 같이, 어드레스 벡터의 첫 번째 활성 성분에 대해 결함 상태가 검출되면, 운영체계가 결함을 처리할 수 있도록 운영체계에 대한 트랩 등의 결함처리 응답이 기동된다. 또한, 결함이 검출되면, AMU 유닛(85)은 결함을 유발한 활성 성분과 그후의 성분들에 대해 AMU 에이전트(100)에게 발행되고 있는 AMU 요구를 금지한다. 예를 들어, 도 4에서는 성분 2가 대응하는 마스크 비트가 1인 벡터 내부의 최하위 성분이기 때문에 첫 번째 활성 성분이 된다. 성분 2에서 결함이 발생하면, 성분 2 내지 7에 대한 AMU 요구가 금지된다.
한편, 도 5에 나타낸 것과 같이, 첫 번째 활성 성분이 아닌 어드레스 벡터의 성분에 대해 결함이 검출되면, 결함처리 응답이 금지된다. 예를 들어, 운영체계에 대한 트랩이 존재하지 않는다. 그럼에도 불구하고, AMU 유닛(85)은 결함을 일으키는 성분과 이 결함을 일으키는 성분보다 더 상위에 있는 다음 성분들에 대해 발행되고 있는 AMU 요구를 금지한다. 예를 들어, 도 5에서는, 활성 성분 4에 대해 결함이 발생하였으므로, 이전의 활성 성분 2 및 3에 대한 AMU 요구가 성공적으로 발행되지만, 결함을 일으키는 활성 성분 4와 그후의 활성 성분 5 내지 7에 대한 요구가 금지된다.
결함처리 응답이 발생하지 않았으므로(예를 들어, 운영체계에 대한 트랩이 발생하지 않았으므로), 명령의 실행이 성공적이었던 것처럼 보이게 된다. 그러나, 결함에 대한 정보를 제공하기 위해, AMU 유닛(85)은 첫 번째 결함을 일으키는 레지스터(79)를 갱신하여 어떤 성분이 결함을 일으켰는지 표시한다. 도 5에 도시된 것과 같이, 첫 번째 활성 성분 이외의 성분에 대해 결함이 발생하면, 이 결함을 유발한 성분과 이것보다 상위의 성분들에 대응하는 FFR(79) 내부의 비트들이 소거된다. 따라서, FFR(79)는 사실상 벡터를 AMU 요구들이 AMU 에이전트(100)에 성공적으로 발행되었던 것에 대해 1들로 표시한 부분과, AMU 요구가 발행되지 않았던 것에 대해 0의 비트들로 표시되는 부분으로 분할한다. 이것은, 어떤 활성 성분들이 성공적으로 처리되거나 처리되지 않았는지와, 이에 따라 동일한 성분에 대해 AMU 연산들을 두 번 행하지 않게 하기 위해 명령의 실행이 다시 시작되어야 하는 지점을 소프트웨어가 판정할 수 있도록 할 수 있는 정보를 제공한다. 예를 들어, 도 5의 하부에 나타낸 것과 같이, FFR(79) 내부의 1의 비트값들에 대응하는 이전 마스크 Pg의 비트값들이 소거됨으로써, 아직 처리되지 않은 나머지 성분들만이 벡터 AMU 명령의 그후의 실행에 대해 활성 성분들로 표시되는 DDR(79)를 사용하여 벡터 AMU 명령에 대한 새로운 마스크가 생성될 수 있다. 예를 들어, 모든 성분들이 성공적으로 갱신될 때까지 명령을 반복적으로 실행하기 위해 벡터 AMU 명령을 둘러싸는 루프를 사용하여 응용 소프트웨어가 작성될 수 있다. 이것에 대한 예시적인 의사코드를 다음에 나타낸다:
Figure pct00001
정적 명령들의 전체 수가 필요한 갱신을 행하기 위해 일련의 스칼라 AMU 연산을 실형하기 위해 필요한 정적 명령들의 수와 유사하더라도, 예를 들어, 메모리 내부의 동일한 캐시 라인을 대상으로 하는 경우에는, 위에 나타낸 식의 벡터화된 루프는 하드웨어가 병렬의 다수의 성분 갱신들에 근거하여 성능을 향상시킬 수 있는 가능성을 갖는다. 이와 달리, 스칼라 구현은 한번에 한 개 성분만 발행할 수 있을 것이다.
따라서, 결함이 검출될 때 어드레스 벡터 내부의 결함을 일으키는 성분과 그후의 성분들에 대해 원자 갱신 연산을 금지하고, 벡터 내부의 첫 번째 활성 성분이 결함을 일으키는 경우에만 결함처리 응답을 기동하고, 첫 번째 활성 성분 이외의 성분이 결함을 유발하는 경우에는, 어떤 데이터 성분이 결함을 일으켰을지 표시하기 위해 FFR(79)을 설정함으로써, 갱신들 중에서 어느 것을 1회보다 많은 횟수만큼 행할 위험이 없이 결함 후에 벡터 AMU 명령들이 안전하게 다시 시작될 수 있게 할 수 있다.
이것은, 특정한 벡터 명령을 벡터 길이 VL의 데이터 값들의 연속된 블록들에 대해 반복적으로 실행하는 루프가 존재하는 도 3의 예와 같은 벡터화된 코드에서 특히 유용할 수 있다. 처리하려는 별개의 데이터 값들의 수가 벡터 길이의 정확한 배수가 되지 않아, 루프의 최종적인 반복이 루프가 가로지르고 있는 구조(122)의 끝을 벗어나는 데이터 값들을 페치하는 경우가 많다. 이 경우에, 최종 반복시에, 벡터의 일부 성분들이 계수값 어레이(124) 내부에 매핑하지 않는 어드레스 오프셋들에 대응할 가능성이 더 크므로, 이와 같은 어드레스 오프셋들이 어드레스 변환 결함이나 메모리 보호 결함을 유발할 가능성이 더 크다. 예를 들어, 루프의 최종 반복이 처리되고 있는 어레이의 끝을 벗어난 데이터 값들을 어드레스 벡터 Zb 내부에 로드하고, 이들이 계수값 어레이(124)의 기준 어드레스 &A로부터 다량으로 오프셋되는 큰 값을 가질 수도 있으며, 현재 처리가 액세스하는 것이 허용되지 않는 어드레스 공간의 영역 내부로 뻗을 수도 있다.
벡터 AMU 명령을 실행하기 전에 모든 어드레스 오프셋들을 개별적으로 검사하는 것은, 추가적인 복잡성을 도입할 것이고, TLB 내부로의 변환을 로크(lock)할 능력이 없이, 여전히 벡터 AMU 명령에 의해 처리된 어드레스들이 결함을 일으키지 않도록 보장할 수 있다. 또 다른 옵션은, 벡터 AMU 명령이 실행되기 전에 어레이의 끝에 도달하였는지 여부를 검사하는 것이다. 그러나, 일부 경우에는, 언제 어레이의 끝에 도달하였는지 결정하기 위한 정지 조건이 실제로는 갱신 동작 그 자체에 의존하여, 사전에 테스트하는 것이 불가능할 수도 있으며, 모든 경우에 필요한 정적 명령들의 수를 증가시킬 수 있다. 그 대신에 정지 조건이 만족되는 것이 알려지기 전에 벡터 AMU 명령이 실행될 수 있도록 함으로써, 소프트웨어가 더욱 효율적으로 행해질 수 있다. 그러나, 이것도 어드레스 결함의 위험을 증가시킨다. 어드레스 결함의 유일한 원인이 벡터화된 코드가 가로지르도록 되어 있었던 구조의 끝을 벗어나 움직였다는 것일 때 OS를 불필요하게 트랩하는 것은 바람직하지 않을 것이다. 그후의 성분들이 결함을 일으킬 때 결함처리 응답을 금지함으로써, 그후 정지 조건이 만족된 것으로 판정될 수 있으면, 정지 조건이 만족되는 것으로 밝혀질 때 벡터 AMU 명령들의 루프가 정지되기 때문에, 벡터 AMU 명령을 반복하는 것이 전혀 필요하지 않을 수도 있다. 정지 조건이 만족되지 않으면, 결함이 사실이므로, 벡터 명령이 반복될 수 있고m 레지스터(79)로부터의 FFR 정보를 이용하여, 벡터 AMU 연산이 이제는 첫 번째 활성 성분으로 표시되는 이전에 결함을 일으킨 성분으로부터 다시 시작하도록 마스크를 갱신할 수 있다.
도 5는 성공적인 성분과 비성공적인 성분들로 분할하는 마스크의 항목으로 FFR(79)가 표시되는 일례를 나타낸 것이다. 그러나, 단단히 결함을 유발한 성분의 성분 번호를 식별하는 것과 같은 다음 방법으로 이것을 표시하는 것이 가능할 수도 있을 것이다. 도 5는 벡터 원자 메모리 명령을 실행하려는 반복된 시도에 대해 새로운 마스크를 계산하는 일례를 나타내었지만, 또 다른 접근방법은, 이전의 시도의 결함을 유발한 성분의 위치에 대응하는 번호 어드레스들에 의해 계수값 i를 갱신한 후 도 3애 도시된 벡터 로드 명령을 반복함으로써, 결함을 일으킨 성분이 이제는 벡터 내부의 첫 번째 활성 성분에 대응하는 위치에 잇도록 어드레스 벡터 Zb 그 자체를 갱신하는 것이다. 그후, 결함을 해결하기 위해 운영체계에 의해 행해진 모든 동작의 완료 후에, 벡터 AMU 명령을 실행하려는 그후의 시도를 이전에 결함이 있는 것으로 판정된 원소에서 시작하게 된다.
벡터 원자 메모리 갱신 명령의 실행시마다, 첫 번째 활성 성분이 결함이 없으면, 이 명령의 실행시마다 적어도 한 개의 결함이 없는 성분이 갱신되기 때문에, 진척이 달성될 수 있다. 첫 번째 활성 성분이 결함이 있으면, 이미 행해진 원자 갱신의 반복 위험성이 존재하지 않기 때문에, 운영체계에 대한 트랩이 기동되어 결함을 해결하고 명령을 다시 시도할 수 있다.
일부 하드웨어 구현은 임의의 수의 AMU 요구가 주어진 명령에 응답하여 외부 AMU 에이전트(100)에 발행되도록 허용한다. 이 경우, AMU 유닛(85)은 가능한한 많은 수의 어드레스 벡터 Zb의 성분에 대해 요구를 발행한다. 따라서, 결함이 검출되지 않으면, 마스크 값 Pg에 의해 표시된 각각의 활성 성분에 대해 요구가 발행된다. 적어도 한 개의 성분에 대해 결함이 검출되면, 결함이 검출되었던 결함이 있는 성분의 앞에 있는 모든 낮은 번호의 성분들에 대해 요구가 발행된다.
그러나, 다른 실시예에서는, 주어진 명령에 AMU 에이전트(100)에게 발행될 수 있는 최대수의 AMU 요구가 존재한다. 특정한 수로 요구들의 수를 제한하는 것은 AMU 에이전트(100)의 하드웨어를 단순화할 수 있다. 특정한 명령이 최대 AMU 요구보다 많은 요구를 하면, AMU 유닛(85)은, 대응하는 어드레스가 실제로 AMU(90)에 결함을 유발하지 않더라도, 최대값을 넘는 추가적인 AMU 요구를 요구하는 다음의 성분을 결함이 있는 것으로 판정한다. 그후, DDR(79)이 이 성분을 첫 번째 결함을 일으키는 성분으로 표시하도록 갱신된 후, 결함을 방지하기 위해 제공된 동일한 소프트웨어 루프가 벡터 AMU 명령의 반복을 기동하여, 그후의 사이클에서 이 성분과 그후의 성분들에 대한 원자 메모리 갱신 연산을 기동할 수 있다. 예를 들어, 일부의 더 간단한 구현은 심지어 벡터 AMU 명령의 임의의 주어진 실행에 대한 벡터의 첫 번째 활성 성분만을 처리하는 것을 선택할 수 있으며, 나머지 성분들을 FFR(79)에서 결함이 있는 것으로 항상 표기하여, 각각의 성분들에 대한 갱신들 모두가 명령의 각 반복에 응답하여 행해지고 있는 한 개의 갱신과 시리즈화되게 할 수 있다. 소프트웨어 관점에서, 이와 같은 접근방법은 (줄어든 성능 이외에) 프로그래머에게 보이지 않지만, 이와 같은 접근방법은 AMU 에이전트(100)의 하드웨어 오버헤드를 줄이는데 도움이 될 수 있다.
전술한 실시예에서는, 어드레스 벡터의 활성 성분들은 최하위 성분(예를 들어, 활성인 경우에 성분 0)으로 시작하고 최상위 성분(예를 들어, 전술한 8 성분 벡터 예에서는 성분 7)으로 끝나는 AMU 유닛(85)에 의해 시퀀스로 고려된다. 그러나, 최상위 성분으로부터 최하위 성분으로 진행하거나, 임의의 시퀀스를 사용하는 것과 같이, 다음 시퀀스로 성분들을 고려할 수도 있다. 따라서, 어떤 성분이 시퀀스 내의 첫 번째 활성 성분인지 판정하는 다른 방법이 존재한다. 전술한 예는 설명을 간단히 하기 위해 8 성분 벡터를 나타내었지만, 이 기술은 임의의 벡터 길이로 구현할 수도 있다.
도 6은 벡터 AMU 명령의 처리를 나타낸 흐름도이다. 스텝 200에서는, 벡터 AMU 명령이 실행되고 있는지 아닌지 판정한다. 실행되고 있지 않으면, 이 명령은 실행 유닛들 30, 35, 80, 40 중에서 한 개에 의해 다른 방식으로 처리된다. 벡터 AMU 명령이 실행되면, 스텝 202에서 AMU 유닛(85)은 어드레스 벡터의 첫 번째 활성 성분이 결함 상태를 유발하는지 아닌지 판정한다. 결함 상태를 유발하는 경우에는, 스텝 204에서 실행할 대응하는 결함처리 루틴을 기동하는 예외신호 또는 인터럽트 신호를 발생하는 것과 같이, 결함처리 응답이 기동된다. 예를 들어, 결함처리 루틴은 운영체계에 의해 정의될 수 있다. 그후, 이 명령의 처리를 종료한다.
한편, 첫 번째 활성 성분이 결함을 기동하지 않은 경우에는, 스텝 206에서 AMU 유닛(85)은 외부 AMU 에이전트(100)에게 AMU 요구를 발행하여 어드레스 벡터의 첫 번째 활성 성분에서 지정된 값에 근거하여 어드레스가 결정되는 메모리 위치에 대한 원자 갱신을 요구한다. 예를 들어, 목표 메모리 어드레스는 기존 어드레스에 벡터의 첫 번째 활성 성분에 의해 지정된 오프셋을 가산하여 결정될 수 있다. 이와 달리, 목표 어드레스는 어드레스 벡터의 성분에 의해 직접 지정될 수도 있다.
스텝 208에서, AMU 유닛(85)은 처리할 다른 활성 성분이 존재하는지 아닌지 판정한다. 존재하지 않는 경우에는, 현재 명령의 처리를 종료한다. 다른 활성 성분이 존재하면, 스텝 210에서, AMU 유닛(85)은 어드레스 벡터의 다음 활성 성분이 결함을 유발하는지 여부를 판정한다. 예를 들어, 이것은 대응하는 어드레스를 계산하고 그것을 MMU(90)에서 참조함으로써 판정할 수 있다. 다음 활성 성분에 의해 결함이 유발되는 경우, 스텝 212에서 결함처리 응답이 기동되지 않지만, 그 대신에 AMU 유닛(85)은 FFR(79)을 갱신하여 어떤 성분이 결함을 유발하였는지 식별한다. 예를 들어, 전술한 것과 같이, AMU 유닛(85)은 벡터의 다음 활성 성분과 그후의 성분들에 대응하는 FFR의 비트들을 소거한다. 그후, 명령의 처리를 종료한다. 다음 활성 성분이 결함을 유발하지 않았으면, 스텝 212에서 스텝 206과 유사하게 다음 활성 성분에 대응하는 어드레스에 대해 또 다른 AMU 요구를 발행한다. 그후, 스텝 208로 처리를 되돌려, 처리할 다른 활성 성분이 존재하는지 아닌지 고려한다.
따라서, 도 6에 도시된 것과 같이, 첫 번째 활성 성분과 관련된 결함이 존재하는 경우에만 스텝 204에서 결함처리 응답이 기동되고, 다른 성분들에 대해 결함이 발생하면 이것을 금지한다. 또한, 결함이 발생할 때, 이 성분과 그후의 성분들에 대한 AMU 요구가 금지된다. 따라서, AMU 요구의 발행은, 이전에 고려된 성분 모두가 결함을 유발하지 않은 것을 필요로 한다. 이에 따라, 벡터 AMU 명령이 그후에 안전하게 반복될 수 있으며, 반복된 벡터 AMU 명령의 마스크 또는 어드레스 벡터가 FFR 정보에 근거하여 갱신됨으로써, 그후의 시도에 대한 첫 번째 활성 성분이 이전에 결함을 유발한 성분이 된다.
전술한 것과 같이, 스텝 210에서는, MMU(90)가 어드레스 변환 또는 보호 결함을 발생하지 않더라도, 최대 수의 AMU 요구들이 현재의 명령에 응답하여 이미 발행된 경우에는, 다음의 활성 성분들이 결함을 유발하는 것으로 생각할 수 있다.
도 7은 사용될 수 있는 가상머신 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하기 위한 장치 및 방법에 관해 본 발명을 구현하지만, 하드웨어 장치의 소위 가상머신 구현을 제공하는 것도 가능하다. 이들 가상머신 구현은 가상머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 실행하는 호스트 프로세서(530) 상에서 실행된다. 일반적으로, 합당한 속도에서 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서가 필요하지만, 이와 같은 접근방법은, 호환성이나 재사용 이유로 인해 다른 프로세서에 대해 네이티브한 코드를 실행하려는 요구가 있을 때 등과 같은, 특정한 상황에서 정당화된다. 가상머신 프로그램(510)은 가상머신 프로그램(510)에 의해 모델화되고 있는 장치인 실제 하드웨어에 의해 제공되는 응용 프로그램 인터페이스와 동일한 응용 프로그램(500)에 대한 응용 프로그램 인터페이스를 제공한다. 따라서, 전술한 메모리 액세스의 제어를 포함하는 프로그램 명령은 가상머신 프로그램(510)을 사용하여 응용 프로그램(500) 내에서 실행되어, 가상머신 하드웨어와의 상호작용을 모델화한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (19)

  1. 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 기동하는 처리회로를 구비하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고,
    상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고,
    상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 처리회로는 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 원자 메모리 갱신 연산을 금지하도록 구성되고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 상기 처리회로는 결함처리 응답을 기동하도록 구성되고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 처리회로는, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하도록 구성된 장치.
  2. 제 1항에 있어서,
    상기 어드레스 벡터는 상기 어드레스 벡터의 어떤 데이터 성분들이 활성 데이터 성분들인지를 나타내는 마스크와 관련된 장치.
  3. 제 2항에 있어서,
    상기 처리회로는, 상태 정보에 근거하여, 적어도 한 개의 추가적인 명령에 응답하여, 벡터 원자 메모리 갱신 명령의 실행하려는 그후의 시도에 대해 새로운 어드레스 벡터와 새로운 마스크 중에서 적어도 한개를 생성하는 장치.
  4. 제 3항에 있어서,
    상기 처리회로는, 상기 적어도 한 개의 추가적인 명령에 응답하여, 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분으로서 표시된 상기 결함을 일으키는 활성 데이터 성분을 갖는 새로운 마스크를 생성하는 장치.
  5. 제 3항에 있어서,
    상기 처리회로는, 상기 적어도 한 개의 추가적인 명령에 응답하여, 상기 어드레스 벡터 내부의 상기 결함을 일으키는 활성 데이터 성분과 동일한 값을 갖는 상기 새로운 어드레스 벡터의 첫 번째 활성 데이터 성분을 갖는 상기 새로운 어드레스 벡터를 생성하는 장치.
  6. 제 1항 내지 제 5항 중 어느 한 항에 있어서,
    상기 상태 정보는, 상기 소정의 시퀀스 내부의 상기 결함을 일으키는 활성 데이터 성분 앞에 있는 적어도 한 개의 데이터 성분에 대해 제1 값을 갖는 결함 표시와, 상기 소정의 시퀀스에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대해 제2 값을 갖는 결함 표시를 포함하는 결함 마스크를 포함하는 장치.
  7. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    상기 첫 번째 활성 데이터 성분에 근거하여 결정된 어드레스에 대해 결함 상태가 검출되지 않을 때, 상기 처리회로는 상기 소정의 시퀀스 내부의 상기 결함을 일으키는 활성 성분 앞에 있는 상기 어드레스 벡터의 각각의 활성 데이터 성분에 대해 행해지는 상기 원자 메모리 갱신 연산을 기동하도록 구성된 장치.
  8. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    상기 처리회로는 상기 벡터 원자 메모리 갱신 명령에 응답하여 최대 N개의 원자 메모리 갱신 연산을 기동하도록 구성되고, 상기 어드레스 벡터의 상기 활성 데이터 성분들이 N개보다 많은 원자 메모리 갱신 연산들이 실행되도록 요구할 때, 상기 처리회로는, (N+1)번째 원자 메모리 갱신 연산을 요구하는 상기 소정의 시퀀스 내부의 특정한 활성 데이터 성분이 상기 특정한 활성 데이터 성분의 값에 무관하게 상기 결함을 일으키는 활성 데이터 성분이라고 판정하도록 구성된 장치.
  9. 제 1항 내지 제 8항 중 어느 한 항에 있어서,
    상기 소정의 시퀀스 내부의 상기 첫 번째 활성 데이터 성분은 상기 어드레스 벡터의 최하위 활성 데이터 성분을 포함하는 장치.
  10. 제 1항 내지 제 9항 중 어느 한 항에 있어서,
    상기 결함 상태는 어드레스 변환 결함 또는 메모리 보호 결함을 포함하는 장치.
  11. 제 1항 내지 제 10항 중 어느 한 항에 있어서,
    상기 결함처리 응답은 결함처리 루틴의 실행을 기동하는 것을 포함하는 장치.
  12. 제 1항 내지 제 11항 중 어느 한 항에 있어서,
    각각의 원자 메모리 갱신 연산에 대해, 상기 메모리 위치의 어드레스는 기본 어드레스에 대해 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 의해 지정된 오프셋을 가산한 결과에 해당하는 장치.
  13. 제 1항 내지 제 12항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 원자 메모리 갱신 연산을 행하는 메모리 갱신회로를 구비하고,
    상기 벡터 원자 메모리 갱신 명령에 응답하여, 상기 처리회로는 상기 메모리 갱신회로에 요구를 발행함으로써 상기 적어도 한 개의 원자 메모리 갱신 연산을 기동하도록 구성된 장치.
  14. 제 13항에 있어서,
    상기 처리회로에 의해 액세스하기 위한 데이터를 기억하는 적어도 한 개의 캐시를 구비하고,
    적어도 한가지 종류의 벡터 원자 메모리 갱신 명령에 대해, 상기 메모리 갱신회로는, 상기 메모리 위치로부터 상기 적어도 한 개의 캐시 내부에 데이터를 포드하지 않고, 메모리 내부의 상기 메모리 위치에 직접 상기 원자 갱신을 행하도록 구성된 장치.
  15. 제 1항 내지 제 14항 중 어느 한 항에 있어서,
    상기 메모리 위치에 대한 상기 원자 갱신은,
    상기 메모리 위치에 기억된 값에 특정한 값을 가산하는 것,
    상기 메모리 위치에 기억된 값으로부터 특정한 값을 감산하는 것,
    상기 메모리 위치에 기억된 값과 적어도 한 개의 추가적인 값에 대해 비트 단위의 논리 연산을 행하는 것,
    상기 메모리 위치에 기억된 이전 값과 적어도 한 개의 추가적인 값의 최소값 또는 최대값으로 상기 메모리 위치를 설정하는 것, 및
    상기 메모리 위치에 기억된 이전 값이 소정의 조건을 만족하는 경우 상기 메모리 위치에 기억된 값을 갱신하는 것
    중에서 적어도 한 개를 포함하는 장치.
  16. 제 1항 내지 제 15항 중 어느 한 항에 있어서,
    상기 원자 메모리 갱신 연산은,
    상기 원자 갱신 전에 상기 메모리 위치에 기억된 이전 값, 및
    상기 원자 갱신 후에 상기 메모리 위치에 기억된 새로운 값
    중에서 적어도 한 개를 레지스터 또는 캐시에 로드하는 것을 포함하는 장치.
  17. 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 실행하는 실행수단을 구비하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고,
    상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고,
    상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 실행수단은 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 상기 원자 메모리 갱신 연산을 금지하도록 구성되고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 상기 실행수단은 결함처리 응답을 기동하도록 구성되고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 실행수단은, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하도록 구성된 데이터 처리장치.
  18. 적어도 한 개의 활성 데이터 성분을 포함하는 복수의 데이터 성분들을 포함하는 어드레스 벡터를 식별하는 벡터 원자 메모리 갱신 명령에 응답하여 적어도 한 개의 원자 메모리 갱신 연산을 기동하는 단계를 포함하고, 각각의 원자 메모리 갱신 연산은 상기 어드레스 벡터의 대응하는 활성 데이터 성분에 근거하여 결정된 어드레스를 갖는 메모리 위치에 대한 원자 갱신을 포함하고, 상기 어드레스 벡터의 데이터 성분들은 소정의 시퀀스를 갖고,
    상기 어드레스 벡터의 결함을 일으키는 활성 데이터 성분에 근거하여 결정된 어드레스에 대한 결함 상태의 검출에 응답하여, 상기 소정의 시퀀스 내부에 있는 상기 결함을 일으키는 활성 데이터 성분과 후속하는 활성 데이터 성분에 대한 상기 원자 메모리 갱신 연산을 금지하고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 첫 번째 활성 데이터 성분일 때, 결함처리 응답을 기동하고,
    상기 결함을 일으키는 활성 데이터 성분이 상기 소정의 시퀀스의 상기 첫 번째 활성 데이터 성분 이외의 활성 데이터 성분일 때, 상기 결함처리 응답을 금지하고, 상기 어드레스 벡터의 어떤 데이터 성분이 상기 결함을 일으키는 활성 데이터 성분인지를 나타내는 상태 정보를 기억하는 데이터 처리방법.
  19. 데이터 처리장치에 의해 실행될 때, 청구항 1 내지 16 중 어느 한 항에 기재된 장치에 대응하는 명령 실행 환경을 제공하는 가상 머신을 제공하는 컴퓨터 판독가능한 기억매체에 기억된 컴퓨터 프로그램.
KR1020187023244A 2016-01-20 2016-12-15 벡터 원자 메모리 갱신 명령 KR20180100229A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1601036.5A GB2546510B (en) 2016-01-20 2016-01-20 Vector atomic memory update instruction
GB1601036.5 2016-01-20
PCT/GB2016/053948 WO2017125709A1 (en) 2016-01-20 2016-12-15 Vector atomic memory update instruction

Publications (1)

Publication Number Publication Date
KR20180100229A true KR20180100229A (ko) 2018-09-07

Family

ID=55488221

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187023244A KR20180100229A (ko) 2016-01-20 2016-12-15 벡터 원자 메모리 갱신 명령

Country Status (7)

Country Link
US (1) US10877833B2 (ko)
JP (1) JP6874264B2 (ko)
KR (1) KR20180100229A (ko)
CN (1) CN108475195B (ko)
GB (1) GB2546510B (ko)
TW (1) TWI733735B (ko)
WO (1) WO2017125709A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10216515B2 (en) * 2016-10-18 2019-02-26 Oracle International Corporation Processor load using a bit vector to calculate effective address
WO2019005169A1 (en) * 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MEMORY OPERATIONS READY FOR DATA
US10866890B2 (en) * 2018-11-07 2020-12-15 Arm Limited Method and apparatus for implementing lock-free data structures
US11593275B2 (en) * 2021-06-01 2023-02-28 International Business Machines Corporation Operating system deactivation of storage block write protection absent quiescing of processors

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60136872A (ja) * 1983-12-26 1985-07-20 Hitachi Ltd ベクトル処理装置
US6085334A (en) * 1998-04-17 2000-07-04 Motorola, Inc. Method and apparatus for testing an integrated memory device
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8959316B2 (en) * 2008-08-15 2015-02-17 Apple Inc. Actual instruction and actual-fault instructions for processing vectors
US8271832B2 (en) * 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US9003171B2 (en) * 2010-06-23 2015-04-07 Apple Inc. Page fault prediction for processing vector instructions
US9311094B2 (en) * 2011-01-21 2016-04-12 Apple Inc. Predicting a pattern in addresses for a memory-accessing instruction when processing vector instructions
GB2508312B (en) 2011-09-26 2020-04-22 Intel Corp Instruction and logic to provide vector load-op/store-op with stride functionality
CN102508776B (zh) 2011-11-03 2014-09-17 中国人民解放军国防科学技术大学 多线程交叉双精度短向量结构的评测激励自动构造方法
US9268626B2 (en) 2011-12-23 2016-02-23 Intel Corporation Apparatus and method for vectorization with speculation support
US9740549B2 (en) * 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9069701B2 (en) * 2012-12-11 2015-06-30 International Business Machines Corporation Virtual machine failover
US9715385B2 (en) * 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US20140244987A1 (en) * 2013-02-22 2014-08-28 Mips Technologies, Inc. Precision Exception Signaling for Multiple Data Architecture
WO2015054897A1 (zh) * 2013-10-18 2015-04-23 华为技术有限公司 数据存储方法、数据存储装置和存储设备
US9690582B2 (en) * 2013-12-30 2017-06-27 Intel Corporation Instruction and logic for cache-based speculative vectorization
US9396056B2 (en) 2014-03-15 2016-07-19 Intel Corporation Conditional memory fault assist suppression

Also Published As

Publication number Publication date
CN108475195B (zh) 2023-02-28
US10877833B2 (en) 2020-12-29
JP2019503009A (ja) 2019-01-31
TW201732590A (zh) 2017-09-16
WO2017125709A1 (en) 2017-07-27
JP6874264B2 (ja) 2021-05-19
GB201601036D0 (en) 2016-03-02
TWI733735B (zh) 2021-07-21
GB2546510B (en) 2018-09-26
GB2546510A (en) 2017-07-26
CN108475195A (zh) 2018-08-31
US20190026173A1 (en) 2019-01-24

Similar Documents

Publication Publication Date Title
US10853071B2 (en) Simulation of exclusive instructions
CN107735775B (zh) 用于使用与指针相关联的范围信息来执行指令的装置和方法
CN108351935B (zh) 用于控制有界指针的使用的设备及方法
TWI758319B (zh) 用於處置針對向量指令的元素間位址危害的裝置及資料處理方法
US11221951B1 (en) Skipping tag check for tag-checked load operation
KR20180100229A (ko) 벡터 원자 메모리 갱신 명령
US11119925B2 (en) Apparatus and method for managing capability metadata
KR102528701B1 (ko) 자격 도메인을 관리하는 장치 및 방법
TWI812750B (zh) 交易式比較及丟棄指令
US20240061682A1 (en) Load chunk instruction and store chunk instruction
US11113164B2 (en) Handling errors in buffers
JP7377807B2 (ja) リンク付き分岐命令の分岐ターゲット・バリアント
KR20190020036A (ko) 레지스터 복구 분기 명령
US20100017183A1 (en) Multiprocessor Development Environment
TWI801622B (zh) 用於處理保護標籤損失的裝置、方法、電腦程式、與儲存媒體
WO2008004006A1 (en) Multiprocessor development environment

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal