KR20180069846A - 벡터 산술 명령어에 대한 예외 조건의 처리 - Google Patents

벡터 산술 명령어에 대한 예외 조건의 처리 Download PDF

Info

Publication number
KR20180069846A
KR20180069846A KR1020187013379A KR20187013379A KR20180069846A KR 20180069846 A KR20180069846 A KR 20180069846A KR 1020187013379 A KR1020187013379 A KR 1020187013379A KR 20187013379 A KR20187013379 A KR 20187013379A KR 20180069846 A KR20180069846 A KR 20180069846A
Authority
KR
South Korea
Prior art keywords
vector
data element
active data
instruction
arithmetic
Prior art date
Application number
KR1020187013379A
Other languages
English (en)
Other versions
KR102628269B1 (ko
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 KR20180069846A publication Critical patent/KR20180069846A/ko
Application granted granted Critical
Publication of KR102628269B1 publication Critical patent/KR102628269B1/ko

Links

Images

Classifications

    • 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 or 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 or 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

처리 회로 30, 35는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어를 지원한다. 미리 결정된 시퀀스에서 제1 입력 벡터의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출되면, 처리 회로 30, 35는 적어도 하나의 응답 액션을 수행한다. 미리 결정된 시퀀스 내의 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 적어도 하나의 예외 조건이 검출되면, 처리 회로 30, 35는 적어도 하나의 응답 액션을 억제하고, 어떤 데이터 요소가 예외 조건을 트리거한 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장한다. 이것은 예외 조건의 발생을 추적하거나 및/또는 벡터 명령어들의 추측 실행을 지원하기 위한 하드웨어 리소스의 양을 줄이는 데 유용할 수 있다.

Description

벡터 산술 명령어에 대한 예외 조건의 처리
본 기술은 데이터 처리의 분야에 관한 것이다. 특히, 본 기술은 벡터 산술 명령어의 처리에 관한 것이다.
일부 데이터 처리 장치는 주어진 처리 동작이 결과 벡터의 해당 데이터 요소를 생성하도록 벡터의 각 데이터 요소에 대해 수행될 수 있는 벡터 처리를 지원할 수 있다. 이것은 주어진 수의 데이터 값을 처리하는 데 필요한 프로그램 명령어의 수를 줄이기 위해, 다수의 상이한 데이터 값이 단일 명령어로 처리될 수 있게 한다. 벡터 처리는 SIMD(single instruction, multiple data) 처리라고도 칭할 수 있다.
적어도 몇몇 예들은
복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대한 산술 연산을 수행하는 처리 회로를 구비하는 장치를 제공하고,
상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 처리 회로는 적어도 하나의 응답 액션을 수행하도록 구성되며,
적어도 하나의 예외 조건이 상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 검출되는 경우, 상기 처리 회로는 상기 적어도 하나의 응답 액션을 억제하고 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하도록 구성된다.
적어도 몇몇 예들은,
복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대한 산술 연산을 수행하는 수단을 구비하는 장치를 제공하고,
상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 수행 수단은 적어도 하나의 응답 액션을 수행하도록 구성되며,
적어도 하나의 예외 조건이 상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 검출될 때, 상기 수행 수단은 상기 적어도 하나의 응답 액션을 억제하고 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하도록 구성된다.
적어도 몇몇 예들은,
데이터 처리방법으로서,
복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대해 산술 연산을 수행하는 단계를 포함하고, 상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
상기 데이터 처리방법은,
상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 적어도 하나의 응답 액션을 수행하는 단계와,
상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 적어도 하나의 응답 액션을 억제하고, 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하는 단계를 더 포함하는, 데이터 처리 방법을 제공한다.
적어도 몇몇 예들은 데이터 처리 장치에 의해 실행될 때, 상술한 장치에 대응하는 명령어 실행 환경을 제공하는 가상 머신을 제공하는 컴퓨터 판독가능 기억매체에 기억된 컴퓨터 프로그램를 제공한다.
본 기술의 추가 국면, 특징 및 이점은 첨부 도면과 관련하여 판독되는 실시 예에 대한 다음의 설명으로부터 명백해질 것이다.
도 1은 벡터 처리를 지원하는 데이터 처리 장치의 예를 개략적으로 도시한 것이다.
도 2는 부동 소수점 상태 레지스터 및 부동 소수점 제어 레지스터의 예를 도시한 것이다.
도 3은 벡터 산술 명령어의 비 제1 오류 형태(non-first-faulting form)의 예를 도시한 것이다.
도 4는 예외 조건이 벡터의 제1 활성 요소에 대해 발생하는 벡터 산술 명령어의 제1 오류 형태의 예를 도시한 것이다.
도 5는 제1 활성 요소가 아닌 요소에 대해 예외 조건이 발생하는 벡터 산술 명령어의 제1 오류 형태의 예를 도시한 것이다.
도 6은 제1 오류 벡터 산술 명령어를 실행하기 위한 후속 시도에 대한 새로운 마스크를 생성하는 예를 도시한 것이다.
도 7은 제1 오류 벡터 산술 명령어를 실행하기 위한 후속 시도에 대한 새로운 입력 벡터를 생성하는 예를 도시한 것이다.
도 8은 벡터 산술 명령어의 비추측(non-speculative) 실행에 대한 의사 코드(pseudo code)의 예를 도시한 것이다.
도 9는 벡터 산술 명령어의 추측 실행에 대한 의사 코드의 예를 도시한 것이다.
도 10은 모든 활성 요소가 처리될 때까지 벡터 산술 명령어를 여러 번 실행하기 위한 루프의 예를 도시한 것이다.
도 11은 벡터 산술 명령어를 처리하는 방법을 도시하는 흐름도이다.
도 12는 부동 소수점 상태 레지스터에 대한 대안적인 레이아웃을 도시한 것이다.
도 13은 도 12의 상태 레지스터 레이아웃을 사용하여 벡터 산술 명령어의 추측 실행을 처리하기 위한 기술을 도시한 것이다.
도 14는 가상 머신 구현을 도시한 것이다.
지금부터는 몇 가지 구체적인 예가 설명될 것이다. 본 발명은 이러한 특정 예들에 제한되지 않음을 이해할 것이다.
처리 회로는 적어도 다수의 데이터 요소를 포함하는 제1 입력 벡터를 지정하는 적어도 제1 타입의 벡터 산술 명령어를 지원할 수 있다. 제1 타입의 벡터 산술 명령어 응답하여, 처리 회로는 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대한 산술 연산을 수행할 수 있다. 때때로, 제1 입력 벡터의 하나 이상의 활성 데이터 요소에 대해 수행된 산술 연산에 대해 예외 조건이 검출될 수 있다. 예를 들어, 예외 조건은 결과가 결과 값으로 표시될 수 있는 범위를 벗어났거나 오류가 발생했음을 나타낼 수 있다.
제1 입력 벡터의 데이터 요소는 미리 결정된 시퀀스를 갖는 것으로 간주될 수 있다. 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출되면, 처리 회로는 적어도 하나의 응답 액션을 수행할 수 있다. 그러나, 시퀀스 내의 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출되면, 처리 회로는 적어도 하나의 응답 액션을 억제하고 제1 입력 벡터의 어느 데이터 요소가 상기 예외 조건이 검출된 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장할 수 있다.
이 접근법은 몇 가지 이점을 제공할 수 있다. 우선, 검출된 예외 조건을 추적하고, 필요하면 적어도 하나의 응답 액션을 수행하는 것은, 처리 회로에 제공될 소정의 리소스을 필요로 할 수 있다. 수행되는 벡터 처리의 각 레인(lane)에 대해 개별적으로 이러한 리소스을 제공하는 것은 회로 면적의 관점 및 그러한 리소스을 관리하는 오버헤드(overhead)의 관점에서 비용이 많이들 수 있다. 실제로는, 예외 조건이 비교적 드물기 때문에 이러한 오버 헤드가 정당하지 않을 수 있다. 예외 조건이 시퀀스 내의 제1 활성 데이터 요소에 대해 수행될 때 응답 액션을 수행하지만 다른 데이터 요소가 예외 조건을 트리거하면 이를 억제함으로써, 예외 조건 처리가 벡터의 각 데이터 요소에 대해 이러한 리소스를 복제할 필요없이 단일 데이터 요소에 대응하는 단일 리소스 세트로 효과적으로 관리될 수 있다.
시퀀스 내의 다음 요소가 예외 조건을 트리거하면, 요소 식별 정보를 사용하여 오류가 발생한 요소가 제1 활성 데이터 요소인 벡터 산술 명령어의 실행을 다시 시작할 수 있다. 이러한 방식으로, 산술 명령어의 실행의 되풀이되는 반복은 벡터의 요소들을 통해 점차적으로 전방으로 진행을 할 수 있으며 어떤 예외 조건은 각 패스(pass)에 대하여 제1 활성 데이터 요소에 대한 단일 리소스 세트를 사용하여 추적되므로, 벡터 레인(vector lane)당 여러 리소스 세트가 필요하지 않다.
예를 들어, 제1 활성 데이터 요소에 대해 예외 조건이 검출되는 경우, 적어도 하나의 응답 액션은 어떤 예외 조건(들)이 발생했는지를 나타내기 위해 상태 레지스터를 갱신하는 것을 포함할 수 있다. 예를 들어, 상태 레지스터는 상이한 타입의 예외 조건을 나타내는 비트의 세트를 포함할 수 있으며, 응답은 검출된 예외 조건의 타입에 대한 적절한 비트를 설정하는 것을 포함할 수 있다. 제1 활성 데이터 요소에 대한 응답을 수행하지만 예외 조건을 트리거하는 다른 요소에 대한 응답을 수행하지 않으면, 한 세트의 예외 조건 표시 비트가 전체 벡터의 데이터 요소 간에 공유될 수 있고(예외 조건의 타입당 한 비트 사용), 모든 데이터 요소에 대해 발생한 예외 조건을 추적하기 위해 레인당 상태 비트 세트(per-lane sets of status bits)를 다수 제공할 필요가 없다. 이것은 더 작은 상태 레지스터를 사용하는 것뿐만 아니라 처리 회로 내에서 데이터 경로를 따라 운반되는 상태 플래그의 수를 줄이는 데에도 하드웨어의 복잡성을 크게 줄일 수 있다.
또한, 응답 액션은 예외 처리 루틴의 실행을 트리거하는 것을 포함할 수 있다. 예를 들어, 어떤 예외 조건이 발생하면 이것은 오퍼레이팅 시스템 또는 다른 제어 프로그램에 대한 트랩을 트리거할 수 있고, 그것은 예외 상황을 처리하기 위해 조치를 취할 수 있다. 따라서, 예외 조건이 시퀀스 내의 제1 활성 데이터 요소에 대해 감출되지만 다른 요소에 대해서는 검출되지 않으면 예외 처리 루틴이 실행된다.
일부 구현에 있어서는, 어떤 예외 조건은 시퀀스 내의 제1 활성 데이터 요소에 대해 검출된 경우에는 항상 예외 처리 루틴을 항상 트리거할 수 있다. 대안 적으로, 상이한 타입의 예외 조건에 대한 예외 처리 루틴의 실행을 트리거할지 여부를 나타내는 구성 정보를 지정하기 위해 구성 레지스터가 제공될 수 있다. 이 경우, 응답은 구성 레지스터 내의 구성 정보가, 예외 처리 루틴이 검출된 예외 조건의 타입에 대해 트리거되어야 한다고 지정하는 경우에만 예외 처리 루틴의 실행을 트리거하는 것을 포함할 수 있다.
일부 시스템은 벡터 연산의 추측 실행을 지원할 수 있는데, 여기서 주어진 조건은 벡터의 특정 요소를 처리해야 하는지 여부를 지배하지만 벡터 명령어는 관련 조건이 실제로 해결되기 전에 실행될 수 있다. 경우에 따라 연관된 조건은 다른 요소가 실제로 처리되어야 하는지 여부를 결정하기 위해, 벡터의 일부 요소에 대해 벡터 명령어를 실행한 결과에 의존할 수도 있다. 이러한 추측 실행을 허용하면 명령어를 실행하기 전에 정확히 어떤 요소가 처리되어야 하는지에 대한 지식이 필요한 시스템에 비해 코드를 벡터화하는 것이 더 효율적일 수 있다. 예를 들어, 이것은 벡터 처리가 동일한 프로그램 루프의 상이한 반복을 병렬로 처리할 때 종종 유용하며, 벡터 오퍼랜드(들)의 상이한 요소들은 동일한 루프의 상이한 반복에서 사용되거나 생성된 값들에 해당한다.
그러나, 벡터 산술 명령어의 추측 실행이 가능하면, 일단 관련된 조건이 해결되었을 때 처리되지 않아야 한다는 것이 나중에 판명될 때, 제1 입력 벡터의 데이터 요소들 중의 일부가 추론적으로 처리된다는 결과가 있을 수 있다. 이러한 요소로 인해 예외 조건이 검출되면, 실제로 이 동작이 먼저 수행되지 않아야 하는 경우(예를 들면, 상태 레지스터의 갱신 또는 예외 처리 루틴의 실행) 응답 액션이 취해질 수 있다. 벡터 처리의 잘못 추측된 레인으로 인해 그러한 부작용을 야기하는 것은 바람직하지 않다.
하나의 접근법은 상태 레지스터의 2가지 상이한 버전, 즉 하나의 추측 버전 및 하나의 비추측 버전을 유지한 다음 일단 추측 실행된 처리의 레인이 커밋(committed)된 후에 추측 버전에 근거하여 비추측 버전을 갱신하는 것일 수 있다. 그러나, 상태 레지스터의 추측 및 비추측 버전을 추적하는 데 추가 레지스터가 필요할 뿐만 아니라, 일단 추측이 해결되었으면 상태 표시의 커밋된 버전을 해결하기 위해 추가 명령어를 실행해야 하기 때문에 하드웨어 측면에서 비용이 많이들 수 있다. 위에서 논의된 기술을 사용함으로써, 일반적으로 시퀀스 내의 제1 활성 데이터 요소가 비추측 실행된 처리의 레인이기 때문에 추가 오버 헤드를 피할 수 있어 이 요소에 대하여 검출된 예외 조건에 대한 응답으로 응답 액션을 수행하는 것이 안전하다. 입력 벡터의 다른 요소에 대해, 이러한 요소가 예외 조건을 생성하더라도, 이것은 응답 액션을 트리거하지 않으므로, 이러한 처리의 레인이 잘못 추측된 것으로 나중에 판명되면 어떤 불리한 부작용도 발생하지 않았다. 따라서, 위에서 설명한 기술은 벡터 연산의 추측 실행을 보다 효율적으로 처리하는 데 도움이 된다.
입력 벡터의 활성 요소들은 상이한 방식으로 결정될 수 있다. 경우에 따라 입력 벡터의 모든 요소가 활성 요소로 간주될 수 있으므로, 어떤 데이터 요소가 활성 또는 비활성인지 정의하는 데이터가 없을 수 있다. 즉, 입력 벡터는 예측되지 않은 벡터일 수 있다. 이 경우, 제1 활성 요소는 단순히 벡터의 제1 요소일 수 있다(예를 들어, 소정 시퀀스가 최하위 요소로부터 최상위 요소까지 연장되는 것으로 취급되는 경우 최하위 요소).
그러나, 더 유연한 기법은 입력 벡터를 어떤 데이터 요소가 활성 또는 비활성 데이터 요소인지 나타내는 마스크와 연관시키는 것일 수 있다. 이 경우, 제1 활성 데이터 요소은 입력 벡터의 제1 요소 이외의 요소일 수 있다.
시퀀스 내의 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 예외 조건이 검출되면, 요소 식별 정보는 후속 시도를 위한 벡터 산술 명령어와 연관된 마스크를 수정하고 명령어를 사용하거나 후속 시도를 위한 입력 벡터 자체를 수정하는 데 사용될 수 있다. 예외 조건을 트리거한 주어진 요소가 시퀀스 내의 제1 활성 데이터 요소가 되도록(예를 들면, 선행 요소를 비활성으로서 표시할 수 있도록) 마스크가 갱신될 수 있거나, 새로운 제1 입력 벡터의 제1 활성 데이터 요소가 명령어를 실행하기 위한 이전의 시도에 대한 제1 입력 벡터 내의 주어진 활성 데이터 요소와 동일한 값을 갖도록 제1 입력 벡터의 요소들의 위치가 수정될 수 있다. 프로그래머는, 예를 들어, 벡터 산술 명령어를 둘러싸는 루프에 하나 이상의 명령어를 포함하여, 벡터 산술 명령어를 실행하여 모든 요소가 성공적으로 처리되었는지 여부를 확인하는 한 번의 시도로 생성된 요소 식별 정보를 검사할 수 있고, 요소 식별 정보가 주어진 활성 데이터 요소가 예외 조건을 트리거한 것으로 식별하는 경우, 마스크 또는 입력 벡터는 다른 시도를 위해 루프 백(loop back)하기 전에 수정될 수 있다. 마스크 또는 입력 벡터는 다른 시도를 반복하기 전에 수정될 수 있다. 후속 시도시에, 주어진 활성 데이터 요소가 이제 제1 활성 데이터 요소가될 수 있으므로 예외 조건이 여전히 발생하면 예외 조치가 처리되도록 응답 액션을 취할 수 있다. 따라서, 명령어는 예외 조건을 처리하기 위해 단일 리소스 세트만을 사용하여 단계적으로 입력 벡터의 요소들을 통해 전방으로 진행할 수 있다.
요소 식별 정보에 근거하여 제1 입력 벡터를 갱신하는 경우, 이것은 주어진 활성 데이터 요소가 제1 활성 데이터 요소(및 주어진 활성 데이터 요소 다음의 요소도 주어진 활성 데이터 요소에 대응하는 요소의 위치를 따라 이동한다)가 되도록 제1 입력 벡터를 시프트함으로써 달성될 수 있다. 대안으로, 벡터 산술 명령어가 캐시 또는 메모리로부터 로딩된 데이터로 제1 입력 벡터(또는 제1 입력 벡터를 생성하는데 사용된 이전 벡터)를 채우는 초기 벡터 로드(load) 명령어를 따르는 경우, 제1 입력 벡터는, 벡터 로드 명령어의 어드레스를 요소 식별 정보에 의해 명시된 것처럼 원래의 벡터 내의 주어진 활성 데이터 요소의 위치에 대응하는 양만큼 조정하고 벡터 연산 명령어 자체뿐만 아니라 벡터 로드 명령어를 반복함으로써, 효과적으로 갱신될 수 있다. 이러한 방식으로, 다음에 벡터 산술 명령어가 실행될 때, 벡터 로드 명령어는 이전의 오류 데이터 요소에 대응하는 데이터를 제1 활성 요소에 대응하는 벡터 내의 위치에 로드될 것이다.
요소 식별 정보는 다양한 방식으로 표현될 수 있다. 경우에 따라 그것은 예외 조건을 트리거한 주어진 활성 데이터 요소의 요소 수의 표시일 수도 있다. 그러나, 특히 유용한 표현은 시퀀스 내의 주어진 활성 데이터 요소에 선행하는 적어도 하나의 데이터 요소에 대한 제1 값을 갖는 하나 이상의 표시와, 시퀀스 내의 주어진 활성 데이터 요소 및 그 다음의 활성 데이터 요소에 대한 제2 값을 갖는 하나 이상의 표시를 포함하는 요소 식별 마스크를 제공하는 것일 수 있다. 따라서, 요소 식별 마스크는 기본적으로 오류 없이 이미 처리된 부분과 여전히 오류를 일으킬 수 있는 부분으로 벡터를 분할할 수 있다. 이러한 요소 식별 마스크는 명령어를 실행하려는 다음 시도를 위해 새로운 마스크가 보다 효율적으로 생성될 수 있게 할 수 있다. 또한, 일련의 데이터 처리 동작을 구현하기 위해 실행되는 몇몇 성공적인 명령어가 있을 수 있기 때문에 이 타입의 요소 식별 마스크가 유용할 수 있고 이러한 명령들 중 어느 하나가 주어진 요소에 대한 예외 조건을 만나면 그 다음 명령어에서 처리의 해당 레인이 수행되는 것을 정지시키는 것을 원할 수 있다. 따라서, 전술 한 타입의 요소 식별 마스크는 그 다음 명령어에 대한 마스크들을 생성하는 데도 유용할 수 있다.
입력 벡터에 대한 요소들의 미리 결정된 시퀀스는 어떤 임의의 시퀀스일 수 있다. 그러나, 종종 시퀀스 내의 제1 활성 데이터 요소가 제1 입력 벡터의 최하위 활성 데이터 요소인 것이 편리할 수 있다. 시퀀스 내의 그 다음 요소들은 최상위 활성 데이터 요소까지 중요성을 증가시키는 데 있어서 입력 벡터의 데이터 요소들에 대응할 수 있다. 이 접근법은 벡터화된 코드가 실제로 기록되는 방식에 가장 잘 매핑될 수 있다. 그럼에도 불구하고, 최상위 활성 데이터 요소로 시작하여 최하위 요소로 끝나는 시퀀스와 같은 다른 시퀀스가 사용될 수 있다.
시퀀스의 제1 활성 데이터 요소 이외의 하나 이상의 활성 데이터 요소가 예외 조건을 만나면, 어떤 경우에는 요소 식별 정보가 이러한 각 요소를 식별할 수 있다. 대안으로, 요소 식별 정보는 예외 조건을 트리거하는 시퀀스 내의 다음 요소(제1 활성 데이터 요소 후에)만을 식별 할 수 있고, 나중에 요소가 예외 조건을 야기하더라도 다른 요소를 식별하지 않을 수 있다.
일부 구현 예에서, 처리 회로는 상기 논의된 방식으로 벡터 산술 명령어를 항상 처리할 수 있으며, 여기서는 제1 활성 데이터 요소가 예외 조건을 트리거하는 경우에만 응답 액션이 취해진다.
그러나, 다른 구현 예들은 또한 제1 활성 요소 또는 그 다음 요소에 대하여 예외 조건이 검출되었는지 여부에 관계없이, 벡터의 임의의 활성 데이터 요소에 대한 예외 조건을 검출하는 것에 응답하여 처리 회로가 적어도 하나의 응답 액션을 수행하는 제2 타입의 벡터 산술 명령어를 지원할 수 있다. 제1 및 제2 타입의 벡터 산술 명령어는 (예를 들어, 상이한 연산코드와) 완전히 상이한 명령어일 수 있거나, 명령어가 제1 타입 또는 제2 타입인지 여부를 지정하는 명령 인코딩 내의 필드를 갖는 공통 명령어 연산코드에 대응할 수 있다. 대안으로, 제1 및 제2 타입의 벡터 산술 명령어는 동일한 인코딩을 가질 수 있지만, 제1 타입의 벡터 산술 명령어는 처리 회로의 제1 모드에서 실행되는 벡터 산술 명령어일 수 있고, 제2 타입의 벡터 명령어는 처리 회로의 제2 모드에서 실행되는 벡터 연산 명령어일 수 있다. 예를 들어, 처리 회로가 현재 제1 또는 제2 모드에 있는지를 특정하는 제어 레지스터가 있을 수 있다.
제1 타입의 벡터 산술 명령어가 제1 활성 요소가 예외 조건을 만났을 때만 응답 액션을 트리거하고, 제2 타입이 임의의 활성 요소에 대한 응답 액션을 트리거 할 수 있는, 제1 및 제 2 타입의 벡터 산술 명령어를 제공하는 것은, 프로그래머가 실행될 코드의 속성에 따라 대체 타입의 명령어 사이에서 선택하는 것을 가능하게 하는 데 유용할 수 있다. 예를 들어, 코드가 상술한 바와 같이 벡터 연산의 추측 실행을 필요로 하면, 어쨌든 수행될 필요가 없는 벡터 레인에 응답하여 부작용을 부주의하게 트리거하는 것을 피하기 위해 제1 타입이 선택될 수 있다. 한편, 비추측 코드에 대해서는, 제2 타입의 벡터 산술 명령어가 벡터의 각 요소를 통해 진행하기 위해 여러 번의 반복을 필요로 하지 않을 수 있기 때문에 성능을 향상시키기 위해 제2 타입의 벡터 산술 명령어를 선택할 수 있다. 따라서, 양쪽 타입의 명령어를 제공하는 것은, 올바른 동작과 성능 간에 더 나은 균형을 제공할 수 있다.
일부 구현 예에 있어서, 제2 타입의 벡터 산술 명령어 대해서는, 제1 입력 벡터의 임의의 요소에 대해 검출되는 예외 조건에 대한 응답은, 어떤 요소가 예외 조건을 트리거했는지 및 어떤 타입의 예외가 검출되었는지에 대한 정확한 표시를 기록하는 것을 포함할 수 있다. 그러나, 이것은 상당한 오버헤드를 필요로 할 수 있다. 실제로는, 예외 조건이 드물기 때문에 이 오버헤드가 정당하지 않을 수 있다. 대신에, 제2 타입의 벡터 산술 명령어는 어떤 특정 요소가 어떤 특별한 타입의 예외 조건을 트리거했는지를 구별하지 않고, 입력 벡터의 임의의 활성 데이터 요소에 대해 발생한 예외 조건의 타입 중 하나의 표시를 제공하기 위해 상태 레지스터를 갱신하는 것을 포함하는 응답 액션을 트리거할 수 있다. 많은 경우에, 이것은 예외 처리 루틴(예를 들면, 오퍼레이팅 시스템 등)이 예외 조건을 해결하는 방법을 결정하는 것을 허용하기에 충분할 수 있다.
예외 조건은 산술 연산에 의해 트리거되는 임의의 타입의 조건일 수 있으며, 이는 조사가 더 필요할 수도 있는 비정상적인 결과 또는 속성을 나타낸다. 본 기술은 특히 산술 연산이 부동 소수점 연산을 포함하는 명령어에 유용한다. 부동 소수점 산술을 위한 IEEE 754 표준은 부동 소수점 연산을 위해 추적되어야 하는 다수의 예외 조건을 지정한다. 예를 들면, 이러한 예외적인 조건에는 오버플로, 언더플로, 부정확, 무효 연산 또는 0으로 나누기 중 하나 이상이 포함될 수 있다. 부동 소수점 연산에 대해 추적될 수 있는 또 다른 종류의 예외 조건은 주어진 산술 연산에 대한 입력이 비정규인지 여부일 수 있다(즉, 그것의 시그니피컨드(significand)는 정상적인 부동 소수점 값처럼 1로 시작하는 것보다는, 적어도 하나의 선두의 0으로 시작한다). 추적해야 할 예외 조건이 비교적 많기 때문에, 벡터의 모든 레인에 대해 이들을 기록하는 것은 매우 비용이 많이 들어서 위에서 설명한 기술은 예외 조건의 각 타입별로 하나씩 단일 세트의 비트가 벡터 레인 사이에서 공유되도록 허용함으로써 하드웨어 리소스를 크게 절약할 수 있다.
본 기술은 비부동 소수점 연산에도 사용될 수 있다. 예를 들어, 정수 연산(integer operation)의 경우, 일부 명령어는 산술 연산의 결과가 특정 최소 및 최대 바운드 내에 있도록 제약되는 포화 산술 연산을 수행할 수 있다. 이 경우, 포화 산술 연산에서 생성된 값의 포화가 발생할 때 예외 조건이 생성될 수 있다. 즉, 산술 연산이 최대 바운드보다 크거나 포화의 최소 바운드보다 작은 결과를 생성하면, 예외 조건이 트리거될 수 있다.
예를 들어, 벡터 산술 명령어에 응답하여 수행된 산술 연산은 덧셈, 뺄셈, 곱셈, 나눗셈, 곱셈-덧셈, 곱셈-뺄셈, 제곱근 등일 수 있다. 산술 연산은 또한 부동 소수점 값의 상이한 정밀도 간의 변환 또는 부동 소수점 값과 정수 값 간의 변환과 같은, 주어진 데이터 값의 표현을 상이한 형태로 변환하는 변환 동작일 수 있다. 변환 명령어와 같은 일부 명령어의 경우, 제1 입력 벡터가 명령어의 유일한 입력 벡터일 수 있다. 덧셈, 뺄셈 또는 곱셈 명령어와 같은 다른 명령어의 경우, 데이터 요소가 제1 입력 벡터의 데이터 요소와 결합되는 제2 입력 벡터가 있을 수도 있다. 일부 명령어는 3개 이상의 입력 벡터(예를 들면, 곱셈-덧셈)를 만족시킬 수도 있다.
본 기술은 또한 가상 머신을 사용하여 구현될 수 있다. 가상 머신은 호스트 장치에 의해 실행될 때 명령어를 실행하기 위한 명령어 실행 환경을 제공함으로써 호스트 장치가 프로그래머 관점에서 마치 위에서 논의된 회로를 갖는 것처럼 보인다. 호스트 프로세서 자체는 실제로 그 회로를 가질 필요가 없으며, 대신에 가상 머신의 코드는 그러한 회로가 제공된 것처럼 명령어를 실행하기 위해 호스트 하드웨어를 제어한다. 예를 들어, 가상 머신은 저장 매체에 저장된 컴퓨터 프로그램일 수 있다. 저장 매체는 일시적이지 않을 수 있다.
도 1은 기술된 실시 예의 기술들이 사용될 수 있는 시스템의 블록도이다. 도 1에 나타낸 예에서, 시스템은 파이프라인 프로세서의 형태를 취한다. 명령어들은 페치 회로(10)에 의해 (통상적으로 레벨 2 캐시(50)와 같은 하나 이상의 추가 캐시 레벨을 통해 메모리(55)에 결합되는) 명령 캐시(15)로부터 페치되고, 그곳으로부터 그들은 명령어들에 의해 요구되는 연산을 수행하는 파이프라인 프로세서 내의 다운스트림 실행 리소스를 제어하기 위한 적절한 제어 신호를 생성하기 위해서, 각 명령어를 디코딩하는 디코드 회로(20)를 통해서 전달된다. 디코딩된 명령어를 형성하는 제어 신호들은 파이프라인 프로세서 내의 하나 이상의 실행 파이프라인 30, 35, 40, 80에 발행하기 위한 발행 스테이지 회로(25)로 전달된다. 실행 파이프라인 30, 35, 40, 80은 집합적으로 처리 회로를 형성하는 것으로 고려될 수 있다.
발행 스테이지 회로(25)는 연산들에 의해 요구되는 데이터 값들이 저장될 수 있는 레지스터들(60)에 대한 액세스를 갖는다. 특히, 벡터 연산에 대한 소스 오퍼랜드가 벡터 레지스터(65) 내에 저장될 수 있고, 스칼라 연산에 대한 소스 오퍼랜드가 스칼라 레지스터(75)에 저장될 수 있다. 또한, 하나 이상의 술어(predicates)(마스크)가, 특정 벡터 연산을 수행할 때 처리된 벡터 오퍼랜드의 데이터 요소에 대한 제어 정보로서 사용하기 위해서, 술어 레지스터(70)에 저장될 수 있다. 하나 이상의 스칼라 레지스터(5)는 또한 특정 벡터 연산의 수행 중에 사용하기 위해 그러한 제어 정보를 유도하는데 사용된 데이터 값을 저장하는 데 사용될 수 있다.
또한, 레지스터(60)는 처리 파이프라인의 동작을 제어하기 위한 구성 정보 또는 처리 중에 발생하는 조건 또는 명령어의 결과의 특성을 나타내는 상태 정보와 같은 다양한 제어 정보를 제공하기 위한 다수의 제어 레지스터(76)를 포함할 수 있다. 예를 들어, 제어 레지스터(76)는, 이하에 상세히 설명되는, 부동 소수점 구성 레지스터(FPCR)(77), 부동 소수점 상태 레지스터(FPSR)(78) 및 제1 오류 레지스터(FFR)(79)를 포함할 수 있다.
소스 오퍼랜드 및 어떤 관련된 제어 정보는 경로(47)를 통해 발행 스테이지 회로(25)로 라우팅될 수 있어서, 각 디코딩된 명령어를 구현하기 위해 수행될 동작(들)을 식별하는 제어 신호들과 함께 적절한 실행 유닛으로 디스패치될 수 있다. 도 1에 도시된 다양한 실행 유닛 30, 35, 40, 80은 벡터 오퍼랜드에 대해 동작하기 위한 벡터 처리 유닛으로 가정되지만, 장치에 의해 지원되는 어떤 스칼라 연산을 처리하기를 원한다면 별도의 실행 유닛(도시되지 않음)이 제공될 수 있다.
다양한 벡터 연산을 고려하면, 산술 연산은 예를 들어 산술 연산 또는 논리 연산이 가능하도록 하기 위해, 필요한 소스 오퍼랜드(및 술어와 같은 임의의 제어 정보)와 함께 산술 논리 유닛(ALU)(30)으로 전달될 수 있고, 그 결과 값은 전형적으로 벡터 레지스터 뱅크(65)의 지정된 레지스터에 저장하기 위한 목적지 오퍼랜드로서 출력된다.
ALU(30)에 부가하여, 부동 소수점 유닛(FPU)(35)은 디코딩된 부동 소수점 명령어 응답하여 부동 소수점 연산을 수행하기 위해 제공될 수 있고, 벡터 순열 유닛(80)은 벡터 오퍼랜드에 대하여 특정 순열 연산을 수행하기 위해 제공될 수 있다. 또한, 로드/저장 유닛(LSU)(40)은 (데이터 캐시(45) 및 레벨 2 캐시(50)와 같은 캐시의 어떤 중간 추가 레벨을 통해) 메모리(55)로부터 레지스터 세트(60) 내의 지정된 레지스터로 데이터 값들을 로드하기 위한 로드 동작을 수행하기 위해, 또 이들 레지스터로부터 메모리(55)로 다시 데이터 값들을 저장하기 위한 저장 동작을 수행하기 위해 사용된다. 도 1에 도시되지 않은 다른 타입의 실행 유닛이 또한 제공될 수 있다는 것이 인식될 것이다.
도 1에 도시된 시스템은, 성능 향상을 목적으로, 명령어들의 시퀀스가 프로그램 순서대로 실행되는 순차(in-order) 처리 시스템이거나, 또는 다양한 명령어들이 실행되는 순서가 재정렬되도록 허용하는 비순차(out-of-order) 시스템일 수 있다. 본 기술분야의 당업자가 이해할 수 있는 바와 같이, 비순차 시스템에서, 추가 구조들(도 1에 명시적으로 도시되지 않음), 예를 들어 명령어들에 의해 지정된 아키텍처 레지스터들을, 레지스터 뱅크(60) 내의 물리적 레지스터들의 풀(pool)(물리적 레지스터들의 풀은 통상적으로 아키텍처 레지스터들의 수보다 크다)로부터 물리적 레지스터에 맵핑하는 레지스터 리네이밍(renaming) 회로를 제공함으로써, 특정 위험요소들이 제거될 수 있게 하여, 비순차 처리의 사용을 더 용이하게 한다. 또한, 비순차 실행을 추적하고, 다양한 명령어의 실행 결과가 순서대로 커밋되도록 허용하기 위해 일반적으로 재정렬 버퍼(reorder buffer)가 제공될 수 있다.
기술된 실시 예에서, 도 1의 회로는 벡터 레지스터(65)에 저장된 벡터 오퍼랜드에 대한 벡터 연산을 실행하도록 구성되며, 여기서 벡터 오퍼랜드는 복수의 데이터 요소를 포함한다. 이러한 벡터 오퍼랜드에 대해 수행된 특정 벡터 연산(산술 연산 등)에 대해 수행된 특정 벡터 연산의 경우, 필요한 연산은 벡터 오퍼랜드 내의 다양한 데이터 요소에 병렬로(또는 반복적으로) 적용될 수 있다. 술어 정보(마스크라고도 함)는 벡터 내의 어느 데이터 요소가 특정 벡터 연산에 대한 활성 데이터 요소인지 식별하는 데 사용할 수 있으므로, 연산을 적용해야 하는 데이터 요소이다.
도 2는 FPCR(77) 및 FPSR(78)의 일례를 보다 상세하게 도시한 것이다. 도 2에 도시된 바와 같이, FPSR(78)은 상이한 타입의 예외 조건에 각각 대응하고 대응하는 타입의 적어도 하나의 예외 조건이 비트(85)가 마지막으로 클리어된 이후에 발생했음을 나타내는 다수의 예외 표시 비트(85)를 포함할 수 있다. 이 예에서 FPSR(78)에 표시된 예외 조건은 다음을 포함한다.
· QC : 정수 포화는, 포화 정수 연산의 결과가 최대 바운드를 초과하거나 포화도에 대한 최소 바운드보다 작은 경우에 발생하고,
· IDC : 입력 비정규는, 부동 소수점 연산에 대한 입력 값이 비정규일 경우에 발생하며,
· IXC : 부정확은, 부동 소수점 연산의 결과가 출력에 대해 규정된 부동 소수점 포맷을 사용하여 정확하게 표현될 수 없는 경우에 발생하고,
· UFC : 언더플로는, 부동 소수점 연산의 결과가 출력에 대해 규정된 부동 소수점 포맷을 사용하여 표현될 수 있는 것보다 작은 경우에 발생하며,
· OFC : 오버플로는, 부동 소수점 연산의 결과가 출력에 대해 규정된 부동 소수점 포맷을 사용하여 표현될 수 있는 것보다 큰 경우에 발생하고,
· DZC : 0으로 나누기는, 0으로 나누려고 시도하면 발생하며,
· IOC : 무효 연산은, 무효 연산을 실행하려고 시도하면 발생한다.
다른 타입의 예외 조건이 또한 표시될 수 있음을 이해할 것이다. 예외 표시 비트(85)는, 일단 설정되면, FPSR(78)의 비트 또는 FPSR 전체가 처리 파이프라인에 의해 실행된 명령어에 의해 명시적으로 클리어될 때까지 설정되어 있을 것이라는 점에서 누적된다. 따라서, 예외 조건이 발생하면 해당 비트가 설정되지만, 예외 조건을 트리거하지 않는 명령어는 해당 비트를 클리어하지 않는다.
FPCR(77)는 FPSR(78)에 표시된 예외 조건의 타입 중 하나에 각각 대응하는 다수의 예외 마스킹 비트(87)를 포함한다. 예외 마스킹 비트는 FPSR(78) 내의 예외 조건의 각 타입이 예외 타입을 처리하기 위해 오퍼레이팅 시스템에 대한 트랩(trap)을 트리거할지 여부를 제어한다. 예를 들어, 도 2의 경우에 시스템은, 0 또는 무효 연산 예외 조건으로 나누기가 오퍼레이팅 시스템에 대한 트랩을 트리거할 것이지만 다른 종류의 예외 조건은 트리거하지 않도록 현재 구성되어 있다. 도 2에 도시되지 않은 다른 정보가 또한 FPCR 및 FPSR(78)에 저장될 수 있다는 것을 이해할 것이다.
이 실시 예에서, 예외 타입당 하나의 예외 표시 비트(85)를 갖는 단일 FPSR(78)이 제공되고, 주어진 벡터 연산에 대한 모든 벡터 레인들 사이에서 공유된다. 따라서, FPSR(78)은 사실상 스칼라 FPSR이며 각 벡터 요소에 대해 개별적으로 예외를 나타내는 레인당 비트(per-lane bits)를 포함하지 않는다.
도 3은 부동 소수점 유닛(35)에 의해 지원되는 벡터 산술 명령어의 비 제1 오류 형태(non-first-faulting form)의 예를 도시한 것이다. 이 예에서, 수행될 산술 연산은 부동 소수점 덧셈 연산이다. 명령어는 벡터 레지스터(65)에 저장된 벡터의 쌍 Za, Zb와, 입력 벡터 Za, Zb의 어느 요소가 활성인지를 식별하는 술어 값(또는 마스크)을 제공하는 술어 레지스터(70)에 저장된 술어 Pg를 입력으로서 취한다. 도 3의 예에서, 마스크는 Za 및 Zb의 요소 0-3가 활성이고 요소 4-7가 비활성임을 나타낸다. 따라서, 벡터 연산 명령어에 응답하여, 부동 소수점 유닛(35)은 레지스터 Za, Zb의 레인 0-3에서 대응하는 요소 X, Y의 부동 소수점 덧셈을 수행하여 결과 레지스터 Zr 내의 대응하는 결과 요소 Z0 내지 Z3를 생성한다. 반면, 결과 레지스터의 비활성 레인의 Z4부터 Z7까지의 요소는 그렇지 않으면 그들 레인에 대해 수행되는 덧셈의 결과에 의존하지 않는 값을 취한다. 예를 들어, Z4 내지 Z7은 0과 같은 미리 결정된 값으로 설정될 수 있고, Za, Zb의 대응 레인의 입력 값 중 하나에 직접 매핑될 수 있거나, 또는 결과 레지스터 Za의 대응하는 부분에 이전에 저장된 값을 유지할 수 있다. 따라서, 활성 레인만이 입력의 대응하는 요소에 대해 수행된 산술 연산의 결과에 의존하는 값으로 설정된다.
벡터 산술 명령어의 비 제1 오류 형태(non-first-faulting form)에 대해, 벡터의 활성 레인 중의 어느 것인가에 대해 어떤 예외 조건이 발생하면, FPSR(78) 내의 대응하는 비트가 설정된다. 효과적으로, 각각의 활성 레인에 의해 트리거되는 예외 조건의 표시는 FPSR(78)을 적절히 설정하기 위해 OR 동작을 사용하여 결합될 수 있다. 도 3의 예에서, 요소 ZO는 부정확한 예외 IXC를 트리거하고 요소 Z3는 오버플로 예외 OFC를 트리거하므로, 이들 타입의 예외에 대응하는 비트(85)는 FPSR(78)에서 설정된다. FPCR(77)이 이들 타입의 예외가 오퍼레이팅 시스템에 대한 트랩을 트리거해야 한다는 것을 나타내면, 트랩이 수행되고 오퍼레이팅 시스템은 이들 타입의 예외를 처리하기 위한 예외 처리 루틴을 실행할 수 있다. 도 3에 나타낸 명령어의 비 제1 오류 형태의 경우, FPSR은 어느 특정 요소가 예외 조건을 트리거했는지를 구별하지 않는다.
도 4는 벡터 산술 명령어의 상이한 제1 오류 형태를 도시한 것이다. 산술 연산 자체는 도 3에서와 동일하며, 여기서, 입력 벡터 Za, Zb에서의 대응하는 요소들의 부동 소수점 덧셈은 술어 레지스터 Pg 내의 마스크의 대응하는 비트가 1인 각 레인에 대해 수행된다. 이번에서는 마스크의 모든 요소가 하나이므로 이 예에서는 모든 요소가 활성화되어 있다. 이 예에 있어서, 도 4에 나타낸 명령어의 제1 오류 형태가 도 3에 나타낸 명령어의 비 제1 오류 형태와 비교하여 상이한 연산코드(opcode)를 갖는다. 대안으로, 상이한 형태의 명령어는 동일한 연산코드를 공유할 수 있지만, 어떤 형태의 명령어가 실행되고 있는지를 지정하는 필드를 포함할 수 있다. 또한, 몇몇 경우에서, 명령어의 비 제1 오류 및 제1 폴트 형태의 인코딩은 완전히 동일할 수 있지만, 명령어가 제1 형태 또는 제 2 형태라고 간주되는지 여부는 처리 회로의 현재 동작 모드에 의존할 수 있다. 예를 들어, 벡터 산술 연산들이 도 4의 제1 오류 형태의 도 3의 비 제1 오류 형태에 따라 수행되어야 하는지 여부를 나타내기 위해 프로세서의 모드를 설정하는 다른 제어 레지스터들(76) 중 하나 또는 FPCR(77)에는 비트가 있을 수 있다.
도 4에 도시된 명령어의 제1 오류 형태에 대해, 예외 조건은 도 3의 비 제1 오류 형태와 비교하여 다르게 처리된다. 도 4에 도시된 바와 같이, 벡터의 제1 활성 요소에서 수행된 산술 연산에 대해 예외 조건이 발생하면(이 예에서 최하위 요소 X0/YO/Z0), 적절한 예외 처리 응답이 취해진다. 예를 들어, 이것은 FPSR(78) 내의 대응하는 비트를 설정하는 것과, FPCR이 그러한 종류의 예외의 트래핑을 인에이블시켰는지 여부에 의존해서, 필요한 경우 오퍼레이팅 시스템에 트래핑(trapping)하는 것을 포함할 수 있다. 예외 조건이 벡터의 다른 요소들 중 하나에 대해 검출되더라도, 이에 대한 응답은 취해지지 않으며 FPSR(78)은 벡터의 제1 활성 요소 이외의 어떤 요소들에 대해 발생한 어떤 예외 조건에 근거해 갱신되지 않는다. 예를 들어, 도 4에서, 요소 X3/Y3/Z3에 대응하는 레인에 대해 오버플로가 검출되었더라도, FPSR(78)의 오버플로 비트는 설정되지 않는다.
한편, 도 5에 도시된 바와 같이, 명령어의 제1 오류 형태에 대해, 제1 활성 요소가 예외 조건을 트리거하지 않으면, 오류 처리 응답은 억제된다. 따라서, FPSR(78)은 수정되지 않은 채로 있고 오퍼레이팅 시스템에는 어떤 트래핑(trapping)도 없다. 그러나, 벡터의 제1 활성 요소가 아닌 요소에 대한 산술 연산이 예외 조건을 트리거하면, 도 5에 도시된 바와 같이, 제1 오류 레지스터(79)가 갱신되어 어떤 요소가 예외를 트리거했는지를 기록한다. 도 5에 도시된 바와 같이, 제1 오류 레지스터는, 폴트(fault)를 트리거한 요소 3보다 덜 중요한 요소 0-2가 1의 비트 값으로 표시되고, FFR(79)의 마스크 비트가 폴트를 트리거한 요소 3과 그 다음의 모든 요소에 대해 0인 폴트 마스크(fault mask)에 대응할 수 있다.
FFR(79)은 필요한 경우 벡터 산술 명령어를 실행하려는 또 다른 시도를 위한 마스크 또는 입력 벡터를 설정하기 위해 다음의 명령어에 의해 사용될 수 있는 정보를 제공한다. 예를 들어, 도 6에 도시된 바와 같이, FFR(79)은 이전 마스크 Pg와 결합되어 아직 처리되지 않은 예외 조건을 여전히 트리거할 수 있는 나머지 요소들을 나타내는 새로운 마스크 Pg'를 생성할 수 있다. 예를 들어, 이것은 FFR(79)의 대응하는 비트들이 1이기도 한 1과 같은 원래의 마스크 Pg의 비트들을 클리어함으로써 결정될 수 있다. 원래의 마스크 Pg가 모두 1이면, 새로운 마스크를 생성하는 또 다른 방법은 원래의 마스크 Pg로부터 FFR(79)을 감산하는 것이다.
선택적으로, 도 7에 도시된 바와 같이, FFR(79)을 사용해서 벡터 산술 명령어 대한 입력 벡터 Za를 수정하여, FFR(79) 내의 0으로 표시된 요소 X3-X7를 입력 벡터의 제1 활성 요소들에 대응하는 벡터 위치 0-4로 재로드(reload)한다. 어떤 다른 입력 벡터 Zb에 대해서도 유사한 연산을 수행할 수 있고 벡터 연산 명령어를 반복할 수 있음으로써, 요소 X3이 제1 활성 요소가 될 것이고, 이것이 예외 조건을 트리거하면 이것은 FPSR에 기록되고 필요하다면 트랩핑될 수 있다.
따라서, 벡터 산술 명령어를 사용하는 소프트웨어는 예외 조건 없이 어떤 요소가 정확하게 실행되었는지를 나타내도록, 또 예외 조건을 이전에 트리거한 활성 요소로부터 시작하여 필요한 경우 명령어를 반복하도록, FFR(79)을 체크하는 벡터 산술 명령어 주위에 루프를 제공할 수 있다. 이러한 루프의 예가 아래 도 9에 도시되어 있다.
이 접근법은 몇 가지 장점이 있다. 첫째, 이 기술은 FPSR(78)에서 예외 표시 비트의 단일 세트만을 사용하여, 어떤 특정 요소가 예외 조건을 트리거했는지 추적하는 것을 포함하여, 벡터의 각 요소에 대해 발생한 예외 조건의 정확한 기록을 가능하게 하여, 각 벡터 레인(lane)에 대해 비트(85)의 개별 카피(copies)을 제공할 필요성을 피하는데, 이것은 더 큰 FPSR(78)이 요구될 뿐만 아니라, 부동 소수점 예외 플래그의 다중 카피가 파이프라인을 통해 전달되도록 요구할 수 있기 때문에 벡터가 커지면 매우 비용이 많이 들 수 있다.
또한, 명령어로부터의 제1 오류는 벡터 연산의 추측(speculative) 실행을 지원하는 데 유용할 수 있다. 이것은 도 8 및 도 9와 관련하여 보다 상세하게 설명된다. 도 8은 주어진 벡터 산술 명령어의 비추측(non-speculative) 실행의 예를 도시하는 반면, 도 9는 명령어의 추측 실행의 예를 도시한다.
벡터 명령어들은, 데이터 값들의 어레이에서의 각 값에 주어진 처리 동작의 세트를 적용하여 어레이의 각 값에 대해 대응하는 결과를 생성해야 하는 경우에 특히 유용할 수 있다. 전형적으로, 코드는 메모리로부터 벡터 레지스터로 처리될 다수의 데이터 값을 로딩하는 벡터 로드(load) 명령어와, 그 다음에 결과 값들을 메모리에 다시 저장하기 위한 벡터 저장 명령어를 실행하기 전에, 결과를 생성하기 위해 어떤 방식으로 로딩된 벡터의 데이터 요소의 각각을 처리하기 위한 하나 이상의 벡터 산술 명령어를 제공함으로써 벡터화될 수 있다. 그러나, 처리될 데이터 값의 총 수는 처리 회로에 의해 지원되는 벡터 길이의 정확한 배수(exact multiple)가 아닐 수도 있다. 통상적으로, 벡터화된 코드는 벡터 로드 명령어 및 다수의 벡터 산술 명령어를 포함하는 명령어의 세트를 통해서 반복해서 반복하는 루프를 포함할 수 있으며, 각 루프 반복은 벡터 길이에 대응하는 데이터 값의 주어진 블록을 처리한다. 종종 몇몇 종류의 정지 조건은, 필요한 모든 데이터 값이 처리되었는지 여부를 체크하고, 그렇다면 루프를 중단하도록 루프에 정의될 수 있다. 중지 조건은 현재 처리중인 벡터의 각 요소에 대해 개별적으로 체크될 수 있으며, 요소들 중 하나에 대해 중지 조건이 충족되는 것으로 판단되면, 이것은 그 벡터의 이후 요소가 실제로 처리될 필요가 없음을 나타낼 수 있다.
일부 벡터 명령어의 경우, 정지 조건은 그 벡터 명령어의 결과에 의존하지 않을 수 있다. 도 8에 도시된 바와 같이, 입력 벡터 Za, Zb에 근거하여 결과 벡터 Zr를 생성하는 주어진 벡터 덧셈 명령어에 대해, 대응하는 정지 조건은 일부 다른 벡터 Zc에 의존할 수 있으므로, 덧셈의 결과와는 무관하다. 이 경우, 벡터 덧셈 명령어는 조건의 결과에 관계없이 그것의 요소들이 처리되어야 한다는 것이 알려져 있기 때문에, 비추측적(non speculative)이라고 간주될 수 있다.
다른 한편, 도 9에 도시된 바와 같이, 다른 예들의 경우, 정지 조건은 벡터 덧셈 명령어의 결과에 의존할 수 있다. 예를 들어, 이 경우 정지 조건은 벡터 덧셈 명령어에 의해 생성된 결과 벡터의 임의의 요소 j가 어떤 조건을 충족시키는지 여부를 체크하고, 만약 그렇다면 루프가 중단된다. 결과 벡터 Zr의 요소 j 중 하나가 조건을 충족하면, 이것은 그 다음의 요소 j+1, j+2 등이 처리되지 않아야 함을 나타낼 것이다. 다른 접근법은 사실상 벡터 연산을 비추론적으로 수행하기 전에 Zr의 값이 무엇인지 체크하는 추가 명령어를 실행하는 것이지만, 이것은 추가 명령어를 필요로 하여 코드를 벡터화하는 것이 쉽지 않다. 모든 요소가 실제로 필요한지 여부를 알기 전에 벡터 덧셈 명령어를 추론적으로 실행함으로써, 성능을 향상시킬 수 있다. 그러나, 이것은, 명령어의 비 제1 오류 명령 형태가 실행되었으면, FPSR(78)이 나중에 요구되지 않은 것으로 판명되는 벡터 처리의 추측 레인에 대해 발생하는 예외 조건에 근거하여 갱신될 수 있는 상황을 초래할 수 있다. 이 경우 추측 실행으로 인해 허위 예외를 나타내거나 오퍼레이팅 시스템을 불필요하게 트래핑할 때 원치 않는 부작용이 발생할 수 있다.
이것은 도 4 및 도 5와 관련하여 논의된 바와 같이 명령어의 제1 오류 형태를 대신 실행함으로써 회피될 수 있다. 벡터의 제1 활성 요소는 일반적으로 비추측 요소인데, 왜냐하면 그 요소가 정지 조건을 충족시키더라도 그것은 여전히 유효한 결과이기 때문이다. 따라서, 제1 활성 요소에 대해 트리거된 예외 조건에 응답하여 폴트 처리 응답을 트리거하는 데 문제가 없다. 어떤 다음의 요소가 또한 예외 조건을 트리거하면, 이것은 응답을 트리거하지 않으므로, 이들 요소가 잘못 추측된 것으로 판명되면 원하지 않는 부작용을 발생시키지 않다. 정지 조건이 충족되지 않을 때 명령어가 올바르게 진행되게 하려면, 도 9에 나타낸 것과 같이 벡터 산술 명령어 주위에 루프가 설정되어, FFR(79)이 벡터의 어떤 더 많은 요소들에 대해 수행 어떤 남은 연산이 있다는 것을 나타내는 경우 명령을 다시 시도한다. 예를 들어, 명령어 100은 벡터 덧셈 명령어 102를 실행하려는 각 시도 전에 FFR의 모든 비트를 설정할 수 있다. 조건을 해결하고, 필요하다면 루프를 중단한 후(명령어 104), 조건이 충족되지 않으면, 명령어 106은 벡터 산술 명령어 102에 의해 사용된 마스크 Pk를 수정하여 예외를 트리거한 요소로부터 시작하여 나머지 요소를 활성으로서 표시한다. 이것은 도 6의 예에서와 같이 이전 마스크(70) 및 FFR(79)에 근거하여 결정된다. 분기 명령어 108은 여전히 처리될 적어도 하나의 나머지 요소가 존재하는 경우, 즉 새로운 마스크가 모든 비트가 0인 값 이외의 어떤 값을 가지면, 명령어 100로 다시 분기한다.
도 10은 이러한 방식으로 벡터 산술 명령어의 반복을 여러 번 순환 반복하는 예를 도시한 것이다. 첫 번째 반복에서는, 이 예에서 벡터 인덱스[1]인, 제1 활성 요소에 대해 예외가 발생하지 않지만 벡터 인덱스[2]에서 다음 활성 요소에 대해는 예외가 검출된다. 요소[2]가 제1 활성 데이터 요소가 아니기 때문에, 예외 응답이 취해지지 않고, 대신 FFR(79)이 요소[2]와 요소[3]에 해당하는 비트들을 클리어하도록 갱신된다. 그 다음, FFR(79)은 루프를 도는 두 번째 반복을 위한 새로운 술어(predicate)를 생성하는 데 사용되며, 이때 제1 활성 요소는 레인[2]이므로 이번에 예외는 FPSR(78)에서 플래그의 설정과, FPCR(77)에 의해 요구되는 경우 오퍼레이팅 시스템에 대한 트랩을 트리거한다. 유사하게, 시퀀스 내의 나중의 요소들에서 추가 예외를 처리할 필요가 있는 경우에는, 명령어의 추가 반복이 수행될 수 있다.
실제로, 부동 소수점 예외는 거의 발생하지 않으며 범용 소프트웨어는 부동 소수점 상태 플래그의 값에 거의 의존하지 않으므로, 부동 소수점 예외 발생시 일부 직렬화(serialisation)를 도입하는 솔루션(solution)은 성능 측면에서 완벽하게 수용할 수 있다. 프로그래머는, 벡터 처리의 추측 실행이 필요할 때, 또는 벡터의 어떤 특정 요소들이 예외 조건을 트리거했는지를 정확하게 추적하는 것이 중요한 경우, 명령어의 제1 오류 형태를 선택할 수 있다. 이 경우, 연속적인 활성 요소들에서 발생하는 예외를 단계적으로 처리하도록 명령어의 여러 루프를 통해서 반복함으로써, 정확한 예외 처리가 가능하며, 잘못된 추측 레인에서 트리거된 가짜 예외 처리를 피할 수 있다.
반면, 모든 활성 요소가 처리될 필요가 있는 것으로 이미 알려진 경우 벡터 연산이 비추론적으로 실행되고 있으면, 성능을 향상시키기 위해 명령어의 비 제1 오류 형태의 명령어가 선택될 수 있으며, 벡터 명령을 둘러싼 루프를 제공하는 부가된 명령에 대한 필요성을 피할 수 있다. 유사하게, 어떤 특정 레인이 예외를 트리거했는지의 정확한 식별이 요구되지 않는다면, 예외를 트리거한 특정 레인을 기록하지 않고 어떤 레인에 대해 어떤 예외 타입이 발생했는지를 FPSR(78)에 단순히 기록하도록 비 제1 오류 형태의 명령어를 선택할 수 있다.
상기 예들은 벡터 산술 명령어가 가산 명령인 경우를 도시하지만, 부동 소수점 연산 및 정수 연산을 포함하는, 상이한 종류의 산술 연산의 범위에 대해 유사한 기술이 수행될 수 있음을 알 수 있다.
도 11은 벡터 산술 명령어의 처리 예를 도시하는 흐름도이다. 스텝 200에서, 처리 파이프라인은 현재의 명령어가 벡터 산술 명령인지 여부를 검출하고, 그렇지 않다면, 벡터 명령어는 어떤 다른 방법으로 처리된다. 벡터 산술 명령어가 실행될 때, 스텝 202에서 파이프라인은 명령어의 타입을 결정한다. 명령어가 제1 타입(제1 오류 형태의 명령어)이면, 스텝 204에서, 대응하는 산술 연산이 결과 벡터의 대응하는 결과 요소를 생성하기 위해 입력 벡터의 각 활성 요소에 대해 수행된다. 스텝 206에서, 예외 조건이 벡터의 제1 활성 요소에 대해 검출되었는지 여부가 결정된다. 만약 그렇다면 스텝 208에서 FPSR(78)은 어떠한 예외 조건이 발생했는지를 나타내도록 갱신되고, 스텝 210에서 FPCR(77)은 오퍼레이팅 시스템에 대한 트래핑이 검출된 예외 조건들에 대해 현재 인에이블되는지 여부를 결정하기 위해 체크되고, 만약 그렇다면 트랩이 트리거된다. 반면, 제1 활성 요소에 대해 예외 조건이 발생하지 않은 경우, 스텝 212에서 처리 회로는 제1 활성 요소가 아닌 또 다른 활성 요소에 대해 예외 조건이 발생했는지 여부를 결정한다. 만약 그렇다면 스텝 214에서 예외 조건 및 어떤 다음의요소들을 트리거한 활성 요소에 대해 FFR(79)의 하나 이상의 비트가 클리어된다. 한편, 어떤 요소에 대해서도 예외 조건이 발생하지 않으면, 스텝 214는 스킵된다. 그런 다음 현재 벡터 산술 명령어의 처리가 종료한다. 상기 논의된 바와 같이, 추가 명령들은 FFR(79)을 사용하여 마스크 또는 벡터 연산 명령어에 대한 입력 벡터들을 수정할 수 있고, 그 다음에 모든 요소들이 그들의 예외 조건들이 완전히 처리되지 않은 채 아직 처리되지 않았다면 벡터 산술 명령어를 다시 시도하기 위해 다시 분기할 수 있다.
한편, 현재 벡터 산술 명령어가 제2 타입(비 제1 오류 타입의 명령어)이면, 스텝 220에서, 각각의 활성 요소에 대해 산술 연산을 수행하여 결과 벡터의 대응하는 결과 요소들을 생성한다. 스텝 222에서, FPSR(78)은 벡터의 활성 요소들 중의 어느 것인가에 대해 발생한 어떤 예외 조건을 나타내도록 갱신된다. 이것은 어떤 특정 요소가 예를 트리거했는지를 구별하지 않다. 스텝 224에서, 처리 회로는 FPCR을 다시 체크하여, 발생한 어떤 예외 조건에 대해 오퍼레이팅 시스템에 대한 트랩이 필요한지를 결정하고, 필요하다면, 오퍼레이팅 시스템에 트랩한다. 명령어의 처리는 종료된다.
도 12 및 도 13은 부동 소수점 예외 플래그에 대한 추측 갱신을 처리하기 위한 대체 접근법을 도시한 것이다. 전술한 바와 같이 벡터 산술 명령어의 제1 및 제2 형태를 제공하는 대신에, 벡터 명령어의 추측 처리에 대응하는, 제1 버전의 FPSR, FPSR1 78-1에서 어떤 벡터 레인에 대해 발생한 예외 조건을 기록하는 하나의 타입의 벡터 산술 명령어가 제공될 수 있다. 추측이 정확한지의 여부를 지배하는 관련 조건이 해결되면, 어떤 정확하게 추측된 레인에 대한 부동 소수점 예외 플래그를, FPSR의 비추측 상태(또는 커밋된 버전)를 나타내는 부동 소수점 상태 레지스터 FPSR2 78-2의 제2 버전으로 카피하도록 커밋 명령어가 실행될 수 있다(도 13 참조). 예를 들어, 커밋(COMMIT) 명령어는 FPSR1 78-1 및 FPSR 2의 이전 값을 OR 연산과 결합하여 FPSR2에 대한 갱신된 상태를 생성할 수 있다. 필요한 경우, 결합(COMBINE) 명령어를 사용하여 전체적으로 벡터에 대해 어떤 예외가 발생했는지를 나타내는, 전체 벡터 사이에서 공유된 예외 타입당 단일 플래그로 상태 플래그의 벡터화된 뷰(view)를 FPSR 78에서 전통적인 스칼라 뷰(scalar view)로 변환할 수 있다. 예를 들어, 결합 벡터 명령어는 FPSR2 78-2의 각 레인에서 주어진 예외에 대한 대응하는 플래그들을 OR하여 그 예외 타입이 전체적으로 벡터에 대해 발생했는지 여부를 나타내는 전체 플래그를 생성할 수 있다.
도 12는 부동 소수점 예외 또는 정수 포화를 발생시키는 어떤 데이터 요소의 최하위 바이트와 정렬되는 바이트 와이드 플래그 요소들(byte-wide flag elements)에서 부동 소수점 및 정수 포화 상태를 포착하기 위한 FPSR 1 78-1 및 FPSR 2 78-2에 대한 레이아웃의 예를 도시한 것이다. 가장 작은 부동 소수점 요소는 일반적으로 32비트 폭이고 정수 요소는 8비트일 수 있기 때문에, 이것은 부동 소수점 상태 플래그(85)가 4의 배수인 플래그 요소 수로만 나타나고, 정수 포화 플래그 QC가 각 바이트로 발생한다는 것을 의미한다. 사용하지 않는 비트들은 하드웨어로 저장될 필요가 없으며 판독할 때 0을 리턴한다. 레지스터 내의 비트들은 활성 벡터 요소에 대해 Shoji 부동 소수점 또는 포화 정수 연산의 부작용 중 하나를 허용할 수 있다. FPSR 1과 FPSR 2의 최하위 32비트가 도 12에 도시되어 있지만 이것은 최대 벡터 길이까지 반복될 수 있다.
도 14는 사용할 수 있는 가상 머신 구현을 도시한 것이다. 앞서 기술된 실시 예들은 관련 기술들을 지원하는 특정 프로세싱 하드웨어를 동작시키는 장치 및 방법들에 관하여 본 발명을 구현하지만, 하드웨어 디바이스들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현은 가상 머신 프로그램(510)을 지원하는 호스트 오퍼레이팅 시스템(520)을 작동하는 호스트 프로세서(530)상에서 실행된다. 일반적으로, 큰 강력한 프로세서는 적절한 속도로 실행되는 가상 머신 구현을 제공해야 하지만, 호환성이나 재사용을 위해 다른 프로세서에 고유의 코드를 실행하려는 경우와 같은, 특정 상황에서 이러한 접근 방식이 정당화될 수 있다. 가상 머신 프로그램(510)은 가상 머신 프로그램(510)에 의해 모델링되는 디바이스인 실제 하드웨어에 의해 제공되는 응용 프로그램 인터페이스와 동일한 응용 프로그램(500)에 응용 프로그램 인터페이스를 제공한다. 따라서, 상술한 메모리 액세스의 제어를 포함하는, 프로그램 명령어들은 가상 머신 프로그램(510)을 사용하여 응용 프로그램(500) 내에서 실행되어 가상 머신 하드웨어와의 상호작용을 모델링할 수 있다.
본원에서, "구성된(configured to..)"라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하는 것으로 사용된다. 이 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍될 수 있다. "구성된"은 정의된 동작을 제공하기 위해 장치 구성요소가 어떤 식으로든 변경되어야 함을 의미하지는 않다.
본 발명의 예시적인 실시 예가 첨부된 도면을 참조하여 상세히 설명되었지만, 본 발명은 이러한 정확한 실시 예에 한정되지 않고 다양한 변경 및 수정이 첨부된 청구항에 의해 한정된 것처럼 본 발명의 범위 및 정신으로부터 벗어나지 않고 본 기술분야의 당업자에 의해 이루어질 수 있다는 것을 이해해야 한다.

Claims (21)

  1. 복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대한 산술 연산을 수행하는 처리 회로를 구비하고,
    상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
    상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 처리 회로는 적어도 하나의 응답 액션을 수행하도록 구성되며,
    적어도 하나의 예외 조건이 상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 검출되는 경우, 상기 처리 회로는 상기 적어도 하나의 응답 액션을 억제하고 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 응답 액션은 적어도 하나의 예외 조건이 상기 제1 활성 데이터 요소에 대해 검출되었음을 나타내기 위해 상태 레지스터를 갱신하는 것을 포함하는, 장치.
  3. 제 2 항에 있어서,
    상기 상태 레지스터는 하나 이상의 대응하는 타입의 예외 조건의 발생을 나타내기 위한 하나 이상의 예외 조건 표시 비트들의 세트를 포함하고, 상기 예외 조건 표시 비트들의 세트는 단일 비트당 타입(single bit per type)의 예외 조건을 포함하는, 장치.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 응답 액션은 예외 처리 루틴의 실행을 트리거하는 것을 포함하는, 장치.
  5. 제 4 항에 있어서,
    하나 이상의 타입의 예외 조건에 대한 예외 처리 루틴의 실행을 트리거할지 여부를 지정하는 구성 정보를 저장하는 구성 레지스터를 구비하고,
    상기 적어도 하나의 응답 액션은, 구성 정보가 예외 처리 루틴이 검출된 타입의 예외 조건에 대해 트리거되어야 한다고 지정하는 경우, 예외 처리 루틴의 실행을 트리거하는 것을 포함하는, 장치.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 처리 회로는, 하나 이상의 활성 데이터 요소들이 처리되어야 하는지를 결정하기 위한 관련 조건이 해결되기 전에, 상기 제1 입력 벡터의 하나 이상의 활성 데이터 요소들에 대한 산술 연산을 수행하도록 구성되는, 장치.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 제1 입력 벡터는 상기 제1 입력 벡터의 어느 데이터 요소들이 활성 데이터 요소들인지를 나타내는 마스크와 관련되는, 장치.
  8. 제 7 항에 있어서,
    상기 처리 회로는, 적어도 하나의 추가 명령어에 응답하여, 요소 식별 정보에 근거하여, 새로운 제1 입력 벡터와, 제1 타입의 벡터 산술 명령어를 실행하려는 이후의 시도를 위한 새로운 마스크 중 적어도 하나를 생성하는, 장치.
  9. 제 8 항에 있어서,
    상기 처리 회로는, 상기 적어도 하나의 추가 명령어에 응답하여, 상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소로서 표시된 주어진 활성 데이터 요소로 새로운 마스크를 생성하는, 장치.
  10. 제 8 항에 있어서,
    상기 처리 회로는, 상기 적어도 하나의 추가 명령어에 응답하여, 상기 제1 입력 벡터의 주어진 활성 데이터와 동일한 값을 갖는 새로운 제1 입력 벡터의 제1 활성 데이터 요소로 새로운 제1 입력 벡터를 생성하는, 장치.
  11. 제 1 항 내지 제 10 항 중 어느 한 항에 있어서,
    상기 요소 식별 정보는 상기 미리 정해진 시퀀스 내의 주어진 활성 데이터 요소에 선행하는 적어도 하나의 데이터 요소에 대한 제1 값을 갖는 하나 이상의 표시와, 상기 미리 정해진 시퀀스 내의 주어진 활성 데이터 요소 및 다음의 활성 데이터 요소에 대한 제2 값을 갖는 하나 이상의 표시를 포함하는 요소 식별 마스크를 구비하는, 장치.
  12. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소는 제1 입력 벡터의 최하위 활성 데이터 요소를 포함하는, 장치.
  13. 제 1 항 내지 제 12 항 중 어느 한 항에 있어서,
    제2 타입의 벡터 산술 명령어에 응답하여, 상기 처리 회로는 상기 제1 입력 벡터의 활성 데이터 요소에 대해 수행된 산술 연산에 대한 적어도 하나의 예외 조건을 검출하는 것에 응답하여 상기 적어도 하나의 응답 액션을 수행하도록 구성되는, 장치.
  14. 제 13 항에 있어서,
    상기 제1 및 제2 타입의 벡터 산술 명령어는 상이한 연산코드(opcode)를 포함하거나, 벡터 명령어가 제1 타입인지 또는 제2 타입인지를 지정하는 필드를 포함하는, 장치.
  15. 제 13 항에 있어서,
    상기 제1 타입의 벡터 산술 명령어는 상기 처리 회로의 제1 모드에서 실행되는 벡터 산술 명령어를 포함하고,
    상기 제2 타입의 벡터 산술 명령어는 상기 처리 회로의 제2 모드에서 실행되는 벡터 산술 명령어를 포함하는, 장치.
  16. 제 13 항 내지 제 15 항 중 어느 한 항에 있어서,
    상기 제2 타입의 벡터 산술 명령어에 응답하여, 상기 적어도 하나의 응답 액션은 상태 레지스터를 갱신하여 상기 제1 입력 벡터의 활성 데이터 요소들에 대해 수행된 산술 연산에 대해 검출되었던 하나 이상의 타입의 예외 조건의 표시를 제공하는, 장치,
  17. 제 1 항 내지 제 16 항 중 어느 한 항에 있어서,
    산술 연산은 부동 소수점 연산을 포함하고, 적어도 하나의 예외 조건은,
    산술 연산에서 생성된 부동 소수점 값의 오버플로우와,
    산술 연산에서 생성된 부동 소수점 값의 언더플로우와,
    부정확한 산술 연산에서 생성된 부동 소수점 값과,
    무효 연산에 대응하는 산술 연산과,
    제로에 의한 제산(division by zero)을 포함하는 산술 연산과,
    비정상적인(denormal) 산출 연산에 대한 입력 중 적어도 하나를 포함하는, 장치.
  18. 제 1 항 내지 제 17 항 중 어느 한 항에 있어서,
    산술 연산은 포화(saturationg) 산술 연산을 포함하고, 적어도 하나의 예외 조건은 포화 산술 연산에서 생성된 값의 포화도(saturation)를 포함하는, 장치.
  19. 복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대한 산술 연산을 수행하는 수단을 구비하고,
    상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
    상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 수행 수단은 적어도 하나의 응답 액션을 수행하도록 구성되며,
    적어도 하나의 예외 조건이 상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 검출될 때, 상기 수행 수단은 상기 적어도 하나의 응답 액션을 억제하고 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하도록 구성되는, 장치.
  20. 데이터 처리방법으로서,
    복수의 데이터 요소를 포함하는 적어도 제1 입력 벡터를 지정하는 제1 타입의 벡터 산술 명령어에 응답하여, 상기 제1 입력 벡터의 적어도 하나의 활성 데이터 요소에 대해 산술 연산을 수행하는 단계를 포함하고, 상기 제1 입력 벡터의 데이터 요소들은 미리 결정된 시퀀스를 갖고,
    상기 데이터 처리방법은,
    상기 미리 결정된 시퀀스 내의 제1 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 적어도 하나의 응답 액션을 수행하는 단계와,
    상기 미리 결정된 시퀀스 내의 상기 제1 활성 데이터 요소 이외의 주어진 활성 데이터 요소에 대해 수행된 산술 연산에 대해 적어도 하나의 예외 조건이 검출될 때, 상기 적어도 하나의 응답 액션을 억제하고, 상기 제1 입력 벡터의 어느 데이터 요소가 상기 주어진 활성 데이터 요소인지를 식별하는 요소 식별 정보를 저장하는 단계를 더 포함하는, 데이터 처리 방법.
  21. 데이터 처리 장치에 의해 실행될 때, 청구항 1 내지 18 중 어느 한 항의 장치에 대응하는 명령어 실행 환경을 제공하는 가상 머신을 제공하는 컴퓨터 판독가능 기억매체에 기억된 컴퓨터 프로그램.
KR1020187013379A 2015-10-22 2016-09-14 벡터 산술 명령어에 대한 예외 조건의 처리 KR102628269B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1518735.4A GB2543554B (en) 2015-10-22 2015-10-22 Handling exceptional conditions for vector arithmetic instruction
GB1518735.4 2015-10-22
PCT/GB2016/052837 WO2017068318A1 (en) 2015-10-22 2016-09-14 Handling exceptional conditions for vector arithmetic instruction

Publications (2)

Publication Number Publication Date
KR20180069846A true KR20180069846A (ko) 2018-06-25
KR102628269B1 KR102628269B1 (ko) 2024-01-23

Family

ID=55130082

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187013379A KR102628269B1 (ko) 2015-10-22 2016-09-14 벡터 산술 명령어에 대한 예외 조건의 처리

Country Status (7)

Country Link
US (1) US10776124B2 (ko)
JP (1) JP6942298B2 (ko)
KR (1) KR102628269B1 (ko)
CN (1) CN108139910B (ko)
GB (1) GB2543554B (ko)
TW (1) TWI713589B (ko)
WO (1) WO2017068318A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI812254B (zh) 2017-05-17 2023-08-11 美商谷歌有限責任公司 用於訓練神經網路之方法、系統及非暫時性電腦可讀儲存媒體
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11372643B2 (en) * 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
US11620153B2 (en) * 2019-02-04 2023-04-04 International Business Machines Corporation Instruction interrupt suppression of overflow exception
WO2021126216A1 (en) 2019-12-19 2021-06-24 Google Llc Resource management unit for capturing operating system configuration states and offloading tasks
EP3857371A1 (en) * 2019-12-19 2021-08-04 Google LLC Resource management unit for capturing operating system configuration states and memory management
US11188304B1 (en) 2020-07-01 2021-11-30 International Business Machines Corporation Validating microprocessor performance
CN114428638A (zh) * 2020-10-29 2022-05-03 平头哥(上海)半导体技术有限公司 指令发射单元、指令执行单元、相关装置和方法
US20220206792A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor
US11675651B2 (en) 2021-03-11 2023-06-13 International Business Machines Corporation Critical problem exception handling
US11782786B1 (en) 2022-03-17 2023-10-10 General Electric Company Systems and methods for handling invalid floating-point operations without exceptions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100325483A1 (en) * 2008-08-15 2010-12-23 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US20150261590A1 (en) * 2014-03-15 2015-09-17 Zeev Sperber Conditional memory fault assist suppression

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US325483A (en) * 1885-09-01 blaisdell
US244987A (en) * 1881-08-02 Boot and shoe jack
US208086A (en) * 1878-09-17 Improvement in brakes for railway-cars
US233507A (en) * 1880-10-19 Wrench
US47358A (en) * 1865-04-18 Improvement in automatic stop-motions for steam-engines
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
CN1040803C (zh) * 1989-05-17 1998-11-18 国际商业机器公司 在数据处理系统提供附加系统特性的方法和装置
JP2000040081A (ja) * 1998-07-24 2000-02-08 Nec Kofu Ltd ベクトルデータ処理装置
US6378067B1 (en) * 1998-10-12 2002-04-23 Idea Corporation Exception reporting architecture for SIMD-FP instructions
US8938642B2 (en) * 2008-08-15 2015-01-20 Apple Inc. Confirm instruction for processing vectors
US20110047358A1 (en) * 2009-08-19 2011-02-24 International Business Machines Corporation In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication
CN104025022B (zh) * 2011-12-23 2017-09-19 英特尔公司 用于具有推测支持的向量化的装置和方法
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
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
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100325483A1 (en) * 2008-08-15 2010-12-23 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US20150261590A1 (en) * 2014-03-15 2015-09-17 Zeev Sperber Conditional memory fault assist suppression

Also Published As

Publication number Publication date
GB2543554B (en) 2019-01-23
CN108139910A (zh) 2018-06-08
JP2018531467A (ja) 2018-10-25
WO2017068318A1 (en) 2017-04-27
US10776124B2 (en) 2020-09-15
US20180293078A1 (en) 2018-10-11
CN108139910B (zh) 2022-07-19
TWI713589B (zh) 2020-12-21
JP6942298B2 (ja) 2021-09-29
KR102628269B1 (ko) 2024-01-23
GB201518735D0 (en) 2015-12-09
TW201719389A (zh) 2017-06-01
GB2543554A (en) 2017-04-26

Similar Documents

Publication Publication Date Title
KR102628269B1 (ko) 벡터 산술 명령어에 대한 예외 조건의 처리
JP6843113B2 (ja) メモリと複数のベクトルレジスタ間の複数のデータ構造を転送する装置および方法
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
JP2018531467A6 (ja) ベクトル演算命令の例外条件処理
US11003450B2 (en) Vector data transfer instruction
CN107851019B (zh) 用于执行叠接操作的设备和方法
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
US10599428B2 (en) Relaxed execution of overlapping mixed-scalar-vector instructions
CN108140011B (zh) 向量加载指令
KR102379886B1 (ko) 벡터 명령 처리
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant