KR20190051036A - 벡터 명령들에 대한 요소간 어드레스 해저드들의 처리 - Google Patents

벡터 명령들에 대한 요소간 어드레스 해저드들의 처리 Download PDF

Info

Publication number
KR20190051036A
KR20190051036A KR1020197010503A KR20197010503A KR20190051036A KR 20190051036 A KR20190051036 A KR 20190051036A KR 1020197010503 A KR1020197010503 A KR 1020197010503A KR 20197010503 A KR20197010503 A KR 20197010503A KR 20190051036 A KR20190051036 A KR 20190051036A
Authority
KR
South Korea
Prior art keywords
data
vector
address
hazard
transaction
Prior art date
Application number
KR1020197010503A
Other languages
English (en)
Other versions
KR102344010B1 (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 KR20190051036A publication Critical patent/KR20190051036A/ko
Application granted granted Critical
Publication of KR102344010B1 publication Critical patent/KR102344010B1/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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Abstract

장치는, 벡터 로드 및 스토어 명령들을 지원하는 처리회로(4)를 갖는다. 상기 처리회로는, 트랜잭션 시작 이벤트에 응답하여 하나 이상의 차후의 명령들을 추론적으로 실행한다. 상기 처리회로(4)는, 트랜잭션 종료 이벤트에 응답하여 그 명령들의 추론 결과들을 커밋한다. 해저드 검출회로(50)는, 요소간 어드레스 해저드가, 조기의 벡터 로드 명령을 위한 데이터 요소 J에 대한 어드레스와 후기의 벡터 스토어 명령을 위한 데이터 요소 K에 대한 어드레스와의 사이에서 일어나는지를 검출하고, 이때 K와 J는 같지 않다. 상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 해저드 검출회로(50)는 상기 처리회로(4)를 기동하여 상기 트랜잭션 시작 이벤트 후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지한다. 이 해결책은, 벡터화된 코드에 대해 보다 빠른 성능을 제공할 수 있다.

Description

벡터 명령들에 대한 요소간 어드레스 해저드들의 처리
본 기술은 데이터 처리 분야에 관한 것이다.
일부의 데이터 처리 시스템들은 벡터 명령들의 처리를 지원하고, 이때의 명령의 소스 오퍼랜드 또는 결과 값은 다중 데이터 요소들로 이루어진 벡터다. 단일의 명령에 응답하여 다수의 별개의 데이터 요소들의 처리를 지원함으로써, 코드 밀도가 향상될 수 있고, 명령들의 페칭(fetching)과 디코딩의 오버헤드가 감소될 수 있다. 처리되는 데이터 값들의 어레이는, 그 데이터 값들을 벡터 오퍼랜드의 각각의 요소들에 로딩하고 단일의 벡터 명령을 사용하여 상기 데이터 값들 일부의 요소들을 한 번에 처리함으로써, 보다 효율적으로 처리될 수 있다.
적어도 일부의 예들은,
명령들에 응답하여 데이터 처리를 행하는 처리회로이며, 벡터 로드 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하도록 구성되고, 벡터 스토어 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하도록 구성되는, 상기 처리회로를 구비하는 장치를 제공하고;
상기 처리회로는, 트랜잭션 시작 이벤트에 응답하여 하나 이상의 차후의 명령들을 추론적으로 실행하고, 트랜잭션 종료 이벤트에 응답하여서는 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 하나 이상의 차후의 명령들의 추론 결과들을 커밋(commit)하기 위한 회로이고;
상기 장치는, 요소간 어드레스 해저드가, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의(earlier) 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의(later) 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서 일어나는지를 검출하는 해저드 검출회로를 구비하고, 이때 K는 J와 상이하고, 상기 조기의 벡터 로드 명령과 상기 후기의 벡터 스토어 명령의 양쪽은 상기 처리회로에 의해 처리된 명령들의 동일한 쓰레드로부터 온 것이고;
상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 해저드 검출회로는 상기 처리회로를 기동하여 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하도록 구성된다.
적어도 일부의 예들은,
명령들에 응답하여 데이터를 처리하는 수단이며, 벡터 로드 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하도록 구성되고, 벡터 스토어 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하도록 구성되는, 상기 처리하는 수단을 구비하는 장치를 제공하고;
상기 처리하는 수단은, 트랜잭션 시작 이벤트에 응답하여 하나 이상의 차후의 명령들을 추론적으로 실행하고, 트랜잭션 종료 이벤트에 응답하여서는 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 하나 이상의 차후의 명령들의 추론 결과들을 커밋하기 위한 수단이고;
상기 장치는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서, 요소간 어드레스 해저드를 검출하는 수단을 구비하고, 이때 K는 J와 상이하고, 상기 조기의 벡터 로드 명령과 상기 후기의 벡터 스토어 명령의 양쪽은 상기 처리회로에 의해 처리된 명령들의 동일한 쓰레드로부터 온 것이고;
상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 검출하는 수단은 상기 처리하는 수단을 기동하여 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하도록 구성된다.
적어도 일부의 예들은,
트랜잭션 시작 이벤트에 응답하여, 하나 이상의 차후의 명령들을 추론적으로 실행하는 단계;
벡터 로드 명령에 응답하여, 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하는 단계;
벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하기 위한 벡터 스토어 명령에 응답하여, 요소간 어드레스 해저드가, 상기 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서 일어나는지를 검출하는 단계-여기서, K는 J와 상이하고, 조기의 벡터 로드 명령과 후기의 벡터 스토어 명령의 양쪽은 명령들의 동일한 쓰레드로부터 온 것이고-;
상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 하나 이상의 차후의 명령들의 또 다른 처리를 중단시키고 상기 하나 이상의 차후의 명령들의 추론 결과들이 커밋되는 것을 방지하는 단계; 및
트랜잭션 종료 이벤트에 응답하여, 상기 하나 이상의 차후의 명령들의 상기 추론 결과들을 커밋하는 단계를 포함하는, 데이터 처리방법을 제공한다.
본 기술의 또 다른 국면들, 특징들 및 이점들은, 아래의 첨부도면들과 관련지어 읽혀지는 다음의 예들의 설명으로부터 명백해질 것이다:
도 1은, 벡터 명령들의 처리를 지원하는 데이터 처리장치의 일례를 개략적으로 도시한 것이고;
도 2는 인접 벡터 로드 명령과 인접 벡터 스토어 명령의 일례를 개략적으로 도시한 것이고;
도 3은 벡터화된 코드의 실행 동안에 트랜잭션 시작 이벤트에 응답하는 방법을 도시하는 흐름도이고;
도 4는 벡터 로드 명령에 응답하여 해저드 추적 데이터를 갱신하는 방법을 도시하는 흐름도이고;
도 5는 상기 해저드 추적 데이터를 클리어하기 위해 트랜잭션 클리어 이벤트에 응답하는 방법을 도시하는 흐름도이고;
도 6은 요소간 어드레스 해저드를 검출하는 방법을 도시하는 흐름도이고;
도 7은 트랜잭션 종료 이벤트에 응답하는 방법을 도시하는 흐름도이고;
도 8은 캐시에서의 데이터와 함께 저장된 해저드 추적 데이터의 제1 예를 도시한 것이고;
도 9는 인접 로드 명령들이 액세스한 최소 및 최대의 어드레스들이 저장 구조로 추적되는 해저드 추적 데이터의 제2 예를 도시한 것이고;
도 10은 비인접(또는 게더(gather)) 벡터 로드 명령의 일례를 도시한 것이고;
도 11은 해저드 추적 데이터의 제3 예를 도시한 것이다.
장치는, 벡터 명령들의 처리를 지원하는 처리회로를 가져도 된다. 벡터 명령의 일례는 벡터 로드 명령이고, 이 명령에 응답하여 벡터 값의 각각의 데이터 요소들에 데이터 스토어의 각각의 장소들로부터의 데이터가 로딩된다. 다른 예는 벡터 스토어 명령이고, 이 명령에 응답하여 상기 처리회로는 상기 벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하여도 된다. 예를 들면, 상기 벡터 로드/스토어 명령에 사용된 벡터 값은 레지스터에 저장되어도 된다.
상기 처리회로는, 트랜잭션 시작 이벤트에 응답하여서는 하나 이상의 차후의 명령들을 추론적으로 실행하고, 트랜잭션 종료 이벤트에 응답하여서는 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 하나 이상의 차후의 명령들의 추론 결과들을 커밋하기 위한 회로다. 해저드 검출회로는, 요소간 어드레스 해저드가, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서 일어나는지를 검출하도록 구성된다. K와 J는 서로 동일하지 않은 정수값이다. 상기 조기의 벡터 로드 명령과 상기 후기의 벡터 스토어 명령의 양쪽은 상기 처리회로에 의해 처리된 명령들의 동일한 쓰레드로부터 온 것이다. 상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 해저드 검출회로는 상기 처리회로를 기동하여 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하여도 된다.
해저드 검출회로가 처리중인 명령들의 동일한 쓰레드내의 후기의 명령과 조기의 명령과의 사이의 어드레스 해저드들을 검출하는 것이 필요하다는 것이 즉시 분명해지지 않아도 된다. 통상, 상기 명령들이 순서적으로 작동중일 것이라고 예상하여서 프로그램 실행의 상이한 쓰레드들에 의해 데이터에 병렬 액세스들을 위해 일반적으로 사용될 트랜잭션 처리나 해저드 검출 등의 메카니즘들이 필요하지 않을 것이다. 벡터 처리를 지원하는 장치에 있어서, 상기 벡터 명령들의 일반적인 용도는, 스칼라 코드로 기록된 프로그램 루프의 다수의 반복들을, 그 루프의 다중 반복들이 벡터 명령들의 시퀀스에 대한 벡터 처리의 각각의 레인들에 매핑하는 상태로 벡터화하는 것이다. 따라서, 벡터 로드 명령은 상기 루프의 다수의 연속적인 반복들에 의해 처리되는 상기 입력들을 벡터 값의 각각의 요소들에 로딩하여도 되고 나서, 하나 이상의 벡터 명령들은 처리하는 각각의 레인들에서 그 요소들의 각각을 처리하여도 되고, 그 후 벡터 스토어 명령은 각각의 장소에 대한 각 레인의 결과를 상기 데이터 스토어에 저장하여도 된다. 이에 따라, 스칼라 명령들을 사용하여 각 반복을 별도로 실행하는 것과 비교하여, 성능을 향상시키고 명령 캐싱, 페칭 및 디코딩의 오버헤드를 감소시킬 수 있다.
그렇지만, 예를 들면 조기의 반복이, 입력으로서 후기의 반복에 사용되는 상기 데이터 스토어에 어떤 값을 기록하여도 되는, 상기 스칼라 루프의 상이한 반복간의 상호의존성이 있을 수도 있다는 것이 가능하다. 상기 루프에 대한 상기 반복들이 벡터 명령들의 동일한 시퀀스의 상이한 레인들에 매핑되면, 벡터화중인 상기 루프의 후기의 반복에 대응한 레인이 조기의 반복에 대응한 레인에 의해 아직 갱신되어 있지 않은 값을 로딩할 수도 있기 때문에 상기 결과들의 일부는 부정확할 수도 있는 것이 가능하다. 일부의 해저드들이 컴파일 시간에 정적으로 특정될 수 있지만, 이것은, 일부의 로드/스토어 어드레스들이 상기 데이터 스토어로부터 판독된 그 밖의 값들에 의존하기 때문에 가능성이 있는 모든 해저드들에 대해 보호할 수 없어서, 해저드가 일어나는지 아닌지의 여부가 실행시간에 동적으로 달라질 수도 있다.
동적 해저드들에 대해 보호하기 위한 해결책의 하나는, 각각의 레인들에서 로드들/스토어들에서 사용한 상기 어드레스들을 체크하기 위해 상기 벡터 시퀀스 전에 추가의 코드를 제공하여, 어드레스 해저드들이 있으면 그 코드가 벡터화되는 것을 방지하는 것이다. 그렇지만, 이러한 체크들은 느리고, 벡터화된 루프의 반복마다 그 체크들의 페널티를 야기하면 성능에 해로울 수 있다. 다른 해결책은, 상이한 레인들에서 상기 로드/스토어 어드레스들간에 해저드가 있을 수 있으므로, 상기 스칼라 루프가 벡터화되지 않아야 하고 대신에, 스칼라 명령들을 사용하여 순서적으로 수행된 원래의 프로그램 코드의 상기 루프의 각 반복으로 처리되어야 하는 것을 컴파일러가 보수적으로 생각하는 것일 수 있다. 그러나, 실제로는, 요소간 어드레스 해저드들은 비교적 드물어서, 이 해결책은, 소수의 경우들이 정확한 결과들을 발생하지 않을 수도 있기 때문에 다수의 경우들에서는 벡터화를 통해 이루어질 수 있는 어떠한 잠재적인 성능 이익도 버릴 위험을 무릅쓴다.
이 문제들은, 상기 처리회로가 트랜잭션 시작 이벤트 후 명령들의 시퀀스를 추론적으로 실행하기 시작할 수 있고, 이후에 그 실행된 명령들의 추론 결과들이 트랜잭션 종료 이벤트 후 커밋되게 함으로써, 해결될 수 있다. 해저드 검출회로는, 상기 트랜잭션 시작 이벤트와 상기 트랜잭션 종료 이벤트와의 사이에서 일어나는 요소간 어드레스 해저드들을 검출하고, 해저드가 상기 트랜잭션 종료 이벤트에 도달하기 전에 검출되면, 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키도록 구성되어서, 상기 추론 결과들은 커밋되는 것이 방지된다. 이 해결책에 의해, 상기 해저드 체킹은, 상기 추론적으로 실행된 결과들이 해저드일 경우에 폐기될 수 있어서, 해저드들이 없다고 생각하는 상기 명령들을 실행하면서 진행하는 것이 안전하므로, 어드레스 해저드들이 없을 때의 경우들에 있어서 상기 코드 자체를 선행하는 코드로부터 지연시키지 않는다. 또한, 일어나는 정적 또는 동적 해저드들을 검출하기 위한 하드웨어 지원이 있으므로, 상기 컴파일러는, 최악의 경우의 시나리오를 보수적으로 생각할 필요가 없어서, 스칼라 루프들의 반복간의 상호의존성들에 대한 가능성이 있을 경우에도 상기 루프들의 벡터화를 행할 수 있다. 따라서, 성능을 향상시킬 수 있다.
상기 요소간 어드레스 해저드가 검출될 때, 상기 해저드 검출회로는, 또한, 상기 처리회로를 기동하여 아키텍처 상태 데이터를 상기 트랜잭션 시작 이벤트에 응답하여 캡쳐된 이전 버전의 상기 아키텍처 상태 데이터로 복원하여도 된다. 예를 들면, 상기 트랜잭션 시작 이벤트 후 상기 명령들의 처리에서 일어나 있던 레지스터들에서의 데이터 값들로 변경들은, 상기 트랜잭션 시작 이벤트시에 캡쳐된 조기의 상태로 롤백(roll back)되어도 된다. 한편, 임의의 추론적으로 수행된 로드/스토어 연산들의 결과들도 되돌려질 수도 있다. 예를 들면, 스토어 명령들과 관련된 기록 데이터는, 상기 데이터 스토어의 캐시나 메모리내에 버퍼링되어도 된다. 이 버퍼링된 데이터 값들은, 요소간 어드레스 해저드가 검출될 때 폐기, 무효화 또는 겹쳐써져도 되거나, 그 트랜잭션 종료 이벤트에 도달하면 상태로 커밋되어도 된다.
일반적으로, 상기 해저드 검출회로는, 상기 조기의 벡터 로드 명령의 데이터 요소 J와 상기 후기의 스토어 명령의 데이터 요소 K와의 사이의 요소간 어드레스 해저드들을 검출하여도 되고, 이때 K는 J와 상이하다. 일부의 경우들에 있어서, 상기 해저드 체킹은, 상기 로드 및 스토어 명령 각각에 대한 임의의 쌍의 상이한 데이터 요소 위치간의 임의의 어드레스 해저드를 체크하여도 된다. 상기 각각의 로드 명령 및 스토어 명령에서 상기 벡터내의 상이한 위치들에서의 데이터 요소들은, 일반적으로, 벡터화중인 상기 스칼라 루프의 상이한 반복들에 대응하여서, 교차 요소(cross-element) 해저드들에 대해 체크함으로써, 상기 루프의 다른 반복으로 설정된 값에 하나의 반복이 의존중인 경우들이 검출될 수 있다.
그렇지만, 실제로, 대부분의 컴파일러들은, 일반적으로, 상기 벡터의 최저 요소로부터 최고 요소까지 순서적으로 상기 벡터들을 가득 채움으로써 스칼라 코드를 벡터화하고, 이때 상기 스칼라 루프의 상기 조기의 반복들은 상기 벡터의 최저로 번호가 매겨진 요소(요소 0)에 할당되고, 상기 루프의 최신의 반복이 상기 벡터의 최고로 번호가 매겨진 요소(요소 N-1, 여기서 N은 상기 벡터에서의 요소들의 수다)에 할당된다. 실제로, 일부의 벡터 아키텍처들은, 상기 컴파일러에게 보텀(bottom) 요소에서 시작하는 상기 벡터를 가득 채우도록 요구하여도 된다. 일반적으로, 상기 스칼라 루프의 후기의 반복이 상기 스칼라 루프의 조기의 반복에 의해 이미 판독되었던 값을 설정하는 것은 문제가 없으므로, 일부의 경우에, 상기 해저드 검출회로는, 그 해저드 검출을 K < J인 경우의 해저드들을 검출하는 것으로 제한하여도 된다(여기서, 상기 해저드 어드레스들은, 조기의 벡터 로드 명령의 보다 높은 요소 J와 상기 후기의 벡터 스토어 명령의 보다 낮은 요소 K에 해당한다). 이 해결책은, 어드레스들이 비교될 요소들의 쌍의 수를 감소시킬 때, 많은 경우에 해저드 추적을 단순화시킬 수 있다. 또한, 트랜잭션을 중단시킬 가능성이 보다 작기 때문에, 해저드 검출을 K < J인 경우들로 제한하는 것도 성능을 향상시킬 수 있다. 그럼에도 불구하고, 일부의 시스템들은, 이것이 보다 적절하다고 생각되면(예를 들면, 상기 컴파일러가 상술한 보텀 업(bottom-up) 해결책과 상이한 방식으로 루프 반복을 벡터 레인들에 자유롭게 매핑하면) 상기 로드 및 스토어 명령의 상이하게 위치결정된 요소들의 임의의 쌍에 사용된 어드레스간의 해저드들을 여전히 검출할 수도 있다.
프로그래머나 컴파일러는, 상기 트랜잭션 시작 이벤트와 트랜잭션 종료 이벤트를 사용하여 요소간 어드레스 해저드들의 위험을 무릅쓰고 명령들의 시퀀스들을 특정할 수 있다. 상기 트랜잭션 시작 이벤트와 트랜잭션 종료 이벤트는, 상기 처리회로에 의해 지원된 전용 트랜잭션 시작 및 종료 명령들일 수 있다. 예를 들면, 상기 트랜잭션 시작 명령 및 트랜잭션 종료 명령은, 상기 처리회로에 의해 처리될 명령들을 디코딩하는 명령 디코더에서 지원한 네이티브 프로그램 명령들이어도 된다. 트랜잭션 시작 명령에 응답하여, 상기 처리회로는, 상술한 것처럼 상기 아키텍처 상태를 캡쳐하는 것 등의 후의 명령들의 추론적 처리를 위한 상기 처리회로를 준비하기 위한 연산들을 행하여도 된다. 상기 트랜잭션 종료 명령에 응답하여, 상기 추론 결과들은 커밋될 수 있고, 임의의 이전에 캡쳐된 버전의 아키텍처 상태는 폐기될 수 있다. 따라서, 상기 프로그래머/컴파일러는, 트랜잭션으로서 취급되는 상기 명령들을 상기 트랜잭션 시작/종료 명령들로 한정하여서 특정할 수 있다.
또는, 상기 트랜잭션 시작 이벤트와 트랜잭션 종료 이벤트의 신호를 보내기 위한 네이티브 명령들을 제공하기보다는, 그 밖의 메카니즘들을 사용할 수 있다. 예를 들면, 상기 트랜잭션 시작 이벤트는, 범용 명령을 사용하여 트랜잭션의 시작부분을 마킹하기 위해 제어 레지스터에서의 제어 비트를 설정함으로써 신호가 보내질 수 있고, 상기 트랜잭션 종료 이벤트는 마찬가지로 제어 레지스터를 갱신하여 상기 트랜잭션의 종료부분의 신호를 보냄으로써 구현될 수 있다.
해저드 추적 스토리지 회로는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 하나 이상의 조기의 벡터 로드 명령들에 사용된 어드레스들을 추적하기 위한 해저드 추적 데이터를 저장하도록 구성되어도 된다. 그 후, 이것은, 상기 해저드 검출회로에 의해, 요소간 어드레스 해저드가 있는지를 후기의 벡터 스토어 명령이 마주칠 때 검출하는데 사용될 수 있다.
일부의 경우들에서, 상기 해저드 추적 스토리지 회로는, 상기 데이터 스토어 자체의 일부를 구비하여도 된다(여기서 데이터는 상기 벡터 로드 명령 또는 벡터 스토어 명령에 응답하여 액세스된다). 예를 들면, 상기 해저드 추적 데이터는, 상기 데이터 자체와 함께 캐시에 저장될 수 있다. 또는, 상기 해저드 추적 스토리지 회로는, 상기 데이터 스토어, 이를테면 상기 처리회로에서 발행한 로드 명령 또는 스토어 명령을 큐잉하기 위한 로드/스토어 큐(queue)나, 메모리에 기록되는 데이터 값들을 저장하기 위한 스토어 버퍼에 의해 처리되는 로드 요구 또는 스토어 요구를 관리하는데 사용된 데이터 구조체의 일부를 구비할 수 있다. 또는, 상기 해저드 추적 스토리지 회로는, 로드 요구 또는 스토어 요구를 관리하도록 구성된 상기 회로, 예를 들면 상기 해저드 검출회로에 의해 유지된 전용 구조체로부터 전체적으로 분리될 수 있다.
상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트에 응답하여 상기 해저드 추적 데이터를 클리어하여도 된다. 이것은, 새로운 트랜잭션이 조기의 트랜잭션에서 이전에 액세스한 다른 어드레스와 같은 어드레스에 액세스할 때 상기 해저드 검출회로가 해저드들을 검출하는 것을 방지한다. 또는, 상기 해저드 추적 데이터는, 상기 트랜잭션 종료 이벤트에 응답하여 클리어될 수 있어, 상기 해저드 추적 데이터가 새로운 트랜잭션을 시작하면 초기화될 것이다.
상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트 후(하지만 상기 트랜잭션 종료 이벤트 전에) 일어나는 트랜잭션 클리어 이벤트에 응답하여 상기 해저드 추적 데이터도 클리어하여도 된다. 예를 들면, 상기 트랜잭션 클리어 이벤트는, (상기 명령 디코더에서 지원한 네이티브 명령이어도 되는) 트랜잭션 클리어 명령에 의해 기동될 수 있다. 상기 해저드 추적 데이터를 클리어하기 위해 전용 트랜잭션 클리어 명령을 제공하는 것은, 하나의 트랜잭션내에서 상기 벡터화된 루프의 다중 반복을 실행할 수 있는데 특히 유용할 수 있다. 상기 트랜잭션 시작 이벤트 또는 상기 트랜잭션 종료 이벤트에 응답하여 행해지는 액션들은, 성능 오버헤드를 발생시킬 수도 있다. 예를 들면, 예를 들면, 상기 트랜잭션 시작 이벤트에 응답하여, 아키텍처 상태가 보존될 필요가 있을 수도 있고, 또 상기 트랜잭션 종료에서 상기 추론 결과들은 커밋될 필요가 있을 수도 있다. 스칼라 루프가 N 요소들 각각의 벡터들을 사용하여 벡터화되면, 그 벡터화가 상기 루프의 N 연속적 반복들의 블록에 대응한 하나의 벡터의 레인들내에 해저드들을 도입할 수도 있지만, 그 벡터화는, 예를 들면 반복 N+1이 임의의 경우에 상기 이전의 N 반복들 전부를 완료한 후 행해질 것이므로, N 반복들보다 많은 반복 사이에 따로 해저드들을 도입하지 않는다. 그러므로, N 반복들이 처리되어 있을 때 상기 해저드 추적 데이터를 클리어하여, 불필요한 중단들을 피하는 것이 바람직할 수도 있다. 그렇지만, 별도의 트랜잭션으로서 상기 루프의 N반복들의 각 블록을 실행하는 것은, N반복들이 완료할 때마다 상기 트랜잭션 진입/나가기 오버헤드를 초래할 수도 있다. 이러한 오버헤드는, 상기 해저드 추적 데이터를 실제로 상기 트랜잭션 자체를 종료하지 않고 클리어할 수 있는 신호를 보내는 트랜잭션 클리어 명령을 제공함으로써 감소될 수 있다. 이렇게 하여, 상기 트랜잭션 클리어 명령은 상기 루프에 대한 N반복들의 블록이 벡터 코드 시퀀스로 처리되었을 때마다 실행될 수 있고, 상기 루프의 N보다 많은 반복들은, 해저드들에 대해 보호되면서 단일의 트랜잭션내에서 처리될 수 있다.
일반적으로, 상기 해저드 검출회로는, 트랜잭션 시작 이벤트 후 추론적으로 실행되는 벡터 로드 명령들에 사용된 어드레스들에 근거하여 상기 해저드 추적 데이터를 갱신하여도 된다. 그리고, 상기 해저드 검출회로는, 그 해저드 추적 데이터와, 요소간 어드레스 해저드가 일어났는지를 검출하는데 이후의 벡터 스토어 명령들에서 사용한 상기 어드레스들을 비교할 수 있다.
일부의 경우들에서, 상기 해저드 검출회로는, 벡터 로드 명령들 전부에 응답하여 상기 해저드 추적 데이터를 갱신하지 않아도 되지만, 그 갱신들을 소정의 타입의 벡터 로드 명령으로 제한하여도 되고, 이때 상기 해저드 추적 데이터의 갱신은 상기 소정의 타입이외의 벡터 로드 명령들에 응답하여 억제된다(또한, 상기 추적 데이터에 대한 갱신들은 스칼라 로드 명령들에 응답하여 억제되어도 된다). 예를 들면, 상기 소정의 타입의 벡터 로드 명령은, 그것의 오피코드에 의해, 상기 명령 인코딩내의 플래그에 의해, 또는 상기 벡터 로드 명령의 상기 인코딩에 상관없는 암시적 표시, 이를테면 이후의 벡터 로드 명령이 상기 해저드 검출회로를 사용하여 추적되는 상기 타입을 가질 신호를 보내는 상기 벡터 코드내의 상기 벡터 로드 명령 앞에 놓인 힌트 명령에 의해, 그 밖의 타입들의 벡터 로드 명령들과 구별될 수 있다.
종종, 상기 프로그래머 또는 상기 컴파일러는, 예를 들면, 특정한 로드들이, 임의의 이후의 스토어의 상기 어드레스와 상이한 것으로 알려진 정적으로 결정된 어드레스를 사용하기 때문에, 또는 벡터화되는 상기 스칼라 루프의 상이한 반복간의 상호의존성이 없기 때문에, 요소간 어드레스 해저드들을 야기시킬 위험이 없다고 인식할 수도 있다. 한편, 이후의 스토어와의 충돌 위험이 있는 특별한 로드가 있으면, 상기 소정의 타입의 벡터 로드 명령은 그 로드에 사용될 수 있다. 상기 해저드 추적 데이터의 갱신을 소정의 타입의 벡터 로드 명령으로 제한함으로써, 이것은, (상기 추적 저장 용량의 보다 효율적인 사용을 이용 가능하게 할 수 있는) 추적되는 어드레스들의 수를 감소시킨다. 또한, 후술하듯이, 일부의 경우들에서 어드레스를 추적하는 하드웨어 비용을 줄이기 위해서, 상기 어드레스 추적이 비교적 부정확할 수도 있다, 예를 들면, 상기 어드레스 추적이, 개개의 어드레스들보다는 어드레스들의 블록들의 그래뉴래러티(granularity)에서 로드/스토어 액세스들을 추적하여도 된다. 이것이 의미하는 것은, 모든 타입들의 로드에 대한 해저드들을 검출하면, 로드 및 스토어가 어드레스들의 동일한 블록에 액세스하지만 실제로는 동일한 어드레스를 액세스하지 못하는 경우 검출된 긍정 오류 해저드들에 의해 생긴 보다 빈번한 중단들을 각오할 수도 있다는 것이다. 상기 해저드 검출을 상기 소정의 타입의 로드에 한정함으로써, 트랜잭션들은, 상기 프로그래머/컴파일러가 해저드들이 일어나지 않았을 것이라고 (상기 소정의 타입의 로드를 사용하지 않도록 선택함으로써) 이미 표시된 그 밖의 타입의 로드에 대한 긍정 오류 해저드들로 인하여 불필요하게 중단되지 않는다.
상기 해저드 추적 데이터를 구현하는 방식들이 일부가 있다. 일례에서, 상기 해저드 추적 데이터는, 각 추적 엔트리가, 어드레스의 각각의 블록에 대응하고 그 어드레스들의 블록내의 어드레스를 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위해 사용하였던 최고의 데이터 요소 위치를 특정하는, 다수의 추적 엔트리들을 포함하여도 된다. 본 문맥에서, 최고의 데이터 요소 위치는, 상기 벡터 오퍼랜드의 최상위 끝에 가장 가까운 위치를 말한다. 그리고, 상기 해저드 검출회로는, 상기 후기의 벡터 스토어 명령에 대한 주어진 데이터 요소 위치에 사용된 어드레스를 포함하는 어드레스들의 블록에 대응한 상기 추적 엔트리가 상기 주어진 데이터 요소 위치보다 높은 데이터 요소 위치를 특정할 때, 상기 후기의 벡터 스토어 명령에 대한 상기 요소간 어드레스 해저드를 검출하여도 된다(이것은, 요소간 해저드 검출을 상술한 것처럼 K < J인 경우들로 제한하는 해결책의 일례다). 요약하면, 어드레스들의 주어진 블록에 액세스하고 있는 최고 요소를 추적하고, 보다 낮은 데이터 요소 위치로부터 어드레스들의 그 블록에 이후의 스토어가 액세스하려고 할 때 해저드의 신호를 보냄으로써, 이것은, 상기 루프의 후기의 반복이 순서를 바꾸어 어떤 값에 액세스한 후 상기 루프의 조기의 반복이 그 값을 갱신하였을 때(해저드들을 판독한 후 기록)의 경우들을 검출하고, 그 경우에 중단되는 상기 트랜잭션을 기동할 수 있다.
해저드 추적에 대한 이 해결책에서의 옵션의 하나는, 그 데이터 자체와 함께 상기 캐시내에 상기 추적 엔트리들을 저장하는 것이다. 즉, 상기 데이터 스토어는 데이터를 저장하기 위한 다수의 캐시 라인들을 포함하는 캐시를 구비하여도 되고, 상기 추적 엔트리들은 각 캐시 라인이 그 캐시 라인에 대응한 어드레스들의 하나 이상의 블록들에 대한 상기 추적 엔트리들의 하나 이상과 관련되는 상태로 상기 캐시에 저장되어도 된다.
상기 추적 엔트리들이 어드레스들의 블록들에 대한 액세스들을 추적하는 그래뉴래러티는, 달라질 수도 있다. 일부의 경우들에서, 각 캐시 라인은 단일의 추적 엔트리를 포함하여도 되고, 그래서 후기의 스토어가 상기 조기의 로드보다 낮은 요소 위치로부터 그 조기의 로드와 같은 캐시 라인에 액세스하는 경우, 해저드는 (상기 스토어가 실제로 상기 조기의 로드와 같은 캐시 라인내의 상이한 어드레스에 액세스하는 경우에도) 검출되어도 된다. 그 밖의 구현들은, 보다 작은 단위 레벨로 액세스들을 추적하여도 되고, 상기 캐시 라인의 상이한 부분들에 대한 액세스들을 추적하기 위한 캐시 라인마다 다중 추적 엔트리들을 제공하여도 되어, 해저드들을 보다 정밀하게 검출한다. 따라서, 검출된 해저드는, 상기 로드/스토어가 실제로 동일한 어드레스에 액세스하였을 것이다 - 그것은, 상기 해저드 검출회로가 부정확한 추적 데이터에 근거하여 단순히 충돌 액세스의 위험을 검출하였을 수도 있다는 것일 수도 있다는 것을 반드시 의미하지 않는다는 것을 알 것이다. 보다 더/보다 덜 정밀한 해저드 추적의 하드웨어 비용과 성능 이점간에 트레이드 오프가 있다.
상기 캐시를 사용하여 이전의 로드들에서 액세스한 상기 어드레스들을 추적하기 위한 상기 추적 엔트리들을 저장할 때, 주어진 캐시 라인은 다른 데이터가 상기 캐시에 저장될 필요가 있을 때 상기 캐시로부터 퇴거되어도 되는 것이 가능하다. 이때, 대응한 추적 엔트리도 퇴거되어서, 상기 이전의 로드 어드레스들에 관한 정보는 손실될 수 있다. 이 때문에, 어드레스들의 대응한 블록내의 적어도 하나의 어드레스가 상기 트랜잭션 시작 이벤트 이후에 조기의 벡터 로드 명령을 위해 사용되었던 추적 엔트리를 갖는 캐시 라인의 퇴거시에, 상기 해저드 검출회로는, 실제로 해저드를 검출하였던 경우와 마찬가지로, 상기 처리회로를 기동하여, 상기 트랜잭션 시작 이벤트 후 상기 명령들의 또 다른 처리를 중단시키고 그 추론 결과들이 커밋되는 것을 방지하여도 된다. 실제로, 상기 트랜잭션들은, 비교적 짧아서, 퇴거중인 로드 명령에 의해 이전에 액세스된 데이터가 상기 트랜잭션의 끝(또는 클리어 명령)에 도달되기 전에 퇴거될 가능성은 비교적 낮을 수도 있지만, 그 드문 경우에 트랜잭션들을 중단시킬 능력을 제공함으로써, 이것은 상기 추적 데이터가 더 이상 상기 캐시에 있지 않기 때문에 놓치는 해저드들에 대해 보호하고, 상기 퇴거된 추적 정보가 메모리나 다른 구조체에 유지되는 보다 복잡한 대안들보다 보다 효율적일 수도 있다.
다른 예에서, 상기 해저드 추적 데이터는, 상기 트랜잭션들 시작 이벤트의 하나로부터 추론적으로 실행되었던 대응한 벡터 로드 명령을 위해 액세스된 최소 어드레스와 최대 어드레스 중 적어도 하나를 각각 특정하는 하나 이상의 로드 추적 엔트리들을 포함하여도 된다. 이 해결책은, 상기 벡터의 최하위 요소가 상기 로드/스토어 연산을 위한 주어진 어드레스를 사용하고 상기 벡터의 이후의 요소들이 상기 벡터의 최하위 요소에 사용된 어드레스로부터 연속적으로 후속하는 연속적인 어드레스들을 사용하는, 인접 벡터 로드 또는 스토어 명령들에 유용할 수 있다. 이러한 명령들에 대해서, 주어진 로드 명령에 사용된 상기 최소 어드레스와 상기 최대 어드레스 중 적어도 하나를 특정하는 것은, 이후의 스토어가 상이한 요소 위치에서 대응한 어드레스에 액세스할지를 판정 가능하기에 충분할 수 있다. 예를 들면, 상기 해저드 검출회로는, 후기의 벡터 스토어 명령에 대한 최소 어드레스가 상기 최소 어드레스보다 크고 상기 최대 어드레스이하일 때, 상기 로드 추적 엔트리들 중 하나로 나타낸 요소간 어드레스 해저드를 검출하여도 된다. 일부의 경우들에서는, 예를 들면 벡터 명령들 전부가 고정된 수의 요소들을 사용하여 상기 최대 어드레스가 상기 최소 어드레스부터 또는 반대로 암시적일지도 모르는 경우에도, 상기 최소 어드레스와 상기 최대 어드레스의 양쪽을 특정하는 것이 필요하지 않을 수도 있다. 또한, 일부의 경우들에서는, 상기 최소 어드레스와 상기 최대 어드레스 중 한쪽이 오프셋을 통해 또는, 명시적 어드레스보다는 상기 벡터의 요소들의 총수로서 특정될 수 있어, 여전히 그 실제의 최대 또는 최소 어드레스가 특정될 수 있다.
해저드들을 추적하는 다른 해결책은, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 하나 이상의 벡터 로드 명령들의 각각의 데이터 요소들에 대해 액세스된 하나 이상의 어드레스들을 특정하는 어드레스 리스트를 제공하는 것일 수도 있다. 예를 들면, 상기 어드레스 리스트는, 액세스된 상기 액세스들과 그 어드레스들이 액세스되었던 상기 요소 위치와의 사이의 대응을 특정하여도 된다. 그리고, 상기 해저드 검출회로는, 상기 후기의 벡터 스토어 명령에 대한 주어진 데이터 요소 위치에 대응한 어드레스가 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령에 대한 그 주어진 데이터 요소 위치이외의 데이터 요소 위치에 대응한 벡터 어드레스와 같을 때, 상기 요소간 어드레스 해저드를 검출하여도 된다. 이 해결책은, 상기 요소들의 각각에 대해 사용되는 비연속적 어드레스들이나 어드레스 오프셋들을 지정하여도 되는 다른 벡터 입력으로부터 상기 벡터 연산의 각 요소에서 사용한 상기 어드레스들을 얻는, 비인접 로드 또는 스토어 명령에 특히 유용할 수 있다. 이 경우에, 상기 벡터의 후기의 요소들에 대한 상기 어드레스는 상기 조기의 요소들로부터 결정될 수 있고, 그래서 그 대신에 액세스된 상기 어드레스들의 각각이 추적되어도 된다. 그럼에도 불구하고, 이 해결책은, 인접 타입 로드 스토어 명령들에도 사용될 수 있었다. 예를 들면, 비인접 명령들이 지원되는 경우, 로드/스토어 명령의 타입들에 대해 공통 추적 포맷을 사용하는 것이 보다 효율적일 수도 있다.
도 1은 벡터 처리를 지원하는 데이터 처리장치(2)의 일례를 개략적으로 도시한 것이다. 상기 장치(2)는, 명령들에 응답하여 데이터 처리 연산들을 행하는 처리회로(4), 이를테면 프로세서, 예를 들면 CPU(중앙처리유닛) 또는 GPU(그래픽 처리 유닛)를 갖는다. 상기 처리회로(4)는, 예를 들면, 명령 캐시(8)로부터 실행되는 명령들을 페치하기 위한 페치 스테이지(6)와, 적절한 처리 연산들을 행하기 위해 이후의 스테이지들을 제어하기 위한 제어신호들을 생성하기 위해 상기 페치된 명령들을 디코딩하는 디코드 스테이지(10)와, 디코딩된 명령들의 요구된 오퍼랜드들이 이용가능해질 때까지 실행을 대기하는 그 디코딩된 명령들을 큐잉하고 이때 실행을 위해 발행되는 이슈(issue) 스테이지(12)와, 레지스터들(16, 18)로부터 판독된 오퍼랜드들을 사용하여 상기 대응한 처리 연산들을 행하기 위해 상기 발행된 명령들을 실행하는 실행 스테이지(14)와, 상기 실행된 명령들의 결과들을 상기 레지스터들(16, 18)에 역으로 기록하는 라이트백 스테이지(20)로 이루어진, 다수의 파이프라인 스테이지들을 포함하는 처리 파이프라인을 구비한다. 상기 실행 스테이지(14)는, 상이한 타입들의 명령들을 실행하기 위한 다수의 실행부들, 이를테면 산술 또는 논리 연산을 행하기 위한 산술/논리 유닛(ALU)(22), 부동소수점 연산들을 행하기 위한 부동소수점 유닛(24) 및 로드 또는 스토어 연산들을 행하기 위한 로드/스토어 유닛(26)을 구비한다. 그 밖의 타입들의 처리 유닛들이 제공될 수 있고 이것은 단지 일례에 지나지 않는다는 것을 알 것이다. 본 예는 파이프라인 스테이지들의 특별한 조합을 갖지만, 그 밖의 예들은 추가의 스테이지들을 가질 수 있다. 예를 들면, 비순차적 프로세서에 있어서, 레지스터 리네임 스테이지는 명령들에 의해 지정된 아키텍처 레지스터 지정자들을 하드웨어로 제공된 상기 레지스터들(16, 18)을 특정하는 물리적 레지스터 지정자들에 재매핑하기 위해 상기 디코드 스테이지(10)와 상기 이슈 스테이지(12)와의 사이에 설치될 수 있고, 추가의 자원들 이를테면 리오더(reorder) 버퍼는, 상기 페치 스테이지(6)에 의해 상기 캐시(8)로부터 명령들을 페치하였던 상기 프로그램 순서와 상이한 순서로 실행된 그 명령들의 완료를 추적하도록 구성되어도 된다.
상기 파이프라인(4)은, 단일의 데이터 값을 각각 포함하는 스칼라 오퍼랜드들에 관한 연산들을 행하는 스칼라 명령들과, 단일의 레지스터내에 저장된 다수의 독립적 데이터 요소들을 포함하는 벡터 값의 처리를 포함하거나 벡터 값을 생성하는 벡터 명령들과의 처리를 지원한다. 별도의 스칼라 레지스터들(16)과 벡터 레지스터들(18)은, 상기 스칼라 값들과 상기 벡터 값들을 각각 저장하도록 구성되어도 된다. 일부의 명령들은 스칼라 오퍼랜드와 벡터 오퍼랜드의 양쪽의 처리를 포함하는 혼합된 명령들이어도 되고, 그 밖의 명령들은 벡터 오퍼랜드들만 또는 스칼라 오퍼랜드들만을 처리하여도 된다. 간략함을 기하기 위해서 이것을 도 1에 도시하지 않지만, 일부의 경우들에서 상기 실행 스테이지(14)는, 스칼라 및 벡터 연산들을 각각 처리하기 위한 별도의 실행 유닛들, 예를 들면 별도의 스칼라 ALU 및 벡터 ALU를 구비하여도 된다. 상기 벡터 실행 유닛은, 단일의 명령에 응답하여 처리하는 상기 레인들의 각각을 수행하기 위한 상기 회로를 구비하여도 된다. 일부의 경우들에서, 다수의 병렬 실행 유닛들은, 주어진 벡터 명령에 응답하여 병렬로 처리하는 다중 레인들을 수행하도록 구성되어, 성능을 향상시킬 수도 있다. 다른 해결책들은, 단일 세트의 실행 유닛들을 사용하여 순차로 처리하는 상기 레인들을 수행하거나, 상기 벡터 처리의 2개 이상의 레인들의 블록은 병렬로 수행될 수 있지만 전체 벡터는 이 실행 유닛들을 통해 수 사이클들을 필요로 할 수도 있다. 따라서, 벡터 처리는, 상기 레인들의 전부가 병렬로 처리될 필요가 있다는 것을 암시하지는 않는다. 벡터 레인들의 병렬 처리가 성능을 향상시키지만, 상기 명령 캐시(9), 페치 스테이지(6) 및 디코드 스테이지(10) 전부에서 보다 적은 명령들을 처리할 때 상기 감소된 오버헤드 때문에, 레인들 전부가 순차로 처리되는 경우에도 스칼라 코드와 비교하여, 벡터화된 처리의 이점도 있다.
벡터 연산의 일례는, 메모리 시스템으로부터의 데이터를 벡터의 각각의 데이터 요소들에 로딩하기 위한 벡터 로드 명령이거나, 또는 상기 벡터 레지스터들(18) 중 하나에서 벡터의 각각의 데이터 요소들로부터의 데이터를 상기 메모리 시스템에 저장하기 위한 벡터 스토어 명령이어도 된다. 도 1의 상기 예에서, 상기 메모리 시스템은, 레벨 1 명령 캐시(8), 레벨 1 데이터 캐시(28), 데이터와 명령들 양쪽에 사용된 공유 레벨 2 캐시(30), 및 메인 메모리(32)를 구비한다. 이것은 단지 가능한 메모리 계층의 일례에 지나지 않고, 그 밖의 구성들이 사용될 수 있다는 것을 알 것이다.
도 2는 벡터 로드 명령과 벡터 스토어 명령의 일례를 개략적으로 도시한 것이다. 도 2의 상부에 도시된 것처럼, 벡터 로드 명령에 대해, 다수의 처리 레인들은, 각 처리 레인이 상기 데이터 스토어로부터 메모리 어드레스 공간(40)의 주어진 어드레스에 의해 특정된 데이터 값을 타겟 벡터 레지스터 Z0의 대응한 데이터 요소에 로딩하는 상태로 수행된다. 본 예는, 상기 타겟 레지스터의 최하위 요소 A[0]에 사용된 상기 어드레스가 상기 스칼라 레지스터 파일(16)으로부터 판독된 기본 레지스터 값 Ra에 오프셋 #40을 가산하여서 얻어지고, 이후의 요소들 A[1] 내지 A[3]에 대한 어드레스들이 요소 A[0]에서 사용한 어드레스 후에 연속적으로 후속하는, 인접 로드 명령을 도시한 것이다. 본 예가 (기본 레지스터 + 오프셋) 어드레싱 모드를 도시하지만, 그 밖의 구현들은 또 다른 스칼라 레지스터를 사용하여 상기 오프셋을 지정하여도 되거나, 즉시 어드레스를 사용하여도 된다.
도 2의 하부에 도시된 상기 스토어 명령에 대해서, 처리하는 각 레인은, 상기 벡터 레지스터(Z1)의 대응한 요소들로부터 판독된 상기 데이터 값을 그 레인에 대해 계산된 상기 어드레스에 대응한 상기 데이터 스토어의 일 장소에 저장한다. 또, 상기 인접 타입 스토어 명령에 대해서, 상기 어드레스들은, 상기 어드레스 공간(40)내에서 연속적이다. 벡터 아키텍처들이 성능을 향상시키는 방식의 하나는, 루프 벡터화에 의한 것이다. 즉, 루프{Ii...In}의 다중 반복들은, 벡터{ei...en}의 다중 요소들내에서 실행된다. 이것이 가능한 경우, 상기 루프의 실행은, (마이크로아키텍처 구현이 벡터 레인들을 병렬로 실행하는 정도에 따라) 인자 n까지 가속화될 수 있다.
상술한 것처럼 루프들이 벡터화될 수 없는 이유는 많이 있다. 하나는 메모리 해저드들에 기인한 것이다. 다시 말해서, 상기 루프의 반복, 가령 Ii는 I(i+m)가 모두 사용할 필요가 있는 새로운 값을 생성하는 것 같은 것이다. 단순한 예를 아래에 도시한다:
[예 1]
Figure pct00001
스칼라 코드에서, 이 루프는 다음과 같이 구현되어도 된다:
[예 2]
Figure pct00002
이것은 다음의 벡터 연산들에 대해 벡터화되어도 된다:
[예 3]
Figure pct00003
상기 벡터 명령 구문은 아래와 같이 보이게 만들 수도 있다:
[예 4]
Figure pct00004
(간략을 기하기 위해서, 여기서 로드들과 스토어들에 관한 술어를 무시한다).
이러한 경험이 없는 해결책은, (예 3에서 진하게 도시된 연산들로 도시된 것처럼) 반복 i와 반복 i+3 사이에 해저드가 있기 때문에 원래의 스칼라 버전의 의미론을 유지하지 못한다. 이에 따라, 사이클 0에서 어드레스[a,#64]로부터의 상기 로드가 이후 사이클 2에서 저장된 사이클 1에서 이루어진 증분을 반영하지 않으므로, 결과들이 부정확하게 된다.
상기 예에서, 이 의존성들은, 정적으로 결정될 수 있다. 그렇지만, 일반적인 경우에, 사이클 0에서의 상기 로드와 사이클 2에서의 상기 스토어에 사용된 상기 어드레스들은, 간접지정(indirection)(다른 메모리 액세스)으로부터 나올 수 있고, 그 경우에 상기 의존성은 단지 실행시간에 결정될 수 있을뿐이다. 우리는 이들을 동적 의존성이라고 한다. 많은 경우에 있어서, 이러한 동적 의존성은 매우 드물지만, 유감스럽게도, 이러한 경우들에, 컴파일러들은 적게 잡는 경향이 있고 상기 루프를 벡터화하지 않는다. 이것이 의미하는 것은, 의존성이 없을 때 대다수의 경우에 잠재적인 성능 향상이 손실된다는 것이다.
대신에, 여기서 설명된 상기 해결책은, 일반적으로, 의존성들이 없고, 그 성능에 의한 이점들이 루프 벡터화로부터 얻어지지만, 상기 요소간 의존성들이 일어날 때, 그들이 검출되어 해결되도록 보장하는 메카니즘을 제공한다는 것을 고려한다. 이러한 의존성들을 처리하는 다른 해결책은, 명시적 어드레스 비교 명령들을 사용하여 충돌할 가능성이 있는 로드들에 주석을 달음으로써 의존성들에 대해 항상 테스트하는 것일 것이다. 그렇지만, 이 연산들은 비용을 초래하고, 이러한 명령들의 마이크로아키텍처 구현들의 속도가 느리다.
대신에, 우리는 의존성 트랜잭션의 개념을 도입한다. 의존성 트랜잭션(DTX)내에서, 우리는, 의존성이 검출되면 상기 아키텍처 상태를 롤백하고 어떠한 추론적 갱신들도 상기 트랜잭션의 끝에서 안전한 커밋 포인트가 될 때까지 보여지는 것을 방지할 수 있는 한, 상기 코드를 안전하게 벡터화할 수 있다. 이러한 개념을 상기 예에 적용함으로써, 상기 어셈블리 코드는 아래와 같이 보이게 만들 수도 있다:
[예 5]
Figure pct00005
트랜잭션 시작(thazard) 명령을 실행하면, 상기 하드웨어는 상기 아키텍처 상태의 체크포인트나, 그의 일부분을 취하고, 그 캐시들을 특수한 트랜잭션 에일리어스(alias) 모드로 놓을 것이다. 상기 캐시들은, 구조체(예를 들면, 레벨 1 프라이빗 데이터 캐시)내에 잠재적으로 불안전한 연산들로부터 추론적 메모리 갱신들을 버퍼링할 수 있다. 상기 추론은, 트랜잭션 종료(tend) 명령이 실행되고 그 트랜잭션이 성공적으로 커밋되거나, 상기 트랜잭션이 자체 중단되거나, 충돌로 인해 중단할 때까지, 계속된다.
상기 트랜잭션 시작 명령과 상기 트랜잭션 종료 명령과의 사이에서 추론적으로 실행된 명령들을 포함하는 의존성 트랜잭션(DTX)에 대해서는, 요소간 어드레스 해저드들(교차 요소 충돌들이라고도 한다)이 검출된다. 교차 요소 충돌은, 판독 후 기록 해저드로서 보여질 수도 있고, 이때 상기 판독은 요소 i로부터 온 것이고, 상기 기록은 요소 i-j(여기서, j는 포지티브다)로부터 온 것이다. 이러한 해저드를 예 3의 코드에서 볼 수 있다. 요소 0에서의 상기 스토어(사이클 3)는, 요소 3에서의 조기의 로드(사이클 0)에 의해 판독되어 있다. 충돌은, 임의의 인접 벡터 스토어 명령에서 액세스한 최저의 어드레스가 (선행하는) 인접 벡터 로드 명령에서 액세스한 최고의 어드레스이하이고 상기 벡터 로드 명령에서 액세스한 최저의 어드레스보다 큰 경우에 의존성 트랜잭션에서 일어난다.
요소 추적은, 통상의 또는 캐시가능한 메모리 연산마다(또는 일부의 구현들에서는, 제한된 세트의 메모리 연산들, 이를테면 아래에 설명된 것과 같은 소정의 타입의 로드들에 대해서만) 제공된다. 이러한 각 메모리 연산은, 그 연산을 생성하는 상기 요소(벡터 레인)를 지정하는 정보를 캡쳐하여도 된다. 이 요소는, 임의의 이후의 메모리 연산이 상기 메모리 어드레스 공간에서 동일한 어드레스(또는, 보다 부정확한 매핑이 사용되는 경우의 어드레스들의 동일한 블록)를 터치하는 최대의 요소를 특정할 수 있도록 구조체에서 캡쳐되어도 된다.
예를 들면, 요소들은 64비트 요소 그래뉴래러티로 추적될 수 있고, 주어진 캐시 라인에 액세스하는 최대의 요소는 상기 L1 캐시에 상기 캐시 라인과 저장된다. 즉, 우리는 캐시 라인당 하나의 "최대한의 요소"를 캡쳐한다. 벡터당 요소들의 수는 (VLb/64b)이고, 여기서 VLb는 벡터 길이이고, 그래서 512비트 벡터 아키텍처에서 우리는 8개의 별개의 요소들을 추적할 것이고, 그 추적 비트들은 캐시 라인당 3비트를 포함할 것이다.
[예 6]
캐시 라인- 어드레스 태그, 코히어런스 상태, TM상태(트랜잭셔널 메모리 목적들을 위한 해저드들을 추적하기 위한 상태), 및 DTX 에일리어스 상태를 표시함:
Figure pct00006
상기 예 3을 참조하면, 우리는 각 벡터 로드 명령 후 상기 캐시 라인 에일리어스 비트들을 갱신한다:
[예 7]
Figure pct00007
//#0-#63 범위에서의 어드레스들을 액세스하는 최대의 요소는 요소 2이고, #64-127 범위에서의 어드레스들을 액세스하는 최대의 요소는 요소 3이다.
add z0.d, z0.d, #4
//사이클 1은 이것이 벡터 로드 연산이 아니므로 상기 캐시 라인 에일리어스 지수로 변경하지 않는다.
Figure pct00008
//요소 0을 갖는 str@ #64는, 의존성 해저드가 있다는 것을 의미하는 반복순서 범위 밖에서 요소 3이 이 캐시 라인에 액세스하였으므로, 성공할 수 없다.
상기 스토어(사이클 3)의 포인트에서, 메모리 장소[a, #64]에서 제2 캐시 라인에 있는 데이터는, 후기의 로드에 의해, 반복 순서 범위 밖에서 판독되어 있다는 것이 분명하다. 이때, 상기 캐시는, DTX 중단의 신호를 상기 프로세서(4)에 보낸다. 상기 프로세서는 아키텍처 상태를 롤백하기 위해 필요한 조치를 취하고, 상기 캐시들은 추론적 수정들을 제거하고, 상기 에일리어스 비트들을 클리어한다. 이때, 상기 프로세서(4)는, 진척이 되는 것을 보장하기 위해서, 스칼라 코드를 사용하여, 또는 파티션 사이즈(상기 벡터 루프의 주어진 반복을 처리된 벡터 요소들의 수)를 감소시킴으로써, 재시도할 수 있다. DTX 중단(또는 그 밖의 형태들의 중단들)이 없을 경우에, 상기 코드는 상기 추론적 메모리 수정들을 안전하게 공개한다. 이것은, 트랜잭션 종료(tcommit) 명령이 상기 트랜잭션의 끝을 표시하면서 이루어질 수 있다.
요약하면, 상기 프로그래머는, 레인간(inter-lane) 해저드들이 가능할 수도 있는 벡터 명령들의 시퀀스들을 한정하기 위해 트랜잭션 시작 이벤트와 트랜잭션 종료 이벤트를 규정할 수 있고, 상기 트랜잭션의 시작과 끝 사이에서, 도 1에 도시된 것처럼 상기 장치(2)내에 설치된 해저드 검출회로(50)는, 로드 명령 및 스토어 명령에 의해 액세스되는 상기 어드레스들을 추적하고, 레인간 해저드가 벡터 로드 명령과 이후의 벡터 스토어내의 상이한 요소 위치들에서의 요소들 사이에서 검출되면 상기 트랜잭션의 처리를 중단시켜도 된다. 해저드 추적 스토리지(52)는, 독립적인 데이터 구조체로서 제공되어도 되긴 하지만, 그 밖의 예들에서 상기 해저드 추적 데이터가 상기 L1 데이터 캐시(28)내와 같은 상기 데이터 스토어 자체의 일부내에 저장되어도 되기 때문에, 도 1에서 점선으로 도시되어 있다. 일부의 경우들에서, 상기 해저드 검출회로(15)는, 상기 로드 연산 및 스토어 연산을 제어하기 위한 상기 제어회로의 일부내에, 이를테면 로드/스토어 유닛(26)내에 또는, 상기 캐시(28)와 관련된 캐시 제어기내에도 구비되어도 된다.
도 3 내지 도 7에서 설명된 이하의 흐름도들은, 상기 의존성 트랜잭션들을 처리하는 일례를 제공한다.
도 3은 트랜잭션의 시작에서 행해진 연산들을 도시한 것이다. 단계 60에서, 상기 처리회로(4)는, 트랜잭션 시작 이벤트가 일어났는지, 예를 들면 트랜잭션 시작 명령이 마주쳤는지를 검출한다. 상기 트랜잭션 시작 이벤트에 응답하여, 단계 62에서, 상기 처리회로(4)는, 적어도 현재의 아키텍처 상태의 서브세트를 캡쳐한다. 예를 들면, 상기 스칼라 레지스터들(16) 및 벡터 레지스터들(18)의 적어도 일부의 콘텐츠는, 상기 트랜잭션이 중단되어야 하는 경우 나중에 그 데이터를 복원할 수 있도록 상기 메모리 시스템(28, 30, 32)에 보존되어도 된다. 또는, 복원 레지스터들의 전용 세트는, 아키텍처 상태의 현재의 스냅샷을 백업하여, 상기 메모리 시스템에 보존할 필요가 없도록 구성되어도 된다. 또한, 현재의 아키텍처 상태는, 제어 레지스터들의 콘텐츠, 예를 들면 현재의 실행 포인트를 가리키는 프로그램 카운터, 예외 처리 후 처리를 복귀할 복귀 어드레스를 지정하는 링크 레지스터와 같은 그 밖의 정보나, 상기 프로세서의 현재의 상태를 표현하는 그 밖의 정보도 포함하여도 된다.
단계 64에서, 상기 해저드 추적 스토리지(52)에 있는 상기 해저드 추적 데이터는, 클리어된다. 예를 들면, 상기 추적 해저드 데이터는, 상기 현재의 트랜잭션내의 벡터 로드 명령에서 이전에 액세스하므로 더 이상 임의의 어드레스들을 가리키지 않도록, 갱신된다. 단계 66에서, 현재의 실행의 쓰레드의 처리는 추론적으로 계속되어, 이후에 실행된 명령들의 결과들이 아직 상태로 커밋되지 않는다. ALU, 부동소수점, 로드 명령들, 또는 상기 스칼라 레지스터 또는 벡터 레지스터에 있는 값들을 개인하는 그 밖의 타입들의 명령들의 경우에, 이들은 평상시대로 상기 타겟 레지스터들을 갱신하기 위해 단순히 실행되어도 되고, 이것은, 이러한 명령들의 결과들이 상기 아키텍처 상태의 상기 이전에 캡쳐된 스냅샷을 사용하여 되돌려질 수 있다는 의미에서, 추론적으로 행해지는 중이다. 데이터를 상기 메모리 시스템에 기록하기 위한 스토어 연산들에 대해서, 메모리에 기록되는 값들은, 상기 로드 스토어 유닛(26)내에 또는 상기 캐시(28, 30) 또는 메모리(32)내의 구조체내에 버퍼링되어, 그 결과들이 계속 추론적인 동안에 상기 메모리가 실제로 갱신되는 것을 방지할 수도 있다. 그리고, 상기 트랜잭션의 처리는, 도 4 내지 도 7에 표현된 상기 이벤트들 중 하나가 일어날 때까지 계속된다.
도 4는 트랜잭션 시작 이벤트 후와 상기 트랜잭션 종료 이벤트 전에 마주친 벡터 로드 명령의 처리를 도시한 것이다. 이러한 벡터 로드 명령이 단계 70에서 검출될 때, 단계 72에서는, 상기 로드 명령이 소정의 타입을 갖는지를 검출한다. 그 소정의 타입의 벡터 로드는, 예를 들면, 특별한 오피코드를 갖는 벡터 로드, 또는 그 소정의 타입을 갖는 것을 특정하는 제어 파라미터를 지정하는 벡터 로드이어도 되거나, 수정하는 명령이, 이것이 상기 소정의 타입의 명령이다는 힌트를 제공하기 위해 상기 벡터 로드 직전에 실행되었는지의 여부에 근거하여 검출될 수 있었다. 이러한 소정의 타입의 명령이 검출될 때, 단계 74에서 상기 해저드 검출회로(50)는, 상기 벡터 로드 명령의 각각의 요소들에 사용된 상기 어드레스들에 근거하여 상기 해저드 추적 스토리지(52)에 있는 상기 해저드 추적 데이터를 갱신한다. 그 후, 단계 76에서, 상기 벡터 로드 명령은, 추론적으로 실행된다. 한편, 상기 벡터 로드가 상기 소정의 타입을 갖지 않으면, 상기 방법은 단계 72로부터 직접 단계 76으로 진행되고, 단계 74에서의 상기 해저드 추적 데이터를 갱신하는 단계를 생략한다.
그 밖의 실시예들에서는, 단계 72가 생략되어도 되고, 그 대신에 상기 해저드 추적 데이터는 모든 타입의 벡터 로드에 대해 단계 74에서 갱신될 수 있다. 그렇지만, 상기 해저드 추적 데이터의 갱신을 특별한 타입의 로드로 제한하는 것은, 상기 해저드 추적의 오버헤드와 해저드들이 검출될 가능성을 줄이는데 유용할 수 있다. 해저드들이 추적되는 소정의 타입으로서 벡터 로드들을 표시하는 것을 지원하는 시스템에 있어서, 상기 프로그래머는, 상기 소정의 타입의 이용을 해저드들이 예상되는 경우들로 제한할 수 있어서, 요소간 어드레스 해저드들을 생성하지 않을 것이라고 알려지는 로드들에 대한 해저드 추적의 오버헤드를 피할 수 있다.
도 5에 도시된 것처럼, 상기 트랜잭션의 처리 동안에, 상기 처리회로(4) 또는 상기 해저드 검출회로(50)는, 트랜잭션 클리어 이벤트가 일어났는지를 검출하여도 된다(도 5의 단계 80). 상기 트랜잭션 클리어 이벤트가 일어나면, 단계 82에서, 상기 해저드 추적 스토리지(53)에 있는 상기 해저드 추적 데이터는, 단계 64와 같은 방식으로 클리어된다. 이것은, 비록 상기 트랜잭션의 끝에 아직 도달되지 않았을지라도 상기 추적 데이터를 클리어하기 위한 메카니즘을 제공한다. 이것은, 그에 따라 상기 루프의 다수의 반복을 단일의 트랜잭션내에서 실행할 수 있어 상기 트랜잭션 처리의 오버헤드를 감소시키기 때문에 유용하다. 상기 트랜잭션 클리어 이벤트는, 예외나, 상기 제어 레지스터를 설정하는 명령 등, 상기 해저드 추적 데이터를 클리어하는 것이 안전하다는 신호를 보내는 임의의 이벤트일 수 있다. 그렇지만, 상기 트랜잭션 클리어 이벤트를 표현하는 특별히 유용한 방식의 하나는, 상기 추적 데이터 클리어 전용인 트랜잭션 클리어 명령(tclear)을 제공하는 방식이다. 그 후, 상기 프로그래머나 상기 컴파일러는, 벡터화중인 상기 루프의 대응한 반복들에 따라 데이터의 벡터의 가치가 처리되어 있을 때마다 상기 추적 데이터를 클리어하기 위해서, 벡터 명령들의 상기 시퀀스내의 상기 트랜잭션 클리어 명령을 이용할 수 있다.
도 6은 벡터 스토어 명령이 트랜잭션 시작 이벤트 후와 상기 트랜잭션 종료 이벤트 전에 마주칠 때 행해진 상기 해저드 연산들을 도시한 것이다. 이 벡터 스토어 명령이 단계 90에서 검출될 때, 단계 92에서, 상기 해저드 검출회로(50)는, 상기 벡터 스토어 명령의 요소 K와 조기의 로드 명령의 요소 J와의 사이에 요소간 어드레스 해저드가 있는지를 검출하되, 이때 K는 J와 같지 않다. 일부의 경우들에서, 상기 해저드들은, K가 J미만일 경우의 해저드들로 제한되어도 된다. 상기 조기의 로드와 상기 차후의 스토어의 양쪽은, 상기 처리회로(4)에 의해 실행중인 명령들의 동일한 쓰레드내에 있다는 것을 주목한다. 단계 92에서 어드레스 해저드가 검출되지 않으면, 단계 93에서, 상기 스토어 연산은 통상처럼 추론적으로 실행된다.
해저드가 검출되면, 단계 94에서, 상기 해저드 검출회로(50)는, 상기 처리회로(4)를 기동하여, 상기 트랜잭션내의 상기 명령들의 또 다른 처리를 중단시키고, 트랜잭션내의 이미 실행된 명령들에 의해 생성된 상기 추론 결과들이 커밋되는 것을 방지한다. 이것은 상기 메모리 시스템내에서 상기 추론적으로 버퍼링된 기록 데이터를 폐기함으로써 행해질 수 있다. 또한, 상기 이전에 캡쳐된 아키텍처 상태를 레지스터들(16, 18)에 복원시켜, 상기 프로세서를 상기 시작된 트랜잭션 이전에 연산중이었던 상태로 되돌린다. 따라서, 상기 추론적으로 실행된 명령들의 효과가 반대로 된다.
상기 트랜잭션이 중단되어 있으면, 이것의 신호를, 예를 들면, 예외의 이용에 의해 상기 프로세서(4)에 보낼 수 있다. 그 후, 예외 핸들러는, 순방향 진행을 보장하기 위해 필요한 조치를 취할 수 있다. 예를 들면, 순방향 진행이 이루어지는 것을 보장하도록, 동등한 처리 연산들이 스칼라 코드를 사용하여 재시도될 수 있거나, 상기 벡터 길이가 감소될 수 있다(예를 들면, N요소들 대신에 N/2 데이터 요소들의 그룹마다 상기 요구된 연산들을 처리하는 것은, 상기 벡터의 타 부분에서 판독들을 행하는 동안 상기 벡터의 일 부분에서는 기록들을 행하도록 동일한 메모리 장소에 액세스할지도 모르기 때문에 요소간 어드레스 해저드의 가능성을 줄일 수 있다). 그럼에도 불구하고, 상기 어드레스 해저드들이 드물기 때문에, 종종 일부의 트랜잭션들을 중단시키는 비용은, 스칼라 루프의 다수의 반복들이 벡터화된 코드로서 처리되는 것을 가능하게 함으로써 이루어질 수 있는 성능 향상과 비교하여 중요하지 않다.
도 7은 트랜잭션의 끝에서 상기 트랜잭션 종료 이벤트에 도달될 때 행해진 액션들을 도시한 것이다. 단계 100에서 검출된 상기 트랜잭션 종료 이벤트에 응답하여, 단계 102에서, 상기 프로세서(4)는, 상기 트랜잭션의 시작 이후에 실행된 상기 명령들의 추론적으로 생성된 임의의 결과들을 커밋한다. 아키텍처 상태의 상기 이전에 캡쳐된 스냅샷은, 폐기될 수 있거나, 겹쳐써지게 허용될 수 있다. 그 후, 임의의 버퍼링된 메모리 기록들은, 상기 캐시(28, 30)나 상기 메모리(32)에 의해 실제의 메모리 스토리지에 기록될 수 있다. 단계 104에서, 차후의 명령들은, 상기 해저드 추적/검출 메카니즘(50, 52)을 사용하지 않고 비추론적으로 실행된다.
도 8은 (상기 도시된 예 6에 해당하는) 로드 명령들에서 이용한 상기 어드레스들을 추적하기 위한 추적 데이터의 제1 예를 도시한 것이다. 본 예에서, 상기 해저드 추적을 위한 상기 추적 엔트리들은, 대응한 데이터와 함께 상기 L1 데이터 캐시(28)에 저장된다. 각 캐시 라인(110)은, 상기 캐시된 데이터, 대응한 데이터의 코히어런시 상태를 가리키는 코히어런시 상태 데이터(예를 들면, 그 데이터가 공유되거나 유일한지의 여부, 또는 그 데이터가 클린 상태이거나 더티 상태인지의 여부), 및 상기 캐시된 데이터와 연관된 그 밖의 데이터 상태(116)(예를 들면, 트랜잭셔널 메모리 어드레스 추적 목적을 위한 데이터)의 상기 어드레스의 적어도 일부를 특정하는 캐시 태그(112)를 포함한다. 추가로, 각 캐시 라인(110)은, 상기 트랜잭션의 시작 이후에 실행된 조기의 벡터 로드 명령이 대응한 캐시 라인으로부터의 데이터에 액세스하고 있던 최고의 데이터 요소 위치를 지정하는 에일리어스 값(118)을 저장하고 있다. 따라서, 주어진 로드가 마주칠 때, 요소마다 액세스된 상기 데이터를 포함하는 상기 캐시 라인들은, 그 요소가 에일리어스 비트(118)로 이전에 나타낸 상기 요소 위치보다 높을 경우 그 데이터가 액세스되었던 상기 요소를 상기 캐시 라인이 가리키게 상기 에일리어스 비트들(118)을 설정하도록, 갱신된다. 차후의 스토어 명령이 마주칠 때, 상기 에일리어스 비트들이 상기 기록중인 현재의 데이터 요소보다 높은 데이터 요소 위치를 가리키는 캐시 라인에 상기 데이터가 기록되면, 해저드가 검출되고 이것은 상기 트랜잭션의 중단을 기동할 수 있다. 도 8은 상기 에일리어스 비트들이 캐시 라인마다 제공되는 일례를 도시하고 있지만, 이에 따라, 비록 조기의 로드가 실제로 차후의 스토어와 비교하여 상기 캐시 라인의 상이한 부분에 액세스하였을지라도 해저드를 표시 해놓은 해저드들의 긍정 오류 검출이 될 수도 있는 경우가 있다. 긍정 오류 해저드들의 수는, 보다 세밀한 그래뉴래러티에서, 예를 들면 상기 캐시 라인의 상이한 부분들에 대한 에일리어스 필드(118)가 다수인, 상기 캐시 라인을 주석을 달음으로써 감소될 수 있다. 그렇지만, 상기 이루어진 성능 향상에 반대해 상기 에일리어스 필드들을 저장, 갱신 및 비교하기 위한 추가의 회로간에 트레이드 오프가 있다.
도 9는 상기 해저드 추적 스토리지(52)에 대한 다른 예를 도시한 것이다. 에일리어스 비트들을 상기 캐시에 추가하는 대신에, 상기 해저드 검출 로직은, 로드/스토어 큐, 스토어 버퍼 등 등의 그 밖의 구조체들에 추가될 수 있거나, 별개의 구조체가 도입될 수 있다. 인접 벡터 로드가 마주칠 때, 이러한 구조체(또는 버퍼)는, 액세스된 상기 최대 및 최소 어드레스{MaxAddr, MinAddr}를 레코딩하여도 되고, 차후의 스토어가 도달할 때는, 상기 스토어의 최저 어드레스, *A는 상기 엔트리들에 대해 체크된다. 그 조건(MinAddr<A<=MaxAddr)이 성립하면, 충돌이 검출되고 중단이 기동된다.
도 10에 도시된 것처럼, 다른 타입의 로드는, 연속적이지 않은 각 요소에 대한 어드레스들을 이용하여도 된다. 이를, 비인접(또는 게더) 로드라고 하여도 된다. 마찬가지로, 비인접 벡터 스토어 명령은, 벡터의 각각의 요소들로부터의 데이터 값들을 어드레스들이 비연속적인 메모리 장소들에 저장하여도 된다. 요소마다 상기 어드레스들은, 각 입력요소 등에 대해 상이한 어드레스 오프셋들을 지정하는 제2 벡터 오퍼랜드 Z1으로부터 얻어져도 된다. 비인접 로드/스토어 명령의 경우, 도 8에 도시된 해결책이 그래도 효과가 있지만, 도 9에 대한 대안으로서, 도 11에 도시된 해결책은 상기 버퍼가 상기 최대/최소 어드레스보다는 요소마다 사용된 실제의 어드레스들을 저장하고 있는 경우에 사용될 수 있다. 상기 어드레스들은, 그 어드레스들이 액세스되었던 상기 데이터 요소 위치에 대응하게 저장된다(예를 들면, 도 11의 예에서, 상기 추적 구조체의 열 n에서의 상기 어드레스들은 조기의 로드의 데이터 요소 n으로부터 액세스되었다). 그리고, 차후의 스토어 명령의 경우, 상기 해저드 검출회로(50)는, 상기 버퍼의 콘텐츠에 대하여 상기 스토어에서 이용한 어드레스들의 세트를 검출하여 상기 스토어의 주어진 요소가 조기의 로드를 위해 그 주어진 요소보다 높은 요소에서 사용한 어드레스와 같은 어드레스에 액세스하는 충돌들을 특정할 수 있다.
일부의 경우들에서, 상기 프로그래머나 컴파일러는, 하나의 트랜잭션 시작 후, 다른 트랜잭션 시작 이벤트가 제1 트랜잭션의 끝 이전에 검출되는 내포된 트랜잭션들을 도입하여도 된다. 일부의 하드웨어 구현들은, 이러한 내포된 트랜잭션들을 지원하여 상기 아키텍처 상태의 다중 스냅샷을 유지할 수도 있어, 내부 트랜잭션이 중단할 경우, 그 상태는 단지 외부의 트랜잭션의 시작부분으로 되돌리는 대신에, 상기 내부 트랜잭션의 시작점으로 복원될 뿐이다. 그렇지만, 내포된 트랜잭션들을 지원하는데 요구된 상기 추가의 회로 오버헤드는 항상 정당화되지 않을 수도 있고, 일부의 보다 간단한 구현들은 내부 트랜잭션의 중단이 검출될 때 상기 프로세서 상태를 상기 외부의 트랜잭션의 시작상태로 간단히 되돌릴 수도 있다. 따라서, 일부의 구현들은, 내포된 트랜잭션들을 합쳐서 보다 큰 단일의 트랜잭션으로 만드는 것이 효과적이다.
상기 해저드 검출회로(50)는, 하나의 스칼라 루프를 벡터 명령들의 시퀀스로 벡터화하는 아티팩트로서 주어진 실행의 쓰레드에 도입된 레인간 어드레스 해저드들을 검출한다. 상기 해저드 검출회로는, 그 밖의 타입들의 어드레스 해저드들, 이를테면, 상기 처리장치(2)내에 이미 그 밖의 메카니즘들이 구비될 수도 있는 프로그램 실행의 독립적 쓰레드간에 판독 후 기록 해저드나 기록 후 기록 해저드를 검출할 필요는 없다. 예를 들면, 일부의 시스템들은, 멀티프로세서 시스템에서 행해지는 중인 처리의 상이한 쓰레드간에 충돌들을 관리하기 위해, 이미 하드웨어 트랜잭셔널 메모리를 지원할 수도 있다. 처리의 독립적 쓰레드들이 별도의 실행 유닛들을 사용하여 병렬로 행해지는 중인 경우, 한쪽의 실행 유닛이 주어진 어드레스를 판독 또는 기록할 수 있고 다른쪽의 실행 유닛도 동일한 어드레스에 액세스중인 것보다 위험이 있어서, 해저드들로 되게 된다. 하드웨어 트랜잭셔널 메모리 기술들은, 추론적 처리를 사용하여, 연산들이 충돌이 없다고 추론적으로 가정하여 진행시키고 나서, 충돌이 검출될 때 트랜잭션을 중단시키고 조기의 실행 포인트로 처리를 되돌림으로써, 상기와 같은 해저드들을 검출할 때 성능을 향상시킬 수도 있다. 충돌없이 처리가 상기 트랜잭션의 끝에 도달하면, 그 추론 결과들이 커밋될 수 있다. 여기서 설명된 형태의 의존성 트랜잭션들은, 상이한 처리 요소간의 충돌들을 처리하기 위한 트랜잭셔널 메모리 트랜잭션들을 처리하도록 이미 구성된 상기 회로의 적어도 일부를 사용하여 지원되어도 된다. 예를 들면, 아키텍처 상태의 스냅샷을 캡쳐하거나 기록들을 상기 메모리 시스템에 버퍼링하기 위한 상기 회로의 일부를 재사용하여도 된다. 그러나, 트랜잭셔널 메모리 기술들과는 달리, 통상적으로 해저드들이 일어난다고 예상하지 않을 경우, 요소간 해저드들을 검출하는데 사용된 상기 해저드 검출회로(50) 및 해저드 추적 스토리지(52)는 상이하여도 되고, 상기 검출중인 해저드들은 독립적 쓰레드들간보다는 프로그램 실행의 단일의 쓰레드내에 있어도 된다.
본 출원에서, "...하도록 구성된"의 단어는, 장치의 요소가 상기 기재된 연산을 실시할 수 있는 구성을 갖는다는 것을 의미하는데 사용된다. 본 문맥에서, "구성"은, 하드웨어 또는 소프트웨어의 상호연결의 배치 또는 방식을 의미한다. 예를 들면, 상기 장치는 상기 기재된 연산을 제공하는 전용 하드웨어를 가져도 되거나, 프로세서 또는 다른 처리 디바이스는 그 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은, 상기 장치 요소가 임의의 방식으로 상기 기재된 연산을 제공하기 위해서 변경될 필요가 있다는 것을 암시하지는 않는다.
여기서는 본 발명의 실시예들을 첨부도면을 참조하여 상세히 설명하였지만, 본 발명은 구체적인 실시예들에 한정되지 않고, 첨부된 청구항에서 기재된 것과 같은 본 발명의 범위 및 사상으로부터 벗어나지 않고 당업자가 변경 및 변형을 여러 가지로 실시할 수 있다는 것을 알 수 있다.

Claims (20)

  1. 명령들에 응답하여 데이터 처리를 행하는 처리회로이며, 벡터 로드 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하도록 구성되고, 벡터 스토어 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하도록 구성되는, 상기 처리회로를 구비하는 장치로서,
    상기 처리회로는, 트랜잭션 시작 이벤트에 응답하여 하나 이상의 차후의 명령들을 추론적으로 실행하고, 트랜잭션 종료 이벤트에 응답하여서는 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 하나 이상의 차후의 명령들의 추론 결과들을 커밋하기 위한 회로이고;
    상기 장치는, 요소간 어드레스 해저드가, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서 일어나는지를 검출하는 해저드 검출회로를 구비하고, 이때 K는 J와 상이하고, 상기 조기의 벡터 로드 명령과 상기 후기의 벡터 스토어 명령의 양쪽은 상기 처리회로에 의해 처리된 명령들의 동일한 쓰레드로부터 온 것이고;
    상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 해저드 검출회로는 상기 처리회로를 기동하여 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 해저드 검출회로는, 상기 처리회로를 기동하여 아키텍처 상태 데이터를 상기 트랜잭션 시작 이벤트에 응답하여 캡쳐된 이전 버전의 상기 아키텍처 상태 데이터로 복원하도록 구성되는, 장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    K < J인, 장치.
  4. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 하나 이상의 조기의 벡터 로드 명령들에 사용된 어드레스들을 추적하기 위한 해저드 추적 데이터를 저장하는 해저드 추적 스토리지 회로를 구비하는, 장치.
  5. 제 4 항에 있어서,
    상기 해저드 추적 스토리지 회로는 상기 데이터 스토어의 일부를 구비하는, 장치.
  6. 제 4 항 또는 제 5 항에 있어서,
    상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트에 응답하여 상기 해저드 추적 데이터를 클리어하도록 구성되는, 장치.
  7. 제 4 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트 후 실행된 트랜잭션 클리어 명령에 응답하여 상기 해저드 추적 데이터를 클리어하도록 구성되는, 장치.
  8. 제 4 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 벡터 로드 명령에 응답하여, 그 벡터 로드 명령에 사용된 상기 어드레스들에 근거하여 상기 해저드 추적 데이터를 갱신하는 회로인, 장치.
  9. 제 8 항에 있어서,
    상기 해저드 검출회로는, 소정의 타입의 벡터 로드 명령에 응답하여 상기 해저드 추적 데이터를 갱신하고, 상기 소정의 타입의 벡터 로드 명령이외의 벡터 로드 명령에 응답하여 상기 해저드 추적 데이터의 상기 갱신들을 억제하도록 구성되는, 장치.
  10. 제 4 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 해저드 추적 데이터는, 각각, 어드레스들의 각각의 블록에 대응하고, 상기 어드레스들의 대응한 블록내의 어드레스를 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위해 사용하였던 최고의 데이터 요소 위치를 특정하는 복수의 추적 엔트리들을 포함하는, 장치.
  11. 제 10 항에 있어서,
    상기 해저드 검출회로는, 상기 후기의 벡터 스토어 명령의 주어진 데이터 요소 위치에 사용된 어드레스를 포함하는 어드레스들의 블록에 대응한 상기 추적 엔트리가 상기 주어진 데이터 요소 위치보다 높은 데이터 요소 위치를 특정할 때, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 후기의 벡터 스토어 명령에 대한 상기 요소간 어드레스 해저드를 검출하도록 구성되는, 장치.
  12. 제 10 항 또는 제 11 항에 있어서,
    상기 데이터 스토어는 데이터를 저장하기 위한 복수의 캐시 라인들을 포함하는 캐시를 구비하고, 상기 추적 엔트리들은 상기 캐시에 저장되고, 각 캐시 라인이 그 캐시 라인에 대응한 어드레스들의 하나 이상의 블록들에 대한 상기 추적 엔트리들의 하나 이상과 관련되는, 장치.
  13. 제 12 항에 있어서,
    어드레스들의 상기 대응한 블록의 적어도 하나의 어드레스가 상기 트랜잭션 시작 이벤트 후에 추론적으로 실행된 조기의 벡터 로드 명령을 위해 사용되었던 것을 가리키는 추적 엔트리와 관련된 상기 캐시로부터의 캐시 라인의 퇴거에 응답하여, 상기 해저드 검출회로는, 상기 처리회로를 기동하여, 상기 트랜잭션 시작 이벤트 이후 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하도록 구성되는, 장치.
  14. 제 4 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 해저드 추적 데이터는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 대응한 벡터 로드 명령을 위해 액세스된 최소 어드레스와 최대 어드레스 중 적어도 하나를 각각 특정하는 하나 이상의 로드 추적 엔트리들을 포함하는, 장치.
  15. 제 14 항에 있어서,
    상기 해저드 검출회로는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의 벡터 스토어 명령에 대한 최소 어드레스가 상기 최소 어드레스보다 크고 상기 최대 어드레스이하일 때, 상기 로드 추적 엔트리들 중 하나로 나타낸 요소간 어드레스 해저드를 검출하도록 구성되는, 장치.
  16. 제 4 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 해저드 추적 데이터는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 하나 이상의 벡터 로드 명령들의 각각의 데이터 요소들에 대해 액세스된 하나 이상의 어드레스들을 특정하는 어드레스 리스트를 포함하는, 장치.
  17. 제 16 항에 있어서,
    상기 해저드 검출회로는, 상기 후기의 벡터 스토어 명령에 대한 주어진 데이터 요소 위치에 대응한 어드레스가 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령에 대한 상기 주어진 데이터 요소 위치이외의 데이터 요소 위치에 대응한 어드레스와 같을 때, 상기 요소간 어드레스 해저드를 검출하도록 구성되는, 장치.
  18. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 트랜잭션 시작 이벤트는 트랜잭션 시작 명령을 포함하고, 상기 트랜잭션 종료 이벤트는 트랜잭션 종료 명령을 포함하는, 장치.
  19. 명령들에 응답하여 데이터를 처리하는 수단이며, 벡터 로드 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하도록 구성되고, 벡터 스토어 명령에 응답하여서는 벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하도록 구성되는, 상기 처리하는 수단을 구비하는 장치로서,
    상기 처리하는 수단은, 트랜잭션 시작 이벤트에 응답하여 하나 이상의 차후의 명령들을 추론적으로 실행하고, 트랜잭션 종료 이벤트에 응답하여서는 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 상기 하나 이상의 차후의 명령들의 추론 결과들을 커밋하기 위한 수단이고;
    상기 장치는, 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 조기의 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 트랜잭션 시작 이벤트 후 추론적으로 실행된 후기의 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서, 요소간 어드레스 해저드를 검출하는 수단을 구비하고, 이때 K는 J와 상이하고, 상기 조기의 벡터 로드 명령과 상기 후기의 벡터 스토어 명령의 양쪽은 상기 처리회로에 의해 처리된 명령들의 동일한 쓰레드로부터 온 것이고;
    상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 검출하는 수단은 상기 처리하는 수단을 기동하여 상기 트랜잭션 시작 이벤트 이후의 상기 명령들의 또 다른 처리를 중단시키고 상기 추론 결과들이 커밋되는 것을 방지하도록 구성되는, 장치.
  20. 트랜잭션 시작 이벤트에 응답하여, 하나 이상의 차후의 명령들을 추론적으로 실행하는 단계;
    벡터 로드 명령에 응답하여, 벡터 값의 각각의 데이터 요소들을 데이터 스토어의 각각의 장소들로부터의 데이터에 로딩하는 단계;
    벡터 값의 각각의 데이터 요소들로부터의 데이터를 상기 데이터 스토어의 각각의 장소들에 저장하기 위한 벡터 스토어 명령에 응답하여, 요소간 어드레스 해저드가, 상기 벡터 로드 명령을 위한 데이터 요소 J에 대응한 어드레스와 상기 벡터 스토어 명령을 위한 데이터 요소 K에 대응한 어드레스와의 사이에서 일어나는지를 검출하는 단계-여기서, K는 J와 상이하고, 조기의 벡터 로드 명령과 후기의 벡터 스토어 명령의 양쪽은 명령들의 동일한 쓰레드로부터 온 것이고-;
    상기 요소간 어드레스 해저드를 검출하는 것에 응답하여, 상기 하나 이상의 차후의 명령들의 또 다른 처리를 중단시키고 상기 하나 이상의 차후의 명령들의 추론 결과들이 커밋되는 것을 방지하는 단계; 및
    트랜잭션 종료 이벤트에 응답하여, 상기 하나 이상의 차후의 명령들의 상기 추론 결과들을 커밋하는 단계를 포함하는, 데이터 처리방법.
KR1020197010503A 2016-09-20 2017-08-14 벡터 명령들에 대한 요소간 어드레스 해저드들의 처리 KR102344010B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1615959.2 2016-09-20
GB1615959.2A GB2554096B (en) 2016-09-20 2016-09-20 Handling of inter-element address hazards for vector instructions
PCT/GB2017/052387 WO2018055326A1 (en) 2016-09-20 2017-08-14 Handling of inter-element address hazards for vector instructions

Publications (2)

Publication Number Publication Date
KR20190051036A true KR20190051036A (ko) 2019-05-14
KR102344010B1 KR102344010B1 (ko) 2021-12-28

Family

ID=57288580

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197010503A KR102344010B1 (ko) 2016-09-20 2017-08-14 벡터 명령들에 대한 요소간 어드레스 해저드들의 처리

Country Status (8)

Country Link
US (1) US10922084B2 (ko)
EP (1) EP3516502B1 (ko)
JP (1) JP7007371B2 (ko)
KR (1) KR102344010B1 (ko)
CN (1) CN109690476B (ko)
GB (1) GB2554096B (ko)
TW (1) TWI758319B (ko)
WO (1) WO2018055326A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11068247B2 (en) * 2018-02-06 2021-07-20 Microsoft Technology Licensing, Llc Vectorizing conditional min-max sequence reduction loops
GB2572579B (en) 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Speculative side-channel hint instruction
US10783031B2 (en) * 2018-08-20 2020-09-22 Arm Limited Identifying read-set information based on an encoding of replaceable-information values
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
US11314510B2 (en) 2020-08-14 2022-04-26 International Business Machines Corporation Tracking load and store instructions and addresses in an out-of-order processor

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160040623A (ko) * 2013-09-27 2016-04-14 인텔 코포레이션 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들
KR20160065144A (ko) * 2013-10-09 2016-06-08 에이알엠 리미티드 데이터 처리장치 및 추론적 벡터 액세스 연산의 수행방법
KR20200101943A (ko) * 2018-01-03 2020-08-28 에이알엠 리미티드 추측 장벽 명령

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2364404B (en) * 2000-07-01 2002-10-02 Marconi Comm Ltd Method of detecting malicious code
JP4202673B2 (ja) * 2002-04-26 2008-12-24 株式会社東芝 システムlsi開発環境生成方法及びそのプログラム
US7472285B2 (en) * 2003-06-25 2008-12-30 Intel Corporation Apparatus and method for memory encryption with reduced decryption latency
JP3988144B2 (ja) * 2004-02-23 2007-10-10 日本電気株式会社 ベクトル処理装置、及び、追い越し制御回路
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US9262171B2 (en) * 2009-06-30 2016-02-16 Oracle America, Inc. Dependency matrix for the determination of load dependencies
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8868885B2 (en) * 2010-11-18 2014-10-21 Ceva D.S.P. Ltd. On-the-fly permutation of vector elements for executing successive elemental instructions
US8639889B2 (en) * 2011-01-31 2014-01-28 International Business Machines Corporation Address-based hazard resolution for managing read/write operations in a memory cache
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
US9389860B2 (en) * 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9330011B2 (en) * 2013-09-20 2016-05-03 Via Alliance Semiconductor Co., Ltd. Microprocessor with integrated NOP slide detector
CN103699434B (zh) * 2013-12-17 2018-05-08 天津国芯科技有限公司 一种适用于多应用之间安全访问的mpu及其多应用之间安全访问的方法
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
CN104052635A (zh) * 2014-06-05 2014-09-17 北京江南天安科技有限公司 一种基于安全预警的风险态势预测方法及系统
GB2528270A (en) * 2014-07-15 2016-01-20 Advanced Risc Mach Ltd Call stack maintenance for a transactional data processing execution mode
CN104317637A (zh) * 2014-10-16 2015-01-28 安徽理工大学 基于多智能体的虚拟矿工安全行为建模及应急仿真系统
US10387156B2 (en) * 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) * 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160040623A (ko) * 2013-09-27 2016-04-14 인텔 코포레이션 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들
KR20160065144A (ko) * 2013-10-09 2016-06-08 에이알엠 리미티드 데이터 처리장치 및 추론적 벡터 액세스 연산의 수행방법
KR20200101943A (ko) * 2018-01-03 2020-08-28 에이알엠 리미티드 추측 장벽 명령

Also Published As

Publication number Publication date
JP7007371B2 (ja) 2022-01-24
EP3516502A1 (en) 2019-07-31
JP2019534504A (ja) 2019-11-28
CN109690476A (zh) 2019-04-26
TWI758319B (zh) 2022-03-21
US10922084B2 (en) 2021-02-16
KR102344010B1 (ko) 2021-12-28
US20190258489A1 (en) 2019-08-22
GB2554096B (en) 2019-03-20
WO2018055326A1 (en) 2018-03-29
GB2554096A (en) 2018-03-28
EP3516502B1 (en) 2021-04-28
TW201814504A (zh) 2018-04-16
CN109690476B (zh) 2023-02-28
GB201615959D0 (en) 2016-11-02

Similar Documents

Publication Publication Date Title
KR102344010B1 (ko) 벡터 명령들에 대한 요소간 어드레스 해저드들의 처리
US7958319B2 (en) Hardware acceleration for a software transactional memory system
US8732438B2 (en) Anti-prefetch instruction
JP5118652B2 (ja) アウトオブオーダープロセッサにおけるトランザクショナルメモリ
US8301849B2 (en) Transactional memory in out-of-order processors with XABORT having immediate argument
US20180011748A1 (en) Post-retire scheme for tracking tentative accesses during transactional execution
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US5944815A (en) Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access
JP4578042B2 (ja) 接近して結合される多重プロセッサのための高速マルチスレッディング
US9710280B2 (en) Overlapping atomic regions in a processor
JP7281491B2 (ja) トランザクショナル比較及び破棄命令
CN116745747A (zh) 保持所卸载指令与非卸载指令之间的存储器排序
US9400655B2 (en) Technique for freeing renamed registers
CN112236750A (zh) 处理支持事务存储器的设备中的独占式加载指令
JP3748191B2 (ja) 計算機とその制御方法
CN114174986A (zh) 用于推测性向量化程序代码的装置和方法

Legal Events

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