KR20180137521A - 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 - Google Patents

벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 Download PDF

Info

Publication number
KR20180137521A
KR20180137521A KR1020187033191A KR20187033191A KR20180137521A KR 20180137521 A KR20180137521 A KR 20180137521A KR 1020187033191 A KR1020187033191 A KR 1020187033191A KR 20187033191 A KR20187033191 A KR 20187033191A KR 20180137521 A KR20180137521 A KR 20180137521A
Authority
KR
South Korea
Prior art keywords
execution
vector
instructions
address
check
Prior art date
Application number
KR1020187033191A
Other languages
English (en)
Other versions
KR102379894B1 (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 KR20180137521A publication Critical patent/KR20180137521A/ko
Application granted granted Critical
Publication of KR102379894B1 publication Critical patent/KR102379894B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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
    • 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/30098Register arrangements
    • G06F9/30101Special purpose 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

벡터 연산들을 행할 때 어드레스 충돌들을 관리하는 장치 및 방법을 제공한다. 상기 장치는, 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와, 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행회로를 갖는다. 상기 실행회로는, 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 회로와, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리회로를 갖는다. 상기 실행회로는 벡터 루프를 반복적으로 실행하도록 배치되고, 각 반복동안 상기 실행회로는 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행한다. 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정한다. 상기 벡터 루프의 반복마다, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용한다. 이에 반해서, 상기 실행회로는, 상기 어드레스 해저드 조건의 존재시에, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용한다. 이러한 해결방법은, 상기 벡터 루프의 각 반복동안에 이용된 벡터화의 상기 레벨을 동적으로 조정하기 위한 낮은 지연성 메카니즘을 제공하여, 코드가 벡터화되는 것을 가능하게 하고 또한, 상기 어드레스 해저드 조건들의 존재시에 효율적인 수행을 가능하게 한다.

Description

벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
본 기술은, 벡터 연산들 수행시에 어드레스 충돌을 관리하는 장치 및 방법에 관한 것이다.
데이터 처리장치의 성능을 향상시키는 공지된 기술의 하나는, 벡터 연산들의 실행을 지원하는 회로를 제공하는 것이다. 벡터 연산들은 적어도 하나의 벡터 오퍼랜드에 관해 행해지고, 여기서 각 벡터 오퍼랜드는 복수의 요소들을 포함한다. 그 후, 상기 벡터 연산의 수행은, 상기 벡터 오퍼랜드(들)내의 각종 요소들에 걸쳐 연산을 반복적으로 적용하는 것을 포함한다.
특정한 구현에서는, 상기 벡터 오퍼랜드들 내의 각종 요소들에 관해 연산들을 병렬로 행하기 위해서 다중 레인들의 병렬 처리를 제공하는 벡터 처리회로(SIMD(단일 명령 다중 데이터) 처리회로라고 하는 경우도 많다)를 제공하는 것도 공지되어 있다.
벡터 연산들의 이용에 의해, 동등한 일련의 스칼라 연산들의 수행과 비교할 때 상당한 수행 이점들이 실현될 수 있다.
SIMD를 받아들일 수 있는 종래의 프로그램들은, 통상, 규칙적 메모리 액세스들을 행하고, 종종 스칼라 코드의 벡터 코드로의 변형을 간단하게 하는 선형 메모리 어드레싱 방식을 따른다. 이러한 상황들에서, 루프 반복간에 의존성이 없고, 벡터화는 벡터의 요소들을 동시에 처리할 때 가능한 경쟁 조건이 없기 때문에 복잡하지 않다. 그러나, 수행을 위해 벡터화하기를 원할지도 모르는 많은 실세계 프로그램들에 있어서, 스칼라 코드에서 반복간의 중대한 양의 의존성이 존재한다. 이러한 경우들에 있어서, 상기 코드를 벡터화하는 경우 실행 시간에 분명해질지도 모르는 상기 어드레스 충돌의 빈도를 예측하는 것이 어려울 수 있다.
이에 따라, 컴파일 스테이지에서 보수적 해결방법을 취하는 것이 필요한 경우가 많고, 그 결과, 코드는 어드레스 충돌의 존재가 정확히 예측될 수 없는 경우 벡터화되지 않을 수도 있음에 따라, 어떠한 잠재적 성능 이득도 희생될 것이다.
어드레스들의 벡터들에서 어드레스 충돌을 동적으로 분석하기 위해 메카니즘들을 도입하려고 하는 이전의 시도들은, 상당한 지연성 문제들이 있어, 그들의 사용으로부터 실현되기 위해 어떠한 잠재적 이득을 제한할 수 있다.
상기 문제들을 해소하기 위해 메카니즘을 제공하는 것이 바람직할 것이다.
일 구성 예에서는, 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와; 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행회로를 구비한, 장치를 제공하고, 상기 실행회로는 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 회로와, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리회로로 이루어지고; 상기 실행회로는 벡터 루프를 반복적으로 실행하도록 배치되고, 각 반복동안 상기 실행회로는 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행하도록 배치되고, 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정하고; 상기 벡터 루프의 반복마다, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용한다.
다른 구성 예에서는, 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와, 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하고, 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하며, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 실행회로를 구비한 장치에서, 벡터 연산들을 행할 때 어드레스 충돌들을 관리하는 방법을 제공하며, 상기 방법은, 벡터 루프를 반복적으로 실행하는 단계; 각 반복동안, 상기 실행회로-이 실행회로는 체크 명령의 실행에 응답하여 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정한다-내에서 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스-이 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함한다-를 실행하는 단계; 및 상기 벡터 루프의 반복마다, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용하는 단계를 포함한다.
또 다른 구성 예에서는, 상술한 구성대로 장치에 대응한 프로그램 명령들을 위한 가상머신 실행 환경을 제공하도록 컴퓨터를 제어하는 컴퓨터 프로그램을 비일시적 형태로 저장하는 컴퓨터 프로그램 제품을 제공한다.
아울러 또 다른 구성 예에서는, 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어 수단과; 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행수단으로서, 상기 레지스터 스토어 수단과 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 수단과, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리수단으로 이루어진 상기 실행수단을 구비하는, 장치로서, 상기 실행수단은 벡터 루프를 반복적으로 실행하고, 각 반복동안 상기 실행수단은 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행하고, 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정하고; 상기 벡터 루프의 반복마다, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용한다.
본 기술을, 아래의 첨부도면들에 도시된 것과 같은 본 발명의 실시예들을 참조하여 예시로만 한층 더 설명하겠다:
도 1은 일 실시예에 따른 장치의 블록도이고;
도 2는 일 실시예에 따른, 도 1의 장치를 사용하여 벡터 루프의 실행을 설명하는 흐름도이고;
도 3은 다른 실시예에 따른, 도 1의 장치를 사용하여 벡터 루프의 실행을 설명하는 흐름도이고;
도 4는 또 다른 실시예에 따른, 도 1의 장치를 사용하여 벡터 루프의 실행을 설명하는 흐름도이고;
도 5는 일 실시예에 따라 체크 명령의 실행동안에 요구된 비교를 어떻게 그루핑할 수 있는지를 개략적으로 도시하는 것이고;
도 6은 일 실시예에 따라, 도 5에 도시된 그루핑들에 따른 다중 어드레스 비교를 병합하기 위해 회전기와 비교기를 어떻게 사용할 수 있는지를 설명하는 블록도이고;
도 7a 내지 7e는 어드레스 충돌 검출이 요구되는 해당 어드레스 벡터들이 인접한 메모리 어드레스들을 갖는 일 실시예에서 사용되어도 되는 체크 명령의 다른 변형예를 설명하는데 사용된 도면들이고;
도 8은 일 실시예에 따라, 특별한 벡터 루프내에서 사용하는 체크 명령의 적절한 형태를 판정하기 위해서 어떻게 컴파일 연산을 행하는지를 개략적으로 설명하는 흐름도이고;
도 9는 상기 벡터 루프내에 삽입된 체크 명령의 타입에 의존하여, 스칼라 구현에 대한 벡터화 코드의 잠재적 속도 향상을 설명하는 그래프이고;
도 10은 일 실시예에 따른 상기 데이터 처리장치의 가상머신 구현을 개략적으로 설명하는 것이다.
첨부도면들을 참조하여 실시예들을 설명하기 전에, 이하의 실시예들을 설명한다.
일 실시예에서는, 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와, 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행회로를 구비한, 장치를 제공한다. 상기 실행회로는 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 회로와, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리회로를 갖는다. 상기 실행회로는 벡터 루프를 반복적으로 실행하도록 배치되고, 각 반복동안 상기 실행회로는 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행한다. 상기 실시예들에 따라, 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정한다. 상기 실시예들에 따라, 상기 벡터 루프의 반복마다, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용한다. 이와 대조하여, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용하도록 배치된다.
이러한 해결방법은, 코드가 벡터화되는 것을 가능하게 하고, 그 결과로 얻어진 일어날 수도 있는 어드레스 해저드들에 대해 벡터 루프 반복별로 효율적으로 처리되는 것을 가능하게 한다. 상기 메카니즘과 관련된 상기 저 지연성으로 인해, 동등한 스칼라 처리와 비교할 때, 상기 벡터 연산들의 수행시에 어드레스 충돌이 일어날 수 있는 다양한 상황에서 상당한 성능 이득을 제공한다는 사실이 확인되었다. 상기 이용된 벡터화의 레벨을 상기 벡터 루프의 각 반복에 관해 동적으로 변경할 수 있으므로, 일부의 반복들이 어드레스 충돌을 갖는 상황들에서는 상당한 성능 이득을 제공하고 그 밖에는 제공하지 않는다.
상기 벡터화의 디폴트 레벨과 상기 벡터화의 감소 레벨이 구현될 수 있는 방식은 많이 있다. 일 실시예에서, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스내의 제1의 복수의 명령들을 실행함으로써 상기 벡터화의 디폴트 레벨을 이용한다. 이와 대조하여, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스내의 제2의 복수의 명령들을 반복적으로 실행함으로써 상기 벡터화의 감소 레벨을 이용한다.
이에 따라, 이러한 실시예에서, 상기 체크 명령의 실행의 결과는, 상기 어드레스 해저 조건이 검출될 때 제2의 복수의 명령들을 갖는 효율적인 폴백(fallback) 경로를 제공함으로써, 상기 루프내에서 상기 제어 흐름에 직접 영향을 미친다. 상기 효율적인 폴백 경로의 제공에 의해, 이러한 해결방법은, 벡터화될 수 없다고 달리 생각될 스칼라 코드의 벡터화를 가능하게 한다. 특히, 상기 스칼라 코드는 벡터화될 수 있고, 상기 벡터 루프의 각 반복동안에 상기 체크 명령의 실행을 통해, 핸들링은 상기 어드레스 해저드 조건이 검출될 때마다 상기 폴백 경로에 건네질 수 있다. 그 후, 상기 폴백 경로내의 상기 제2의 복수의 명령들의 반복 실행은, 상기 정확한 처리가 상기 어드레스 해저드를 피함으로써 일어나도록 보장할 수 있다. 상기 체크 명령의 실행이 상기 벡터 루프의 현재의 반복내에서 이용된 상기 벡터화의 레벨에 영향을 미칠 수 있는 방식이 많이 있다. 일 실시예에서, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여, 상기 시퀀스에서 이후의 명령에서 참조하기 위해, 상기 어드레스 해저드 조건이 존재하는지를 나타내는 결과 데이터를 발생한다.
상기 결과 데이터는 다양한 형태를 취할 수 있다. 예를 들면, 그것은 이후의 명령에서 참조하기 위해 시스템 레지스터내에 기록되어도 된다. 또는, 상기 결과 데이터는 하나 이상의 플래그들, 이를테면 상기 실행회로에서 참조한 조건 플래그들의 갱신에서 직접 표현되어도 된다. 이러한 해결방법에 의해, 이후의 명령의 상기 연산은 상기 결과 데이터에 의해 갱신된 것처럼 그 플래그들의 현재의 상태에 영향을 미칠 수도 있다. 예를 들면, 일 실시예에서, 상기 이후의 명령은, 상기 실행회로에 의해 실행될 때, 상기 제1의 복수의 명령들을 실행할 것인가 또는 반복적으로 상기 제2의 복수의 명령들을 실행할 것인가를 판정하기 위해서 상기 하나 이상의 플래그들을 참조하는 분기 명령이다. 이에 따라, 이러한 해결방법에 의해, 상기 분기 명령은, 상기 체크 명령을 실행하는 결과로서 설정된 상기 플래그들에 따라 상기 제2의 복수의 명령들에 조건적으로 분기하도록 배치되어도 된다. 따라서, 상기 어드레스 해저드 조건의 부재시에, 상기 분기 명령의 실행은 상기 처리에 의해 상기 제1의 복수의 명령들로 진행할 뿐인 반면에, 상기 해저드 조건의 존재시에는, 상기 분기 명령의 실행은 상기 명령 흐름에 의해 상기 제2의 복수의 명령들에 분기하며, 그 후 상기 벡터 루프의 현재의 반복에서 요구한 상기 처리를 구현하기 위해서 반복적으로 실행될 수 있다.
상기 제2의 복수의 명령들은 다양한 형태를 취할 수도 있다. 일 실시예에서, 상기 제2의 복수의 명령들은 상기 실행회로에 의해 개개의 요소들에 관해 연산하는 스칼라 명령들을 포함하고, 상기 벡터 루프를 구현하는데 요구된 상기 제2의 복수의 명령들의 반복 실행 횟수는 상기 벡터화의 디폴트 레벨과 관련된 상기 벡터 오퍼랜드들의 액티브 요소들의 수에 의존한다. 따라서, 예시로만, 상기 벡터화의 디폴트 레벨과 관련된 상기 벡터 오퍼랜드들내에 액티브 요소 8개가 있었으면, 상기 벡터화의 디폴트 레벨을 유지하였었을 때 실행되었을 병렬 처리의 레인들 중 하나와 관련된 스칼라 값들에 관해 연산하는 상기 제2의 복수의 명령들을 각 반복 동안에, 상기 벡터 루프의 현재의 반복을 구현하기 위해서 8회 실행되어도 됨에 따라서, 상기 제1의 복수의 명령들도 실행되어도 된다.
그렇지만, 다른 실시예에서, 상기 제2의 복수의 명령들은 스칼라 명령들을 포함하지 않을 수도 있고, 그 대신에 상기 제2의 복수의 명령들은 상기 벡터화의 디폴트 레벨과 비교할 때 감소된 수의 벡터 요소들에 관해 연산하는 벡터 명령들로 이루어질 수도 있다. 예를 들면, 일 실시예에서, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 초기의 술어 값을 갖는 가드 술어를 발생하고, 상기 제2의 복수의 명령들은 상기 실행회로에 의해 하나 이상의 벡터 오퍼랜드들의 상기 요소들의 서브세트에 관해 병렬로 연산하는 벡터 명령들을 포함하고, 상기 서브세트는 상기 가드 술어에 의해 특정된다. 상기 제2의 복수의 명령들의 각 반복시에, 상기 가드 술어의 술어값은 임의의 선행하는 반복에 의해 연산된 상기 하나 이상의 벡터 오퍼랜드들의 임의의 요소들을 제외하도록 갱신된다. 따라서, 이러한 해결방법에 따라, 상기 벡터 루프의 현재의 반복과 관련된 상기 벡터 오퍼랜드들의 요소들의 전부를 처리하기 위해서 상기 제2의 복수의 명령들을 반복적으로 실행하는 것이 그래도 필요하지만, 상기 제2의 복수의 명령들의 각 반복에 있어서, 상기 요소들의 배수가 병렬로 처리된다. 이에 따라, 상기 어드레스 해저드 문제를 해소하기 위해서 상기 벡터화의 레벨을 축소할 수 있지만, 상기 벡터 루프의 현재의 반복내에서 벡터화의 레벨도 달성할 수 있다.
일 실시예에서는, 마스터 술어를 사용하여 상기 벡터 오퍼랜드들내의 상기 액티브 요소들을 특정할 수 있다. 따라서, 그것은, 벡터 오퍼랜드내에 지정된 요소 전부는, 상기 벡터화의 디폴트 레벨이 이용될 때에도, 벡터 루프의 현재의 반복내에서 처리되지 않는 것일 수도 있다. 따라서, 그것이 상기 어드레스 해저드 조건의 존재시에 상기 제2의 복수의 명령들로 이루어진 상기 폴백 경로를 채용하도록 결정될 때, 액티브 요소들인 것으로서 상기 마스터 술어에 의해 특정되지 않은 상기 벡터 오퍼랜드들의 임의의 요소들에 관해 연산하지 않도록 보장하는 것도 중요하다. 일 실시예에서는, 이것을, 상기 마스터 술어에서 특정한 액티브 요소들인 상기 요소들의 서브세트를 특정하기 위해 상기 가드 술어를 제한함으로써 달성한다.
상술한 것처럼 일부의 실시예들에서, 상기 벡터화의 감소 레벨은, 별개의 폴백 경로를 제공하여, 상기 체크 명령의 실행이 상기 어드레스 해저드 조건의 존재시에 그 폴백 경로가 사용되도록 상기 루프내의 제어 흐름에 직접 영향을 미치게 함으로써 구현되지만, 다른 실시예에서는 이러한 별개의 폴백 경로를 제공하는 것이 필요하지 않을 수도 있다. 특히, 다른 실시예에 따라, 상기 벡터화의 디폴트 레벨은 제1의 액티브 요소들의 수를 특정하고, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 명령들의 시퀀스를 실행하여 상기 벡터 루프를 구현할 때 상기 제1의 요소들의 수를 병렬로 처리하도록 배치된다. 그렇지만, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여, 상기 체크 명령의 실행이 상기 어드레스 해저드 조건의 존재를 판정할 때 상기 액티브 요소들의 수를 상기 제1의 수미만의 제2의 액티브 요소들의 수로 감소시키는 제어 출력을 발생하여, 명령들의 상기 시퀀스를 실행하여 상기 벡터 루프를 구현할 때 상기 제2의 요소들의 수를 병렬로 처리함으로써 상기 벡터화의 감소 레벨을 상기 실행회로가 이용하게 한다.
따라서, 이러한 해결방법에 따라, 상기 체크 명령의 실행 결과에 의존한 제어 흐름의 변화를 일으키는 것 보다는, 상기 체크 명령의 실행을 사용하여 상기 체크 결과에 의존하여 처리된 액티브 요소들의 수를 직접 변경할 수 있다. 이렇게 하여, 상기 벡터 루프의 각 반복동안에, 상기 처리된 액티브 요소들의 수는 그 특별한 반복동안 상기 체크 명령의 결과에 의존하여 변경되어도 된다. 따라서, 상기 어드레스 해저 조건이 검출되지 않는 임의의 반복에 대해서는, 요소들의 상기 디폴트, 제1의, 수는 병렬로 실행될 수도 있지만, 상기 어드레스 해저드 조건들이 검출되는 임의의 반복에 대해서는, 상기 체크 명령의 결과에 의해 결정된 것처럼 액티브 요소들의 감소된 수로 처리가 진행되어도 된다. 이에 따라 상기 체크 결과는 상기 벡터 루프의 각 반복동안에 처리된 요소들의 수를 직접 제어할 수 있어, 반복별 레벨상에서 벡터화의 정도의 동적 조정을 가능하게 한다.
일 실시예에서, 상기 벡터 루프의 각 반복의 시작부분에서, 상기 실행회로는 상기 벡터화의 디폴트 레벨을 이용하는 것으로 되돌아가도록 배치된다. 따라서, 이용된 상기 벡터화의 레벨에서 어떠한 축소도, 상기 벡터 루프의 각 시작부분에서 리셋트되어, 벡터화의 완전한, 디폴트, 레벨이 가능한 모든 경우에 이용되는 것을 가능하게 한다.
상기 어드레스 해저드 조건의 존재시에 처리되는 상기 제2의 액티브 요소들의 수가 특정될 수 있는 방식은 많이 있다. 일 실시예에서, 상기 체크 명령을 실행할 때 상기 실행회로에서 발생한 상기 제어 출력은, 상기 제2의 액티브 요소들의 수를 형성하는 상기 액티브 요소들을 특정하는 가드 술어를 포함한다.
상기 체크 명령을 실행할 때 행해진 상기 체크 연산의 유형은 실시예에 따라 달라질 수 있다. 일 실시예에서, 상기 체크 명령은 복수의 액티브 어드레스 요소들로 이루어진 적어도 하나의 벡터 오퍼랜드를 지정하고, 상기 실행회로는, 상기 체크 명령을 실행할 때, 상기 어드레스 해저드 조건이 존재하는지를 판정하기 위해서 각 액티브 어드레스 요소와 각기 다른 액티브 어드레스 요소를 비교하도록 배치된다.
다른 실시예에서, 상기 체크 명령은 인접 어드레스들의 제1 시퀀스와 관련된 제1 어드레스와 인접 어드레스들의 제2 시퀀스와 관련된 제2 어드레스를 지정할 수도 있고, 상기 실행회로는 상기 체크 명령을 실행할 때, 상기 제1 어드레스와 상기 제2 어드레스간의 차이에 의존하여 상기 어드레스 해저드 조건의 존재를 판정하도록 배치된다.
이러한 해결방법은, 어드레스 충돌이 생기게 할 수 있는 어드레스들의 해당 벡터들이 인접 어드레스들의 시퀀스를 각각 지정하는 상황들에서 필요한 비교를 행하는 효율적인 메카니즘을 제공할 수 있다.
상기 산출된 차이에 근거하여 상기 어드레스 해저드 조건의 존재를 검출할 수 있는 방식은 많이 있다. 예를 들면, 일 실시예에서, 상기 제1 어드레스를 x로 하고 제2 어드레스를 z로 상정하면, 상기 차이 z-x가 상기 벡터 길이이상이거나 음이거나 0인 경우, 어드레스 해저드 조건이 없도록 보장될 수 있다. 그렇지만, 상기 차이 z-x가 벡터 길이미만이고 0보다 큰 경우, 어드레스 해저드 조건이 일어날 것이다.
다른 실시예에서는, 대신에, 상기 제1 어드레스와 상기 제2 어드레스간의 절대차가 상기 벡터 길이 이하이거나 같은 상황을 검출하기 위해 체크를 행하기로 결정하여도 된다. 상기 절대차가 상기 벡터 길이미만일 경우, 이것은, 상기 어드레스 해저드 조건의 존재를 나타낼 수 있다. 그렇지만, 절대차에 근거한 체크는 일부의 긍정 오류를 생성할 수도 있는데, 그 이유는 상기 산출의 부호 있는 정수 결과 z-x가 상기 벡터 길이미만이고 또한 음이거나 0일 때, 실제로 경쟁 조건들이 없기 때문이라는 것을 주목해야 한다.
일 실시예에서 상기 체크 명령은 상기 실행회로가 상기 요구된 체크 연산을 행하게 하고 상기 벡터 루프 반복의 나머지 핸들링에 직접 영향을 미치는데 필요한 결과 데이터를 생성하게 하도록 배치되어도 되지만, 다른 실시예에서 또 다른 성능 향상은 그 밖의 연산들과 상기 체크 연산을 조합하여서 얻어질 수 있다. 예를 들면, 일 실시예에서, 상기 체크 명령은 체크 및 메모리 액세스 명령이고, 상기 실행회로는 상기 체크 및 메모리 액세스 명령의 실행에 응답하여, 상기 어드레스 해저드 조건이 상기 복수의 메모리 어드레스 중에서 존재하는지를 판정하기 위해 체크 연산을 행하고 또한, 상기 복수의 메모리 어드레스들에 관해 메모리 액세스 연산을 행한다.
상기 메모리 액세스 연산은 다양한 형태를 취할 수 있다. 예를 들면, 상기 체크 및 메모리 액세스 명령에서 지정한 상기 복수의 메모리 어드레스들을 사용하여 메모리로부터 데이터를 검색하는데 사용된 게더(gather) 연산의 형태를 취할 수도 있다. 상기 체크 명령과 메모리 액세스 명령의 기능성을 병합함으로써, 상기 체크 연산의 지연성을 숨기는 것이 가능하다. 특정한 경우에 상기 메모리 액세스 연산을 행하기 위해서 요구된 상기 처리의 일부가 상기 체크 연산을 위해 재사용될 수 있다는 사실도 확인되었다.
또한, 또 다른 이득은 상기 체크 및 메모리 액세스 연산들을 단일 명령으로 조합함으로써 이루어질 수 있다. 예를 들면, 상기 실행회로는, 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 메모리 액세스 연산의 임의의 나머지 부분을 종료하도록 배치되어도 된다. 따라서, 이에 따라, 상기 어드레스 해저드 체크 결과들에 의존하여 상기 메모리 액세스 연산의 일부의 부분들을 조기에 종료할 수 있다. 따라서, 이것은 불필요한 연산들의 수행을 피하므로 상기 장치의 전반적인 효율성을 향상시킬 수 있다.
일 실시예에서, 상기 처리회로는, 상기 체크 명령의 실행시에 체크 연산을 행하는 전용 체크 회로를 구비하여도 된다. 그렇지만, 다른 실시예에서, 그러한 전용 체크 회로를 제공하는 것이 필요하지 않을 수도 있고, 대신에, 데이터 처리 연산들을 행하기 위해 제공되는 상기 처리회로내의 기존의 처리부는 상기 체크 명령의 실행시에 상기 필요한 체크 연산을 행하기 위해 재사용되어도 된다.
이러한 일 실시예에서, 상기 처리부내의 회전기 회로와 비교기 회로는, 상기 체크 연산의 수행동안에 요구된 하나 이상의 어드레스 비교들을 병합하는데 사용된다. 따라서, 상기 처리부내의 기존의 하드웨어는, 상기 체크 연산을 수행할 때 상기 요구된 어드레스 비교들의 수행의 효율성을 향상시키는데 사용되어도 된다.
상술한 것처럼, 일부의 실시예들에서, 상기 체크 연산의 결과는, 상기 벡터 루프내의 하나 이상의 이후의 명령들을 실행할 때 상기 실행회로에서 참조한 조건 플래그들을 직접 갱신하는데 사용될 수 있다. 그렇지만, 다른 실시예에서, 상기 장치는, 상기 실행회로가 상기 체크 명령의 실행에 의해 생성된 상기 결과 데이터를 저장하도록 배치되는 해저드 체크 상태 레지스터를 더 구비하여도 된다. 이것은, 예를 들면 명령 인코딩 공간이 매우 제한된 상황에서 약간의 이득을 제공할 수 있다. 예를 들면, 이러한 상황에서는, 상기 체크 및 메모리 액세스 명령의 앞선 예와 같은 단일 명령을 거쳐 상기 체크 연산과 다른 연산을 조합하기로 결정하여도 된다. 그 후, 상기 체크 연산의 결과들의 사용은, 상기 체크 연산을 필요로 하지 않았던 상황들에서는 무시할 수 있었다. 특히, 이러한 시나리오에서는, 비록 그 결과들로 상기 해저드 체크 상태 레지스터를 갱신하지만, 이후의 명령들은 상기 해저드 체크 상태 레지스터를 참조하지 않았을 것이고, 이에 따라 상기 명령의 실행은 사실상 상기 지정된 메모리 액세스 연산을 행하였을 것이다. 따라서, 이것은, 필요에 따라, 단일 명령이, 표준 메모리 액세스 연산 또는, 관련된 어드레스 충돌을 체크하면서 메모리 액세스 연산을 행하도록 배치되는 것을 가능하게 한다. 상기 어드레스 충돌 검출을 이용하고 싶었던 상황들에서, 예를 들면, 이후의 명령은, 상기 해저드 체크 상태 레지스터의 콘텐츠를 판독하고 그 조건 플래그들을 적절하게 설정하도록 배치될 수 있고, 그 후 분기 명령은 상술한 것처럼 실행될 수 있고, 이때의 상기 제어 흐름은, 상기 조건 플래그들이 어떻게 설정되었는지와, 어드레스 해저드 조건이 검출되었는지 아닌지에 의존한다. 다른 실시예에서, 상기 체크 및 메모리 액세스 명령은 상기 조건 플래그들을 직접 설정할 수 있었다.
일 실시예에서, 각 벡터 오퍼랜드는 N 요소들을 포함하고, N 액티브 요소들은, 상기 실행회로가 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 상기 명령들의 시퀀스를 실행할 때 병렬로 N 요소들을 처리하도록 상기 벡터화의 디폴트 레벨과 관련된다. 따라서, 이러한 실시예에서는, 각기 지정된 벡터 오퍼랜드의 요소들의 전부는, 액티브 요소들이라고 상정되고, 적절한 처리가 실시된다.
그렇지만, 다른 실시예에서, 각 벡터 오퍼랜드는 N 요소들을 포함하고, 마스터 술어는 액티브 요소들로서 N이하의 요소들의 수를 특정하고, 상기 벡터화의 디폴트 레벨은 상기 마스터 술어에 의해 특정된 상기 액티브 요소들에 대응하여, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 상기 마스터 술어에 의해 특정된 상기 액티브 요소들을 병렬로 처리한다. 따라서, 마스터 술어의 이용에 의해, 각 벡터 오퍼랜드내에 지정된 상기 요소들의 서브세트는 액티브 요소들로서 상기 벡터 루프 반복내에서 처리되도록 특정될 수 있다.
일부의 실시예들에서는, 상기 체크 명령의 다수의 상이한 변형들을 제공할 수도 있다. 예를 들면, 하나의 변형은, 상기 어드레스 해저드 조건이 검출될 때마다 하나 이상의 플래그들을 설정하지만, 어드레스 요소들이 상기 어드레스 해저드를 일으키는 중인 어떠한 정보도 캡쳐하지 않도록 배치되어도 되고, 다른 변형은, 상기 입력 벡터(들)의 요소들내에서 상기 어드레스 충돌이 어디에서 검출되었는지에 의존하는 값을 갖는 가드 술어를 생성하도록 배치되어도 된다. 발명자들은, 상기 체크 명령의 상이한 변형들이, 실제로 검출된 상기 어드레스 충돌의 통계적 유형에 따라, 상이한 레벨의 성능 향상을 달성할 수도 있다는 것을 실현하였다. 일 실시예에서, 상기 장치는, 명령들의 시퀀스들을 실행할 때 검출된 상기 어드레스 해저드 조건들의 정보를 유지하도록 구성될 수 있고, 이때의 정보는 시간에 따라 코드의 재컴파일을 가능하게 하는 컴파일러에 이용 가능하게 한다.
특히, 일 실시예에서, 상기 장치는 이전에 실행된 명령 시퀀스들 동안 상기 어드레스 해저드 조건의 발생에 관한 이력 데이터를 유지하는 카운터 회로를 더 구비하고, 상기 실행회로는 복수의 상이한 타입의 체크 명령을 포함하는 명령 세트의 제어하에 연산하도록 배치된다. 그 후, 상기 이력 데이터는, 상기 이력 데이터를 고려하는 상기 벡터 루프내에서 어떤 타입의 체크 명령을 사용할지를 컴파일러가 판정 가능하게 하는 컴파일러에 이용 가능하게 된다.
상기 컴파일러는, 정적 컴파일러이어도 되거나, 상기 이력 데이터에 의존하여 실행된 상기 명령 시퀀스를 동적으로 변경하기 위해 실행 시간에 사용된 동적 컴파일러이어도 된다.
상기 이력 데이터는 다양한 형태를 취할 수 있다. 예를 들면, 그것은, 일 실시예에서는, 시간에 따라 상기 어드레스 해저드 조건의 발생들을 카운트할 뿐이다. 다른 실시예에서는, 그것은, 추가로 또는 이와는 달리, 각 벡터 길이내에서 검출된 어드레스 충돌들의 수를 캡쳐하려고 할 수도 있다. 성능을 최상으로 향상시키는데 사용된 체크 명령의 타입은, 검출된 어드레스 충돌들의 전체 수에 의존할 뿐만 아니라, 그 어드레스 충돌들이 특별한 벡터 길이들내에서 밀집되는지 또는, 상기 벡터 루프의 반복내에 보다 균등하게 분배되는지에도 의존할 수 있다. 상기 어드레스 충돌의 전체 수와, 그 어드레스 충돌들이 상기 벡터 길이 그룹들내에 어떻게 밀집되는지의 정보와의 양쪽을 캡쳐하는, 이력 데이터를 유지함으로써, 이것은, 상기 컴파일러에 적절한 정보를 제공하여, 성능을 향상시키기 위해서 상이한 변형의 상기 체크 명령을 최상으로 사용하는 방법을 결정할 수 있다.
이하, 특별한 실시예들에 대해 상기 도면들을 참조하여 설명한다.
상술한 것처럼, 수행을 위해 벡터화하고 싶을지도 모르는 많은 실세계 프로그램들에서는, 스칼라 코드에서 반복간에 어드레스 의존성의 중대한 양이 존재할 수 있다. 설명의 간략을 기하기 위해서, 다수의 사용 케이스들을 생각한다. 제1 사용 케이스로서, 다음의 연산을 행하는 것이 바람직한 히스토그램 문제를 생각해볼 것이다:
Figure pct00001
본질적으로, 상기 연산은, x의 값들의 시퀀스에 대해, 어드레스를 형성하는데 사용되는 어레이 C로부터 데이터를 취득하는 것과, 그 어드레스에서의 상기 데이터 값 A에 액세스하는 것과, 그 후 그 데이터 값을 1씩 증분하는 것을 포함한다.
경쟁 조건들이 없다(즉, 어드레스 충돌들이 없다)는 것을 보장할 수 있는 경우, 임계 루프동안 상기 벡터 의사코드를 다음과 같이 표현할 수도 있다:
· 오프셋 x에서의 어레이 C로부터 벡터 레지스터 zC에의 인접한 판독을 행한다
· zC에서의 포인터들을 사용하여 어레이 A로부터 수집하여 결과를 벡터 레지스터 zA에 기록한다
· #1을 zA에서의 요소마다 가산한다
· zC에서의 포인터들을 사용하여 벡터 zA를 분산시킨다(scatter)
· x를 벡터 길이만큼 증분시킨다
· x가 상기 어레이의 사이즈미만인 것을 체크하고 사이즈 미만일 경우 반복을 계속한다.
따라서, 포인터들의 벡터들은, 어레이 C로부터 취득되고, 벡터 레지스터 zC에 저장되고 나서, 어레이 A로부터 데이터 값들을 상기 벡터 레지스터 zC에서의 각종 포인터들을 사용하여 수집된다. 상기 벡터 레지스터 zA에, 상기 레지스터 zC에서의 포인터들을 사용하여 상기 어레이 A로부터 취득된 데이터 값들이 채워지면, 수치 1이 데이터값마다 가산되고, 그 결과로 얻어진 데이터 값들은 상기 레지스터 zC에서의 동일한 포인터들을 사용하여 메모리에 역으로 분산된다. 이러한 처리는, x가 더 이상 상기 연산을 위해 지정된 상기 어레이의 사이즈 미만이 아닐 때까지 반복된다.
상기 히스토그램 연산을 벡터화함으로써, 이것은 성능을 크게 향상시킬 수 있다는 것을 알 것이다. 그렇지만, 상기 어레이 C에서 일부의 엔트리들이 동일한 어드레스 요소를 나타낼지도 모를 가능성이 있는 경우와, 이러한 어드레스 충돌들이 인덱스들의 단일의 벡터(즉, 상기 벡터 루프의 한번의 반복에서 사용된 어드레스들의 벡터)에 혹시 존재하게 되는 경우, 상기 해결방법에 의해 결과가 부정확하게 될 것이다(특히, 하나 이상의 데이터 값들은 정확한 양만큼 증분되지 않을 수도 있다). 상술한 실시예들을 참조하여 상세히 후술하는 것처럼, (저성능이 될) 벡터화를 완전히 피하는 대신에, 상술한 기술들은 실행 시간에 상술한 경쟁 조건들이 검출되어, 적절한 액션이 취하는 것을 가능하게 하는, 상기 벡터 루프내의 체크 명령을 이용한다.
제2 사용 케이스로서, 다음의 연산의 수행을 요구하는, 메모리 카피(Memcpy) 문제를 생각해본다:
Figure pct00002
이 연산은, 하나의 어레이로부터 다른 어레이에 데이터를 복사한다. 이 코드는, 상기 루프내에 제어 코드가 없으므로 벡터화를 위한 좋은 후보인 것이 보통이다. 그렇지만, 상기 코드는, 벡터화에 의해 임의의 어드레스 충돌이 생기는지 아닌지(어레이 A와 B가 중첩할지도 모른다)가 명확하지 않기 때문에 충분한 힌트들을 상기 컴파일러에 제공하지 않고 안전하게 벡터화될 수 없다. 많은 경우에 있어서, 실행 시간에 실제로는 해저드들이 없지만, 컴파일러들은 일반적으로 복수적인 해결방법을 취하고 애매한 상태가 존재하는 코드를 벡터화하지 못함으로써, 어떠한 성능 이득도 희생한다. 그렇지만, 후술하듯이, 여기서 설명된 체크 명령들의 이용을 채택함으로써, 실행 시간에 잠재적인 해저드들을 특정하고, 적절한 시정 조치를 취하는 것이 가능하므로, 컴파일 시간에 임의의 해저드가 그 코드가 실행될 때 일어나는지 일어나지 않을지가 알려지지 않을 때에도, 벡터화의 성능 향상이 유용하게 된다.
상술한 실시예들에 따라 제공된 상기 체크 명령들을 보다 상세히 설명하기 전에, 상기 명령들이 실행될 수도 있는 장치를 도 1을 참조하여 우선 설명하겠다. 특히, 도 1은 일 실시예에 따른 데이터 처리장치를 도시한 것으로, 이때 상기 장치에 의해 실행되는 명령들은 디코드 회로(105)에 건네지는 명령 큐(100)내에 놓인다. 상기 디코드 회로는 이슈(issue) 큐(10)내에 놓인 특정한 제어정보를 발생하기 위해서 상기 명령들을 디코딩하고, 이러한 제어정보를 종종 마이크로 연산이라고 한다. 그 후, 상기 이슈 큐는, 상기 수신된 명령들에서 지정한 연산들을 수행하게 하도록, 적절한 제어정보를 상기 장치의 실행회로를 형성하는 해당 처리부들에 발송한다.
상기 실행회로는, 특별한 데이터 처리 연산들을 행하는 다수의 처리부들로 이루어진 처리회로(115)와, 어느 하나의 방향으로 메모리와 상기 벡터 레지스터 파일(140) 사이에서 벡터 오퍼랜드들을 이동시키는데 사용된 벡터 로드/스토어부(LSU)(145)를 구비한다고 생각되어도 된다.
도 1에 도시된 예에서, 상기 처리회로(115)는, 복수의 벡터 처리 유닛(120, 125, 130, 135)로 형성된다. 이에 따라, 상기 이슈 큐(110)에서 특정된 부동소수점 연산들은 부동소수점 유닛(FPU)(135)에 전송되어 처리될 것이고, 곱셈 연산 및/또는 곱셈 누적 연산은 곱셈 누적(MAC)유닛(130)에 건네질 것이고, 표준 산술연산들은 산술 논리연산 유닛(ALU)(125)에 건네진다. 전용 체크 유닛(120)은, 필요한 어드레스 비교 연산들을 행하여 어드레스 해저드 조건이 존재하는지를 판정하기 위해서, 보다 상세히 후술하는 상기 체크 명령들을 실행하도록 구성될 수 있다. 후술하듯이, 실행된 상기 체크 명령의 변형에 따라, 상기 요구된 어드레스 비교 연산들의 결과는, 하나 이상의 플래그들(155)을 설정시키고 및/또는, 가드 술어를 술어 레지스터 파일(150)의 술어 레지스터들 중 하나의 레지스터내에 설정시킨다. 별개의 전용의 체크 유닛을 갖는 대안으로서, 상기 처리회로내의 기존의 유닛들 중 하나를 사용하여, 상기 체크 명령들을 실행하는데 요구된 연산들을 행하여도 된다. 예를 들면, 후술하듯이, 일 실시예에서는, 상기 ALU(125)을 사용하여 상기 체크 명령들을 실행하고, 이에 따라 상기 플래그들(155) 및/또는 상기 술어 레지스터 파일(150)내의 가드 술어를 설정하여도 된다.
상기 벡터 처리회로(115)에서 요구한 각종 입력 오퍼랜드들은, 상기 벡터 레지스터 파일(140)내의 소스 레지스터들로부터 판독될 것이다. 추가로, 상기 각 유닛에서 발생한 결과 오퍼랜드들은, 전형적으로, 상기 벡터 레지스터 파일(140)내의 목적지 레지스터들에 역으로 저장될 것이다. 로드 및 스토어 명령들은, 대응한 로드 및 스토어 연산들을 상기 LSU(145)에서 행하게 하는데 사용하여, 오퍼랜드 데이터를 메모리로부터 상기 벡터 레지스터 파일(140)의 지정된 레지스터들에 로딩시키거나, 상기 벡터 레지스터들 중 하나 이상의 콘텐츠를 역으로 메모리에 저장시킨다.
상기 데이터 처리장치의 연산을 제어하는데 사용된 콘텐츠를 갖는, 다수의 시스템 레지스터들(160)이 제공되어도 된다. 보다 상세히 후술하듯이, 일 실시예에서, 플래그들(155)을 직접 설정하는 대안으로서, 상기 체크 연산의 결과는, 상기 처리회로에서 실행한 하나 이상의 이후의 명령들에서 나중에 참조하기 위해 해저드 체크 상태 레지스터(HCSR)내에 저장되어도 된다.
또한, 보다 상세히 후술하듯이, 하나 이상의 어드레스 충돌 통계 카운터들(170)은, 상기 장치내에서 벡터 연산들을 행할 때 검출된 어드레스 충돌들의 수에 관한 이력 데이터를 유지하도록 구성되어도 된다. 상기 장치에 이용가능한 상기 명령 세트가 상기 체크 명령의 다수의 상이한 변형들을 포함하는 상황들에서, 어드레스 충돌들에 대한 적절한 통계적 카운터들을 유지함으로써, 이것은, 상기 체크 명령들의 어느 변형들이 보다 좋게 성능을 향상시킬 가능성이 아주 높은지를 컴파일러 코드가 평가하는 것을 가능하게 하여, 상기 코드의 재컴파일이 상기 통계적 카운터들에서 유지한 상기 이력 데이터를 고려할 수 있다는 사실이 확인되었다. 이것을, 도 8 및 도 9를 참조하여 후술하겠다.
이후 설명된 실시예들에 따라, 도 1의 상기 장치는 벡터 루프를 반복적으로 실행하도록 배치될 수도 있고, 각 반복동안에 상기 실행회로는 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행하도록 배치되고, 이때 상기 시퀀스는 어드레스 해저드 조건의 존재에 대해 체크되는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함한다. 상술한 실시예에 따라, 상기 체크 명령의 다수의 상이한 변형들을 고찰한다. 제1 변형은 다음과 같다:
변형 1:
Figure pct00003
입력 오퍼랜드 Zn은, 어드레스 요소들의 벡터를 갖는 벡터 레지스터를 특정한다. 상기 오퍼랜드 Pg는, 상기 벡터 오퍼랜드 Zn내의 상기 어드레스 요소들 중 어느 것이 액티브 어드레스 요소들인지를 특정하는데 사용되는 마스터 술어를 갖는 술어 레지스터를 특정한다. 상기 어드레스 요소들은, 직접 어드레스들을 특정하여도 되거나, 대신에 기저 어드레스와 조합되어 상기 어드레스 자체를 특정하는 포인터들/오프셋들이어도 된다. 일 실시예에서, 상기와 같은 마스터 술어의 사양은 선택적이어도 되고, 지정된 마스터 술어가 없을 경우 상기 벡터 오퍼랜드 Zn내의 어드레스 요소들의 전부를 액티브 어드레스 요소들이라고 상정한다. 끝으로, 상기 파라미터 T는, 데이터 타입, 예를 들면 32비트 데이터, 64비트 데이터 등을 특정한다. 따라서, 이것은 벡터 오퍼랜드내의 각 요소의 사이즈를 특정한다. 상기 체크 명령을 실행하면, 상기 처리회로(115)는, 어드레스 요소들 중 어느 하나가 동일한지를 판정하기 위해서 각 액티브 어드레스 요소와 각기 다른 액티브 어드레스 요소를 비교하고, 이러한 상황을 검출할 때 어드레스 해저드 조건의 존재를 나타내는 출력을 발생한다. 상술한 변형 1에 따라, 상기 출력은 상기 어드레스 해저드 조건의 존재 또는 부재를 나타내게 하나 이상의 조건 플래그들(155)을 설정되게 한다.
이하, 상기 히스토그램 문제의 상술한 제1 이용 케이스를 생각할 때, 상기 변형 1 체크 명령의 이용에 대해서 도 2를 참조하여 보다 상세히 설명한다. 단계 200에서는, 상기 오프셋 x를 초기화하고, 그 후 단계 205에서는, 일련의 포인터들(어드레스 요소들)을 상기 오프셋 x를 사용하여 상기 벡터 레지스터 zC에 로딩한다. 상기 오프셋 x를 사용하여 단계 205에서 행해진 인접한 어드레스 로드는, 필요한 경우 마스터 술어 정보를 고려할 수 있었다. 그 후, 단계 210에서는, 상기 레지스터 zC에 로딩되어 있는 포인터들을, 상기 체크 명령의 실행에 의해 어드레스 충돌에 대해 체크하고, 이에 따라 상기 플래그들(155)을 설정한다. 마스터 술어가 지정되는 경우, 상기 체크 연산은 상기 마스터 술어에 의해 어떠한 비액티브 어드레스 요소들도 제외하도록 제한될 것이다.
그 후, 단계 215에서는, 상기 플래그들이 어드레스 충돌의 존재를 가리키는지를 판정한다. 존재하지 않을 경우, 이것은 상기 벡터 레지스터 zC에서의 액티브 어드레스 요소들 전부가 유일하다는 것을 가리키고, 이에 따라 벡터화의 디폴트 레벨은 상기 벡터 루프의 현재의 반복을 위해 채용될 수 있다. 설명의 간략을 기하기 위해서, 8개의 액티브 어드레스 요소 A, B, C, D, E, F, G 및 H가 있다고 상정하므로, 상기 벡터화의 디폴트 레벨을 채용할 때, 8개의 어드레스들 모두가 병렬로 처리된다.
이에 따라, 상기 체크 연산의 수행에 의해 검출되는 어떠한 어드레스 충돌도 부재할 경우에, 단계 220의 처리로 진행되어, 상기 벡터 오퍼랜드 레지스터 zC에서의 어드레스 포인터들의 전부를 사용하여 메모리로부터 데이터를 수집하고, 그 결과로 얻어진 데이터는 상기 벡터 레지스터 zA내에 기록된다. 그 후, 단계 225에서는, 로딩후 데이터에 관해 상기 요구된 벡터 연산이나 벡터 연산들을 행하고, 이때의 결과들은 역으로 상기 벡터 레지스터 zA내에 기록된다. 상기 히스토그램 문제를 생각하면, 이 단계에서 요구되는 전부는 상기 레지스터 zA내에 로딩되어 있는 상기 각 데이터 값에 1을 가산하는 것이지만, 그 대신에 단계 225에서는 그 밖의 타입들의 연산을 위해서 하나 이상의 상이한 벡터 연산들을 행할 수 있었다는 것을 알 것이다. 원하는 경우, 단계 225는, 병렬 처리의 비액티브 레인들에 관한 어떠한 데이터도 처리하지 않도록 제한될 수 있다. 예를 들면, 비액티브 레인들과 관련된 임의의 예외들의 발생 가능성을 피하기 위해서 상기 벡터 연산들을 행할 때 상기 마스터 술어를 고려하는 것이 유용할 수도 있다.
그 후, 단계 230에서는, 상기 벡터 레지스터 zA에서의 데이터를, 상기 오퍼랜드 레지스터 zC에서의 동일한 어드레스 포인터들을 사용하여 메모리에 역으로 분산시킨다. 상기 스캐터 연산은, 마스터 술어가 지정되어 있을 경우 상기 마스터 술어에 의해 제한된다.
이 시점에서, 상기 벡터 루프 반복이 데이터의 8레인들을 병렬로 처리됨에 따라서, 8 어드레스들을 생각한다는 것을 알 것이다. 이에 따라, 단계 235에서는, 상기 벡터 길이만큼 상기 오프셋 x를 증분하고 나서, 단계 240에서는 처리할 보다 많은 데이터가 있는지를 판정한다. 없을 경우, 처리는 단계 245에서 종료하지만, 처리할 보다 많은 데이터가 있다고 상정하면, 단계 205의 처리로 되돌아가 상기 벡터 루프의 다음 반복을 행한다.
단계 215에서 상기 조건 플래그들이 어드레스 충돌을 가리킨다고 판정한 경우에, 도 2에서 설명된 실시예에 따라, 벡터화의 감소된 레벨은, 도 2의 우측에 도시된 단계들의 시퀀스에 의해 구현된 폴백 경로에 분기함으로써 이용된다. 단지 예로, 8 어드레스 요소들의 상기 시퀀스가 A, B, C, D, E, F, C, H이고 이에 따라 상기 어드레스 요소 C의 2개의 발생으로 인해 어드레스 충돌이 있는 것으로 가정한다. 그 처리를, 이 상황에서 상기 체크 명령 후 조건적 분기 명령의 실행에 의해 상기 폴백 경로에 분기시킬 수 있고, 이때의 상기 분기 명령은, 상기 체크 명령의 실행에 의해 설정된 상기 플래그들이 어드레스 해저드 조건의 존재를 가리키는지를 복수의 경우에서 상기 폴백 경로에 분기시킨다.
단계 250에서는, 단일 레인만을 특정하여 처리하기 위해 술어를 초기화한다. 따라서, 술어를 "10000000" 값으로 초기화할 수 있는 제1 반복시는, 벡터화의 디폴트 레벨에 따라 처리하는 8레인들이 있다고 상정한다. 그 후, 단계 255에서는, 상기 술어를 사용하여 상기 오퍼랜드 레지스터 zC로부터 하나의 포인터를 선택하고, 상기 제1 반복에서 이것은 어드레스 A에 대응한 포인터를 특정한다. 그 후, 단계 260에서는, 상기 어드레스에서 특정한 스칼라 데이터 요소를 로딩하고, 상기 요구된 벡터 연산(이를테면 상기 히스토그램 문제를 생각할 때 값을 1씩 증분하는 것)을 행하고 나서, 그 결과를 상기 특정된 포인터를 사용하여 메모리에 역으로 저장한다.
그 후, 단계 265에서는, 처리할 보다 많은 액티브 레인들이 있는지를 판정하며, 상기 액티브 레인들의 수는 지정된 임의의 마스터 술어에 의존한다. 처리할 보다 많은 액티브 레인들이 있는 것으로 상정하면, 단계 270의 처리로 진행되어, 지정되어 있는 임의의 마스터 술어를 유념하여 다음 액티브 레인을 특정하기 위해 상기 술어를 조정한다. 그 후, 단계 255의 처리로 되돌아간다. 단지 예로, 상기 마스터 술어가 8레인들 저부가 액티브 요소들을 갖는 것으로서 특정하거나, 마스터 술어가 전혀 지정되지 않은 경우에, 단계 255, 260, 265의 처리가 차례로 상기 어드레스 요소마다 8회 반복된다는 것을 알 것이고, 그 후, 단계 265에서는, 처리할 보다 많은 액티브 레인들이 없다고 판정할 것이다. 이 시점에서, 그 처리는 풀 벡터 경로에 되돌아가고, 특히 단계 235에 되돌아가, 상기 오프셋 x를 상기 벡터 길이만큼 증분한다. 이 시점에서, 상기 오프셋 x를 상기 벡터 길이만큼 증분하는 것이 적절한데, 그 이유는 상기 벡터 레지스터 zC에서의 액티브 어드레스 요소들 전부가 도 2의 우측에 도시된 단계들의 반복적 실행을 통해 처리되었을 것이기 때문이다. 그 후, 단계 240을 거쳐 다음 벡터 루프 반복의 처리로 진행될 수 있다.
변형 1의 상기 체크 명령에 따라, 단계 210을 행할 때, 상기 어드레스 비교 처리가 일부의 상황들에서 조기에 종료할 수 있다는 것을 알 것이다. 특히, 어드레스 충돌이 검출되자마자, 이에 따라 상기 플래그들이 설치될 수 있고, 또 다른 어드레스 충돌들이 있는지를 판정하기 위해 임의의 또 다른 어드레스 비교를 행할 필요가 없다. 이것은 매우 효율적인 체크 처리에 제공할 수 있다.
또한, 상기 폴백 경로를 매우 효율적으로 구현한다는 것을 알 것이다. 특히, 상기 요구된 데이터를 스칼라 방식으로 로딩하지만, 상기 요구된 어드레스들에 로딩하기 위해 스칼라 연산들을 행할 필요는 없는데, 그 이유는 그 요구된 어드레스들의 전부가 상기 벡터 레지스터 zC내에서 이용 가능하기 때문이고, 단계 250, 270을 참조하여 상술한 것처럼 상기 술어를 사용 및 조정함으로써, 그 어드레스 요소들을 위한 어떠한 또 다른 로드 연산들도 행하지 않고 처리되는 각 액티브 어드레스 요소를 차례로 특정하는 것이 가능하다.
도 2의 처리는 다양한 방식으로 구현될 수 있었다는 것을 알 것이다. 그렇지만, 완벽함을 기하기 위해서, 다음의 코드 시퀀스는, 도 2의 처리를 행하는데 사용될 수 있는 하나의 구현 예를 설명한 것이다:
Figure pct00004
Figure pct00005
Figure pct00006
상기 체크 명령의 제1 변형에 따라, 어드레스 충돌의 어떠한 발생도 해당 플래그나 플래그들을 설정시키고, 처리를 위해 상기 폴백 경로에 분기하고, 이때의 현재의 벡터 루프 반복은 실제로 스칼라 연산들의 반복적 시퀀스에 의해 구현된다. 다른 실시예에 따라, 상기 체크 명령은, 단지 설정 플래그들보다 더 멀리 갈 수 있고, 구체적으로는, 어느 어드레스들이 충돌을 일으키는 중인지를 정확히 특정하기 위해 가드 술어를 설정할 수 있다. 도 3을 참조하여 후술하듯이, 이것은 일부의 추가의 단계들을 도입하여 상기 체크 연산을 구현하지만, 그것은, 감소된 벡터 길이에 관해 연산하는 벡터 연산들의 반복적 실행에 의해 상기 폴백 경로를 구현시키므로, 상기 폴백 경로를 보다 빨리 구현하는 것을 가능하게 할 수 있다. 이에 따라, 일 실시예에서, 상기 체크 명령의 제2 변형은 다음과 같다:
변형 2:
Figure pct00007
이 변형에서, 상기 오퍼랜드 Zn은 상기 체크 연산이 행해질 어드레스 요소들의 벡터를 다시 특정하고, 그 타입 정보 T는 그 벡터내의 각 요소의 사이즈를 특정한다. 추가로, 변수 Pd는, 상기 제1 어드레스 충돌이 일어나는 상기 요소까지 제1 세트의 요소들에 속하는 상기 액티브 요소들을 가리키기 위해 가드 술어 정보가 저장되는 결과 술어를 특정한다. 또, 상기 타입 정보 T는, 술어 정보의 각 항목에서 통제한 각 어드레스 요소의 사이즈를 특정하는데 사용된다. 변형 1과 같이, 마스터 술어는, 본 예에서는, 술어 레지스터 Pg를 거쳐 특정될 수 있고, 상기 "/Z"는, 상기 결과 술어내에서, 상기 마스터 술어로 나타낸 것처럼 비액티브 레인들이 0이 되어야 하는 것을 가리킨다. 이것은, 상기 결과 술어가 단지 상기 마스터 술어의 서브세트일 수 있도록 보장한다.
도 3은, 도 2를 참조하여 상술한 것과 같은 연산을 행하기 위해서, 벡터 루프의 각 반복을 구현하도록 행해질 수 있는 단계들의 시퀀스를 설명하는 흐름도다. 단계 300 및 305는, 도 2의 단계 200 및 205에 해당하고, 이에 따라 벡터 레지스터 zC에는 상기 오프셋 x를 사용하여 메모리로부터 검색된 데이터 항목들의 시퀀스가 채워지게 되고, 이때 그 데이터 항목들의 각각은 어드레스 요소를 형성한다. 단계 310에서, 상기 체크 명령의 변형 2의 실행에 응답하여 상기 체크 연산의 수행은, 벡터 레지스터 zC에서의 상기 각 포인터를, 어드레스 충돌들에 대해 체크시키고, 이에 따라 상기 플래그들을 설정시키며, 추가로 상기 제1 충돌이 일어나는 상기 요소까지 제1 세트의 요소들에 속하는 상기 액티브 어드레스 요소들을 가리키도록 가드 술어를 설정시킨다. 상술한 것처럼, 상기 가드 술어를 설정할 때, 이것은 상기 마스터 술어에 의해 제한되고, 따라서, 어드레스 충돌은 상기 마스터 술어로 나타낸 것처럼 비액티브 레인과 관련된 임의의 어드레스 요소에 관해서 발견되지 않을 것이다.
그 후, 단계 315의 처리로 진행되어 상기 데이터를 상기 벡터 오퍼랜드 zC에서의 포인터들을 사용하여 수집하고, 그 결과들을 상기 벡터 레지스터 zA에 기록한다.
단계 320에서는, 어드레스 충돌이 발견되었는지를 나타내기 위해서 상기 플래그들을 평가한다. 발견되지 않았을 경우, 도 2의 단계 225, 230, 235, 240에 대응하는 단계 325, 330, 335, 340의 처리로 진행된다. 도 2의 단계 225에서와 같이, 도 3의 단계 325 동안에, 상기 벡터 연산들은, 마스터 술어가 지정되어 있다고 상정하면, 상기 마스터 술어로 나타낸 것처럼 병렬처리의 액티브 레인내에 있는 것으로서 특정된 로딩후 데이터에 관해서만 행해지도록 제한되어도 된다.
단계 320에서 상기 플래그들이 어드레스 충돌의 존재를 나타낸다고 판정하면, 예를 들면, 분기 명령의 실행을 통해 도 2를 참조하여 상술한 것처럼 동일한 메카니즘을 사용하여, 폴백 경로의 처리로 분기한다. 단지 설명상, 도 2를 참조하여 상술한 구체적인 예에 대해 발견되었던 것처럼 도 3의 연산들을 행할 때 동일한 어드레스 충돌이 발견됨에 따라서, 그 어드레스 요소 C가 병렬처리의 제3 및 제7 레인에서 발견된다고 상정한다. 이에 따라, 단계 350의 처리로 진행되어, 메인 술어는, 상기 마스터 술어의 카피가 있도록 초기화된다. 다음의 설명을 위해, 상기 마스터 술어가 p0이고, 상기 가드 술어가 p1이며, 상기 메인 술어가 p2이라고 상정할 것이다. 보다 상세히 후술하듯이, 상기 메인 술어를 작성하는 이유는, 상기 폴백 경로의 각 반복동안에, 그 메인 술어 값이 갱신되고, 또한 그 밖의 목적을 위해 유지될 필요가 있는 상기 마스터 술어의 값에 오류를 초래하고 싶지 않기 때문이다.
그 후, 단계 355의 처리로 진행되어, 벡터 연산들이 상기 로딩후 데이터 요소들로 행해지고 그 결과들이 상기 레지스터 zA에 기록된다. 선택사항으로, 상기 단계 355의 실행은, 임의의 불필요한 데이터 처리 연산들이 행해지는 것을 피하기 위해서 상기 가드 술어를 유념하여 제한된다. 그렇지만, 그 밖의 실시예들에서, 상기 벡터 처리 회로가 배치되는 방식으로 인해, 그것은 병렬 처리의 상기 레인들의 전부에 관해 연산들을 행하고 나서, 상기 가드 술어를 유념하여 필요하지 않은 결과들을 폐기하는데 꼭 효율적인 것일 수도 있다.
단계 360에서는, 상기 가드 술어로 나타낸 데이터 요소들에 대해서, 그 데이터 요소들을, 상기 벡터 레지스터 zC에서의 해당 포인터들을 사용하여 메모리에 역으로 분산시킨다. 그 후, 단계 365에서는, 상기 처리된 레인들에 대응한 메인 술어에서의 영역을 클리어하여, 메인 술어 p2가 갱신되게 된다. 그 후, 단계 370의 처리로 진행되어, 처리할 레인들이 남아 있는지를 판정한다. 남아 있지 않을 경우, 풀(full) 벡터 경로의 처리로 되돌아갈 수 있고, 구체적으로는, 단계 335의 처리로 분기할 수 있다. 그렇지만, 처리할 레인들이 남아 있다고 하면, 또 다른 체크 연산은, 다음 가드 술어를 생성하기 위해서 상기 메인 술어에 의해 제한된 것처럼 상기 벡터 오퍼랜드 zC에서의 포인터들을 체크하도록 행해진다. 설명상 상기 마스터 술어가 8레인들 전부를 액티브 레인들인 것으로서 특정하고, 상기 어드레스 충돌이 도 3에 도시된 대로 이라고 상정하면, 즉 상기 어드레스 요소들이 A, B, C, D, E, F, C, H이다고 상정하면, 상기 초기의 가드 술어는 "11100000"이 되었을 것이다. 단계 355, 360, 365를 통한 제1 반복 후, 상기 메인 술어는 "00011111"이 되도록 갱신될 것이고, 이에 따라 단계 375를 행할 때, 상기 체크 처리가 새로운 메인 술어에 의해 제한될 경우, 이것은, "00011111"의 갱신된 가드 술어를 생성할 것인데, 그 이유는 또 다른 어드레스 충돌이 발견되지 않을 것이기 때문이다.
단계 375 후, 단계 380에서는 zC에서의 포인터들을 사용하여 상기 데이터를 수집하고, 그 결과들을 상기 레지스터 zA에 기록한다. 단계 380에서 그 데이터를 재수집하는 것이 필요한데, 그 이유는 상기 단계 360에서 행해진 스캐터 연산이 상기 요구된 데이터 항목들의 하나 이상의 값을 변경할 가능성이 있기 때문이고, 따라서 단계 315에서 이전에 수집되었던 데이터에 의존하는 것은 부적절할 것이다. 단계 355의 처리로 되돌아가, 상기 폴백 경로의 다음 반복을 행한다.
이하의 문맥은 도 3의 처리내에서 사용된 각종 술어들의 특정한 형태의 예를 설명한다. 설명상, 상기 마스터 술어는 "11111100" 형태를 갖는다고 상정하면, 상기 벡터화의 디폴트 레벨에 따라 병렬 처리의 레인들이 8개가 있다고 상정하고 있다. 이것은, 마지막 2개의 레인들을 제외하고 모든 레인들이 액티브 요소들을 갖는 것을 특정한다. 단계 310에서의 상기 어드레스 충돌 체크를 행할 때, 이것에 의해 "11100000" 형태의 초기의 가드 술어를 발생하게 된다고 상정한다. 상기 어드레스 충돌의 존재가 단계 320에서 검출되고, 상기 폴백 경로의 처리로 분기하여, 상기 메인 술어 p2는 상기 마스터 술어와 같게 초기화되어서, "11111100"의 값을 취한다. 상기 폴백 경로의 제1 반복동안에, 단계 360에서 상기 스캐터 연산을 행한 후, 상기 메인 술어는, 단계 365에서 갱신되어 "00011100"의 새로운 형태를 취한다, 즉 상기 폴백 경로의 제1 반복의 결과로서 처리되어 있는 제1의 3레인들을 디스카운트한다.
단계 375에서 또 다른 체크를 행한 후, 이에 따라 가드 술어가 갱신될 것이다. 설명상, 다른 어드레스 충돌이 제5 레인과 제6 레인과의 사이에서 특정됨에 따라서 상기 가드 술어 p1은 "00011000"이 되도록 갱신된다고 상정한다.
상기 폴백 경로의 제2 반복 동안에, 단계 360에서의 상기 스캐터 연산 후, 상기 메인 술어는, 단계 365에서 갱신되어 "00000100"의 형태를 취한다. 그 후, 단계 375에서 행해진 체크는 명목상의 체크인데, 그 이유는 남아 있는 액티브 어드레스 요소가 하나만 있기 때문이고, 이에 따라 그 결과로 얻어진 가드 술어는 "00000100"의 형태를 가질 것이다. 결과적으로, 폴백 경로의 최종 반복은 스칼라 반복인 것이 효과적이고, 그 후, 상기 풀 벡터 경로의 처리로 되돌아가 다음 벡터 루프 반복을 시작한다.
도 3의 처리는 다양한 방식으로 구현될 수 있지만, 도 3의 처리를 구현하는 코드 시퀀스의 일례가 다음과 같다는 것을 알 것이다:
Figure pct00008
Figure pct00009
Figure pct00010
도 2 및 도 3을 참조하여 설명된 예들의 양쪽에 있어서, 상기 벡터 루프의 각 반복에서, 그 반복내에서 이용된 벡터화의 레벨을, 검출된 어드레스 해저드 조건의 존재시에 폴백 경로에 분기함으로써 선택적으로 감소시키는 것이 가능하다. 그렇지만, 다른 실시예에서는, 상기 벡터 루프의 반복내에서 벡터화의 감소된 레벨을, 별개의 폴백 경로를 제공하지 않고 이용할 수 있다. 도 4는 이러한 다른 실시예에 따라 행해진 단계들을 설명하는 흐름도로, 도 4에서는 변형 2의 상기 체크 명령을 실행함에 따라서, 가드 술어를 발생한다고 상정하고 있다. 단계 400, 405 및 410은, 단계 410에 있어서, 플래그들의 상태에 의존하여, 상기 벡터화의 디폴트 레벨로 연속할지 또는 폴백 경로에 분기할지를 결정하는 이후의 분기 명령이 없으므로, 어떠한 플래그들도 설정될 필요는 없다는 것을 제외하고는, 도 3의 단계 300, 305 및 310에 대응한다.
대신에, 단계 410 후 단계 415의 처리로 진행되어, 데이터 값들의 벡터를, 상기 벡터 레지스터 zC에서의 포인터들을 사용하여 메모리로부터 수집하고, 이때의 결과는 벡터 레지스터 zA에 기록한다. 원하는 경우, 일 실시예에서, 상기 게더 연산은, 단계 410에서 발생된 상기 가드 술어에 의해 제한될 수 있다.
그 후, 단계 420의 처리로 진행되어, 벡터 연산들은 상기 로딩후 데이터에 관해 행해지고, 이때의 결과들은 목적지 레지스터 zA에 역으로 기록된다. 또, 그 연산들은, 원하는 경우, 상기 가드 술어를 유념하여 제한될 수 있어, 그 연산들은 상기 가드 술어에서 특정한 액티브 요소들에 관해서만 행해진다.
그 후, 단계 425의 처리로 진행되어, 상기 벡터 레지스터 zA에서의 데이터는 벡터 레지스터 zC에서의 포인터들을 사용하여 분산되지만, 상기 가드 술어에 의해 제한된다. 이에 따라, 상기 스캐터 연산 동안에 메모리에 역으로 기록된 결과 데이터만이, 상기 가드 술어가 단계 410에서 행해진 상기 체크 연산에 근거하여 액티브인 것으로서 특정한 상기 처리 레인들과 관련된다는 것을 알 것이다. 따라서, 어드레스 충돌 조건의 검출의 부재시에, 상기 벡터화의 디폴트 레벨이, 단계 415, 420 및 425의 수행동안에 이용됨으로써, 액티브 레인들 전부가 처리되고, 지정된 임의의 마스터 술어에 의해서만 제한된다는 것을 알 것이다. 그렇지만, 어드레스 해저드 조건이 검출되는 경우에, 벡터화의 감소된 레벨은 단계 415, 420, 425 동안에, 상기 가드 술어를 유념하여 적어도 상기 스캐터 연산을 제한함으로써 이용되어, 상기 마스터 술어로 나타낸 상기 레인들의 서브세트를 액티브 레인들로서만 특정할 것이다. 그 후, 단계 430에서는, 상기 오프셋 x를 상기 가드 술어 카운트만큼 증분한다. 따라서, 상기 가드 술어가 3개의 액티브 레인만을 특정한 경우, 상기 오프셋 x를 3씩 증분할 것이다. 이에 반해서, 어드레스 충돌 조건이 검출되지 않은 임의의 반복에 있어서, 상기 가드 술어는 처리된 레인들에 관해 제약이 없다는 것을 특정하는 것이 유효하고, 이에 따라 이러한 반복에서 상기 오프셋 x가 단계 430에서 상기 벡터 길이만큼 증분될 것이다.
단계 435에서는, 처리할 보다 많은 데이터가 있는지를 판정하고, 그럴 경우는 단계 405의 처리로 되돌아간다. 상기 벡터화의 디폴트 레벨이나 상기 벡터화의 감소된 레벨이 선행하는 반복에서 이용되었는지의 여부에 상관없이, 단계 405에서, 그 처리는 다음 반복을 위해 상기 벡터화의 디폴트 레벨로 역으로 항상 되돌아가고, 이에 따라 상기 벡터 레지스터 zC에 로딩된 포인터들의 수는 상기 벡터 길이에 의존할 것이다는 것을 주목해야 한다.
단계 435에서 처리할 보다 많은 데이터가 없다고 판정할 경우는, 단계 440에서 처리를 종료한다.
도 4의 상기 설명에서는 비록 어떠한 플래그 설정도 필요하지 않을지라도, 실행된 상기 체크 명령이 변형 2와 본질적으로 같다고 상정하였지만, 다른 실시예에서는, 가드 술어를 발생하는 것이 아니고, 현재의 반복동안에 처리되는 액티브 요소들의 수를 나타내는 수를 출력으로서 발생하는 체크 명령의 다른 변형을 사용할 수 있었다. 어드레스 충돌이 검출되지 않은 경우, 그 수는 통상의 벡터 길이만을 나타내고, 따라서 상기 반복내에서 다운스트림 처리는, 상기 연산을 위해 지정된 임의의 마스터 술어이외의 것에 의해 제한되지 않을 것이다. 그렇지만, 상기 어드레스 충돌 조건의 검출의 존재시에, 그 수는 현재의 반복에서 처리되는 액티브 요소들의 감소된 수와, 따라서 그 반복동안에 이용되는 벡터화의 감소된 레벨을 특정할 것이다.
선행하는 도면들을 참조하여 설명한 상기 체크 명령의 상기 변형들과 아울러, 상기 체크 연산과 그 밖의 연산들을 조합하는 변형들을 작성하는 것도 가능하다. 예를 들면, 일 실시예에서, 상기 체크 연산은 메모리 액세스 연산과 조합될 수 있어, 그 단일 명령을 실행하면, 상술한 체크 연산 양쪽이 행해지지만, 추가로 메모리 액세스 연산은 상기 명령에서 지정한 상기 복수의 메모리 어드레스들을 유념하여 행해진다. 특별한 일례로서, 상기 체크 명령의 변형을 작성하여, 여기서는 변형 3이라고 한 아래에 설명된 해저드 인지 게더 연산을 제공할 수 있었다:
변형 3:
Figure pct00011
본 예에서는, 기저 포인터를 포함하도록 상기 스칼라 레지스터 Xn 또는 스택 포인터 레지스터 SP를 사용하고, 그 후 상기 벡터 레지스터 Zm은 오프셋들의 벡터를 제공하고, 이때 타입 필드 T는 그 벡터 레지스터내의 상기 요소들의 사이즈를 특정한다. 상기 벡터 레지스터 Zd는 상기 게더 연산용 목적지 레지스터를 특정하고, 상기 타입 필드 T는 그 벡터와 함께 포함된 데이터 요소들의 사이즈를 특정한다. 마스터 술어는 상기 술어 레지스터 Pg를 거쳐 지정될 수 있고, "/Z" 표시는, 동등한 레인이 상기 마스터 술어에 의해 비액티브로서 표시되면 상기 결과 벡터 Zd내의 임의의 데이터 요소들이 0이 된다는 것을 특정한다.
이러한 로드 체크 명령을 실행할 때, 상기 어드레스 충돌들에 대한 체크가 상기 처리회로(115)내에서 행해질 수 있고, 또한 상기 LSU(145)는 상기 게더 연산을 행한다. 상기 체크 연산과 상기 게더 연산의 수행을 중첩함으로써, 이것은 한층 더 성능 향상을 가능하게 할 수 있다. 이러한 경우에, 상기 게더 연산 및 체크 연산은, 이중으로 발행되는 것이 효과적이고, 이에 따라 임박한 어드레스 충돌들에 대한 정보가 상기 게더 연산을 조기에 종료하여 시간을 줄이는 것을 가능하게 할 수 있다. 따라서, 이러한 실시예에서는, 상기 해저드 체크 결과들에 근거하여 상기 게더 연산의 조기 종료를 위해 제공하기 위한 옵션이 있어, 일단 해저드가 검출되었다면, 상기 게더 연산의 나중의 스테이지들을 행하지 않는다. 일부의 실시예들에서, 상기 어드레스 체크 연산을 지원하기 위해 상기 게더 연산을 행하는데 이용 가능한 하드웨어를 활용하여서, 특히 효율적인 구현을 제공하는 것도 가능할 수도 있다.
이러한 조합된 체크 및 게더 명령을 실행할 때, 상기 체크 연산의 결과는, 상술한 실시예들 대로, 경쟁 조건들의 존재 또는 부재를 나타내도록 상기 CPU 조건 플래그들을 설정하는데 사용될 수 있다. 그렇지만, 이와는 달리, 상기 체크 결과들은, 도 1을 참조하여 상술한 상기 HCSR 레지스터(165) 등의 상태 레지스터나 CPU 시스템을 설정하는데 사용될 수 있다. 예를 들면, 상기 HCSR 레지스터는, 어드레스 충돌들 때문에 로드 액세스들을 행하지 않았던 정보를 제공하도록 배치될 수 있고, 부울리언 값들, 예를 들면 "1"들 뒤에 연속적인 "0"들이 있는 세트(상기 "0"들이 충돌을 검출하였던 제1 레인 후의 상기 레인에서 시작하는 경우)를 포함할 것이다. 그 후, 코드를 별개로 가산하여, 일 세트의 별개의 명령들로 상기 체크를 행한 경우보다 저비용으로 상태 비트들을 체크할 수 있다.
따라서, 상기 상태 비트들은, 어드레스 충돌들의 존재시에 벡터화의 감소된 레벨들을 구현하기 위해서, 원하는 경우 체크되고 나서 조건 플래그들을 설정하는데 사용될 수 있다.
이러한 해결방법의 추가된 이득은, 단지 표준 벡터 로드 연산을 구현하고 싶을 때만, 즉 체크가 요구되지 않는 경우에도, 동일한 명령이 사용될 수 있다는 것이다. 특히, 그러한 경우에, 상기 체크는 그래도 상기 로드와 병렬로 행해질 것이고, 그 결과들은 상기 HCSR 레지스터에 기록되지만, 상기 HCSR 레지스터의 콘텐츠들은 그저 무시될 수 있을 뿐이다. 이러한 해결방법은, 명령 인코딩 공간이 제한되는 경우 매우 유용할 수 있고, 이에 따라 원할 수도 있는 각종 명령들의 전부를 별개로 인코딩하기에 충분한 인코딩 공간을 찾는 것은 어렵다.
변형 1, 2 및 3의 상기 체크 명령의 상술한 설명에서는 단일의 입력 벡터 오퍼랜드를 규정하고 있지만, 다른 실시예에서는 각 변형이 제2의 입력 벡터 오퍼랜드도 취하도록 설계될 수 있다. 이것은, 예를 들면, 임의의 메모리 장소들의 제1 세트로부터 게더 연산들이 있고, 로딩되어 처리된 상기 데이터 값들은 그 후에 임의의 메모리 장소들의 제2 세트에 대한 스캐터 연산들에 제공되는 경우들에서 유용할 수 있다. 이러한 사용 케이스는, 예를 들면, 인-플레이스(in-place) 데이터 변형을 행하는 알고리즘들내에서 생길 수 있다.
각 종 설명된 체크 명령들을 사용할 상황들을 생각하면, 상기 요구된 체크 연산들의 수행에서 수반된 지연성을 생각할 수도 있다. 그 지연성은 수행될 필요가 있는 비교들과 관련되고, 각종 비교들은 벡터 길이가 6임에 따라서 벡터 요소 0 내지 5로 이루어진 벡터에 대해 도 5에서 강조 표시되어 있다. 선(500)으로 도시된 것처럼, 벡터 요소 5를 각 벡터 요소 4, 3, 2, 1 및 0과 비교할 필요가 있다. 마찬가지로, 선(505)으로 도시된 것처럼, 벡터 요소 4를 벡터 요소 3, 2, 1 및 0과 비교할 필요가 있다. 또한, 벡터 요소 3을, 선(510)으로 나타낸 것처럼 벡터 요소 2, 1 및 0과 비교할 필요가 있고, 또 선(515)으로 나타낸 것처럼 벡터 요소 2를 벡터 요소 1 및 0과 비교할 필요가 있다. 끝으로, 벡터 요소 1을, 선(520)으로 나타낸 것처럼 벡터 요소 0과 비교할 필요가 있다. 도 5에서 점선들은, 어떻게 그 비교들을 그루핑할 수 있는지를 도시한 것이다. 주어진 벡터 길이에 대해, 수행되어야 하는 비교들의 수는, (VL-1)×(VL)/2이다. 따라서, 벡터 길이 6에 대해서는, 도 5에 개략적으로 도시된 것처럼, 15개의 비교가 필요하다.
그렇지만, 변형 1의 상기 체크 명령의 수행과 변형 2의 상기 체크 명령의 수행간의 지연성에 있어서 차이가 있다. 특히, 변형 1을 생각하면, 현대의 CPU들내에서 기존의 데이터 경로의 대부분을 이용하는 것이 가능하다. 특히, 도 6에 도시된 것처럼, 회전기(550)를 사용하여, 상기 입력들 중 하나를 비교기(560)에 제공할 수 있고, 이때 그 밖의 입력은 상기 소스 벡터 오퍼랜드로부터 생산된다. 이러한 해결방법은, 도 5에 표시된 그루핑들을 모으고, "압축하거나(compact)" 또는 "접는(fold)" 것이 효율적이다. 이것은, 통상, CPU에서 정수 실행 파이프라인들에 데이터가 공급중인 것으로서 진행중 행해질 수 있는 순열 중 하나다. 이 회전기를 사용하면, 상대적으로 경량의 구현은, VL/2에 비례하는 지연성을 전달할 수 있다. 그 후, 도 6에 도시된 것처럼, 상기 비교기로부터의 출력들은, CPU 조건 플래그들(570)을 설정하는데 사용될 수 있다. 상술한 상기 체크 명령의 변형 2는, 상기 비교 상황의 순서로서 보다 높은 지연성을 갖고, 이에 따라 상기 벡터의 각 서브섹션을 스캔하는 것이 필요하다.
상기 체크 명령들의 추가의 변형들은, 처리중인 어드레스들의 벡터들이 연속 어드레스들에 관련되는 상황들에 대해 작성될 수 있다. 특히, 인접한 메모리 장소들에 액세스하는 사용 케이스들, 이를 테면 "사용 케이스 2"로서 상술한 상기 메모리 카피 시나리오에 있어서, 그 명령들은 유용할 수 있고, 필요한 어드레스 충돌 체크를 행하기 위한 보다 효율적인 메카니즘을 제공함으로써 유용할 수 있다. 특히, 상기 메모리 액세스들이 인접하므로, 상기 체크 명령은 실질적으로 단순화될 수 있다. 이것은, 연속적 소스 어드레스들(600)의 벡터로부터 데이터를 복사하는 메모리 카피 연산을 생각할 때 도 7a에 도시되어 있고, 그 후 그 데이터는 연속적 목적지 어드레스들(610)의 벡터에 기록된다. 각 벡터에서 요소들의 수와 그 요소들의 사이즈에 의존하는 상기 벡터 길이를 아는 것에 의해, 스칼라 오퍼랜드들만을 사용하여 상기 요구된 어드레스 충돌 체크를 행하는 것이 가능하다. 특히, 상기 체크 명령은, 상기 소스 벡터로부터의 상기 어드레스 요소들 중 하나와 상기 목적지 벡터로부터의 대응한 어드레스 요소를 지정할 수 있고, 일 실시예에서는, 제1 요소 x0 및 z0가 상기 체크 연산을 위해 상기 선택된 어드레스 요소들이라고 상정되고 있다. 단계 620에서 도시된 것처럼, 이 2개의 스칼라 어드레스 요소들이 구비될 때, 그 후 상기 체크 연산은 차이 z0-x0가 상기 벡터 길이 이상이거나, 음 또는 0인지를 판정할 수 있다. 그럴 경우, 소스 어드레스들(600)의 벡터로부터의 데이터를 복사하고 나서 그 데이터를 목적지 어드레스들(610)의 벡터에 기록할 때 어드레스 충돌들이 없도록 보장할 수 있다. 그렇지만, 차이 z0-x0가 벡터 길이미만이고 0보다 큰 경우, 어드레스 충돌이 생길 것이다.
단계 630에서, 상기 CPU 조건 플래그들은, 차이 z0-x0가 상기 벡터 길이미만이고 0보다 클 경우 어드레스 충돌을 특정하기 위해서, 상기 비교의 결과들에 따라 설정될 수 있다.
다른 실시예에서는, 구현 이유들이, 단계 620에서 상이한 체크를 행하기 위해, 구체적으로는 입력으로서 제공된 2개의 스칼라 어드레스 값간의 절대차가 상기 벡터 길이 이하이거나 같은 상황들을 검출하기 위한 체크를 행하기 위해, 결정되어도 된다. 그 절대차가 상기 벡터 길이미만인 경우, 이것은 충돌의 존재를 가리킬 수 있고, 이에 따라 단계 630에서 그 조건 플래그들이 설정될 수 있다. 그렇지만, 도 7a의 단계 620을 참조하여 설명된 상술한 부등식으로부터 안 것은, 절대차에 근거한 체크는 약간의 긍정 오류가 생성한다는 것인데, 그 이유는 실제로, 부호 있는 정수의 산출 결과 z0-x0가 상기 벡터 길이미만이고 또한 음이거나 0일 때, 경쟁 조건들이 없기 때문이다.
상기 체크 명령의 변형들은 도 7a에서 설명된 체크를 행하기 위해 생성될 수 있고, 이하의 변형 4 및 5는, 각각, 변형 1 및 2에 대한 대안으로서 제공된 상기 체크 명령의 변형들이다:
변형 4:
Figure pct00012
변형 5:
Figure pct00013
변형 4에 나타낸 것처럼, 2개의 스칼라 입력 값 Xn 및 Xm이 나타내어져 있고, 이들은 각각 상기 어드레스 요소 x0 및 z0를 갖는 레지스터들을 특정한다. 원하는 경우, 마스터 술어는 상기 액티브 레인들의 수를 특정하도록 구성될 수 있고, 상기 타입 정보 T는 상기 데이터 요소 사이즈를 특정하는데 사용됨으로써, 상기 벡터 길이 VL이 산출되는 것을 가능하게 한다. 상기 술어 정보는, 상기 유효 벡터 길이를 산출할 때에도 사용될 수 있다. 예를 들면, 마지막 2개의 데이터 요소 레인들이 도 7의 예에서 제외되는 경우, 상기 유효 벡터 길이가 상기 어드레스 요소 사이즈의 8배가 아니라, 상기 유효 벡터 길이는 그 어드레스 요소 사이즈의 6배이고, 이것은 상기 차이 z0-x0가 해당 벡터 길이이상인지, 또는 음 또는 0인지를 판정할 때 고려될 수 있다.
위의 변형 5는, 충돌이 검출되지 않은 경우, 예를 들면 차이 z0-x0가 상기 벡터 길이이상이거나, 또는 음 또는 0인 경우, 각 액티브 레인들에서의 결과가 "트루(true)"로 설정된 술어를 발생하는 변형 4의 술어 발생 버전이다. 그렇지만, 충돌이 검출되는 경우에, 또한, 차이 z0-x0가 "y"라고 하면, "y" 요소들의 인접한 세트가 트루로 설정되고 나머지 요소들이 폴스(false)로 설정된 술어를 생성한다. 이것은, 상기 루프의 제어 마스크로서 사용될 수 있다.
상기 술어 설정 체크 메카니즘은, 도 7b 내지 도 7e에서 예로 설명되어 있다. 도 7b는 값들의 초기 시퀀스를 도시한 것으로, A는 목적지 포인터이고, B는 소스 포인터다. 상기 벡터 길이가 8인 경우, 본 예에서는, 도 7a의 단계 620에서 행한 체크에 근거하여 충돌이 검출된 것을 알 것이다. 도 7c는, 일련의 스칼라 연산들로서 상기 memcpy 연산을 행하는 경우에 무슨 메모리의 콘텐트가 존재하는지를 나타내고, 따라서 그 연산의 임의의 벡터화된 형태에 대한 상기 요구된 결과를 나타낸다. 도 7d는, 상술한 실시예들의 상기 체크 메카니즘을 채택하지 않고 상기 memcpy 연산을 행하였을 경우 생기는 상기 메모리의 콘텐츠를 나타낸다.
끝으로, 도 7e는 변형 5의 상기 체크 명령이 실행되었을 경우 일 실시예에서 형성되는 가드 술어를 도시한 것으로, 이 술어는 각 반복 동안에 3개의 요소들만이 처리되는 것을 보장하도록 사용되고, 따라서 도 7c에 도시된 결과가 취득된다.
전용 체크 명령을 위한 필연적인 결과 정의는, 로딩중인 요소들이 인접하게 우연히 반전되는 경우에 대해 얻어질 수 있다는 것을 한층 더 주목해야 한다.
도 1의 상기 장치에서 사용하기 위해 제공된 상기 명령 세트가 상기 체크 명령의 상이한 다중 변형들을 제공할 때, 상기 컴파일러가 대상의 많은 작업부하에 대해 가장 좋은 변형을 통계적으로 결정할 수 없다는 것이 사실일 수도 있다. 상술한 상기 체크 명령의 상이한 변형들에서 제공한 각종 성능 이득들을 이용하기 위해서는, 앞서 언급된 어드레스 충돌 통계 카운터들(170)을 활용할 수 있다. 일 실시예에서, 이 카운터들은, 임의의 주어진 시대에서 검출된 총 충돌 수를 특정할 뿐만 아니라, (또는 이와는 달리), 총 벡터 내 충돌 수, 즉 특별한 벡터 길이내의 충돌들의 수에도 사용될 수 있다. 이러한 정보를 상기 카운터들(170)내에 기록함으로써, 이것은 소프트웨어가 어드레스 벡터당 벡터내 충돌의 평균 수를 추정하는 것을 가능하게 한다. 그 후, 이러한 통계치는, 동적 최적화 툴(tool)들이나 지능적 실행 시간에 의해 주어진 계산 작업부하에 대한 가장 좋은 명령 변형을 선택하는데 사용될 수 있다. 이것을, 상기 통계적 카운터 정보를 사용하여 행해진 동적 컴파일 프로세스를 설명하는 도 8의 흐름도를 참조하여 예로 설명한다.
단계 700에서, 상기 어드레스 충돌 통계 카운터들은 주어진 시간의 시대 동안에 유지된다. 단계 705에서는, 소정의 시간이 경과하였는지를 판정하고, 경과하지 않았을 경우 단계 700의 처리로 진행되어, 상기 어드레스 충돌 카운터들은 상기 장치가 명령 시퀀스들을 실행하는 것으로서 계속 유지된다. 상기 소정의 시간이 경과하였을 경우에는, 상기 어드레스 충돌 통계 카운터들은, 단계 710에서 분석되어 어드레스 벡터당 벡터내 충돌들의 평균 수를 결정한다. 그 후, 이 정보는 단계 715에서 적절한 체크 명령을 선택하는데 사용된 후, 그 선택된 체크 명령 변형은, 임의의 관련된 명령들의 시퀀스, 예를 들면 도 2 및 도 3의 예들을 참조하여 상술한 상기 폴백 경로와 함께, 단계 720에서 상기 코드에 삽입된다. 그 후, 단계 725에서는, 단계 700으로 되돌아가기 전에, 선택사항으로 상기 카운터를 리셋트할 수 있다.
도 9는 상기와 같은 컴파일 프로세스가 어떻게 이용 가능할 수 있는지, 구체적으로는 상기 상이한 변형들로부터 취득 가능한 속도향상 이득들이 어떻게 벡터내 충돌들을 갖는 벡터들의 백분율에 의존하여 다를 수 있는지를, 설명하는데 사용된 그래프다. 특히, 도 9의 결과들은, 일어나는 벡터내 충돌들을 갖는 벡터들의 백분율에 의존하여, 상기 변형 1 체크 명령과 상기 변형 2 체크 명령 양쪽에 대한 스칼라 구현상에서 잠재적인 벡터화 코드의 속도 향상을 나타낸 것이다. 변형 1의 경우, 단일의 곡선(750)이 있는데, 그 이유는, 도 2의 상기 설명으로부터 명백하듯이, 변형 1을 채택할 때 임의의 어드레스 충돌은 상기 벡터 루프의 현재의 반복을 스칼라 연산들의 반복적 시퀀스로서 행하게 하기 때문이다. 그렇지만, 변형 2의 경우, 상기 속도 향상은 특별한 벡터내에서 검출된 어드레스 충돌들의 수에 좌우된다. 도 9에 도시된 "numparts" 값들은, 상기 벡터 루프의 현재의 반복을 구현하는데 요구된 도 3의 상기 폴백 경로를 통해 반복들의 횟수를 가리킨다. 상기 그래프로부터 명백하듯이, 변형 2는, 벡터내의 어드레스 충돌들의 평균 수가 낮고, 벡터내 어드레스 충돌의 수가 증가할수록 그 속도 향상이 저하할 때에 이롭다.
또한, 벡터내에서 단일의 충돌보다 많이 있을 가능성은 상기 벡터 길이가 길수록 증가하고, 이에 따라 폭이 보다 넓은 벡터에 대해서는 상기 변형 1 체크 명령이 보다 좋게 규모를 조정할 수도 있다는 것도 주목해야 한다.
도 10은 사용할 수도 있는 가상머신 구현을 도시한 것이다. 상술한 실시예들은 관련된 기술들을 지원하는 특정한 처리 하드웨어를 동작시키는 장치 및 방법들의 관점에서 본 발명을 구현하지만, 하드웨어 디바이스들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현들은, 가상 머신 프로그램(810)을 지원하는 호스트 운영체계(820)를 일반적으로 동작시키는 호스트 프로세서(830)상에서 동작한다. 종종, 아주 강력한 프로세서들은 합리적 속도로 실행하는 가상 머신 구현을 제공하는데 필요하지만, 이러한 해결방법은, 특정한 상황에서, 이를테면, 호환성 또는 재사용 목적을 위해 또 다른 프로세서 고유의 코드를 실행하기를 바라는 경우에 정당화될 수도 있다. 가상 머신 프로그램(810)은, 애플리케이션 프로그램(또는 운영체계)(800)을 실행하여, 상기와 같은 실제의 하드웨어 디바이스에 의해 상기 프로그램의 실행으로 제공하는 것처럼 동일한 결과들을 제공할 수 있다. 따라서, 상술한 체크 명령들을 포함하는 상기 프로그램 명령들은, 상기 가상 머신 프로그램(810)을 사용하여 상기 애플리케이션 프로그램(800)내에서 실행되어도 된다.
상술한 실시예들로부터 안 것은, 상술한 체크 명령들의 이용은, 메모리 액세스 패턴들이 비규칙적 또는 비선형인 코드를 벡터화할 때, 메모리 의존성 위반 가능성의 문제에 대해 낮은 제비용 해결책을 제공한다는 것이다. 상술한 기술들은, 간접 메모리 레퍼런스들을 갖고, 특히 논아핀(nonaffine)인 메모리 액세스들을 갖고, 경쟁 조건들이 없다고 정적으로 입증하거나 심지어 상이한 벡터 길이에 대한 상기 해저드들의 평균 빈도를 판정하는 것도 어렵거나 불가능하도록, 프로그램들의 성능을 크게 향상시킬 수 있다는 사실이 확인되었다.
본 출원에서, "...하도록 구성된"의 단어는, 장치의 요소가 상기 규정된 연산을 실시할 수 있는 구성을 갖는다는 것을 의미하는데 사용된다. 본 문맥에서, "구성"은, 하드웨어 또는 소프트웨어의 상호연결의 배치 또는 방식을 의미한다. 예를 들면, 상기 장치는 상기 규정된 연산을 제공하는 전용 하드웨어를 가져도 되거나, 프로세서 또는 다른 처리 디바이스는 그 기능을 수행하도록 프로그래밍되어도 된다. "하도록 구성된"은, 상기 장치 요소가 임의의 방식으로, 상기 규정된 연산을 제공하기 위해서 변경될 필요가 있다는 것을 암시하지는 않는다.
여기서는 본 발명의 실시예들에 대해서 첨부도면을 참조하여 상세히 설명하였지만, 본 발명은 구체적인 실시예들에 한정되지 않고, 첨부된 청구항에서 기재된 것과 같은 본 발명의 범위 및 사상으로부터 벗어나지 않고 당업자가 변경, 추가 및 수정을 여러 가지로 실시할 수 있다는 것을 알 수 있다. 예를 들면, 본 발명의 범위로부터 벗어나지 않고 종속항들의 특징들과 독립항들의 특징들을 여러 가지로 조합할 수 있다.

Claims (25)

  1. 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와;
    명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행회로로서, 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 회로와, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리회로로 이루어진, 상기 실행회로를 구비하는, 장치로서,
    상기 실행회로는 벡터 루프를 반복적으로 실행하도록 배치되고, 각 반복동안 상기 실행회로는 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행하도록 배치되고, 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정하고;
    상기 벡터 루프의 반복마다, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 실행회로는 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용하는, 장치.
  2. 제 1 항에 있어서,
    상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스내의 제1의 복수의 명령들을 실행함으로써 상기 벡터화의 디폴트 레벨을 이용하고;
    상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스내의 제2의 복수의 명령들을 반복적으로 실행함으로써 상기 벡터화의 감소 레벨을 이용하는, 장치.
  3. 제 2 항에 있어서,
    상기 실행회로는, 상기 체크 명령의 실행에 응답하여, 상기 시퀀스에서 이후의 명령에서 참조하기 위해, 상기 어드레스 해저드 조건이 존재하는지를 나타내는 결과 데이터를 발생하는, 장치.
  4. 제 3 항에 있어서,
    상기 결과 데이터는 하나 이상의 플래그들을 포함하고, 상기 이후의 명령은, 상기 실행회로에 의해 실행될 때, 상기 제1의 복수의 명령들을 실행할 것인가 또는 반복적으로 상기 제2의 복수의 명령들을 실행할 것인가를 판정하기 위해서 상기 하나 이상의 플래그들을 참조하는 분기 명령인, 장치.
  5. 제 2 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 제2의 복수의 명령들은 상기 실행회로에 의해 개개의 요소들에 관해 연산하는 스칼라 명령들을 포함하고, 상기 벡터 루프를 구현하는데 요구된 상기 제2의 복수의 명령들의 반복 실행 횟수는 상기 벡터화의 디폴트 레벨과 관련된 상기 벡터 오퍼랜드들의 액티브 요소들의 수에 의존하는, 장치.
  6. 제 2 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 실행회로는 상기 체크 명령의 실행에 응답하여 초기의 술어 값을 갖는 가드 술어를 발생하고;
    상기 제2의 복수의 명령들은 상기 실행회로에 의해 하나 이상의 벡터 오퍼랜드들의 상기 요소들의 서브세트에 관해 병렬로 연산하는 벡터 명령들을 포함하고, 상기 서브세트는 상기 가드 술어에 의해 특정되고;
    상기 제2의 복수의 명령들의 각 반복시에, 상기 가드 술어의 술어값은 임의의 선행하는 반복에 의해 연산된 상기 하나 이상의 벡터 오퍼랜드들의 임의의 요소들을 제외하도록 갱신되는, 장치.
  7. 제 6 항에 있어서,
    상기 가드 술어는, 마스터 술어에서 특정한 액티브 요소들인 상기 요소들의 서브세트를 특정하도록 제한되는, 장치.
  8. 제 1 항에 있어서,
    상기 벡터화의 디폴트 레벨은 제1의 액티브 요소들의 수를 특정하고, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 명령들의 시퀀스를 실행하여 상기 벡터 루프를 구현할 때 상기 제1의 요소들의 수를 병렬로 처리하도록 배치되고;
    상기 실행회로는, 상기 체크 명령의 실행에 응답하여, 상기 체크 명령의 실행이 상기 어드레스 해저드 조건의 존재를 판정할 때 상기 액티브 요소들의 수를 상기 제1의 수미만의 제2의 액티브 요소들의 수로 감소시키는 제어 출력을 발생하여, 명령들의 상기 시퀀스를 실행하여 상기 벡터 루프를 구현할 때 상기 제2의 요소들의 수를 병렬로 처리함으로써 상기 벡터화의 감소 레벨을 상기 실행회로가 이용하게 하는, 장치.
  9. 제 8 항에 있어서,
    상기 벡터 루프의 각 반복의 시작부분에서, 상기 실행회로는 상기 벡터화의 디폴트 레벨을 이용하는 것으로 되돌아가도록 배치되는, 장치.
  10. 제 8 항 또는 제 9 항에 있어서,
    상기 제어 출력은, 상기 제2의 액티브 요소들의 수를 형성하는 상기 액티브 요소들을 특정하는 가드 술어를 포함하는, 장치.
  11. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 체크 명령은 복수의 액티브 어드레스 요소들로 이루어진 적어도 하나의 벡터 오퍼랜드를 지정하고, 상기 실행회로는, 상기 체크 명령을 실행할 때, 상기 어드레스 해저드 조건이 존재하는지를 판정하기 위해서 각 액티브 어드레스 요소와 각기 다른 액티브 어드레스 요소를 비교하도록 배치되는, 장치.
  12. 제 1 항 내지 제 10 항 중 어느 한 항에 있어서,
    상기 체크 명령은 인접 어드레스들의 제1 시퀀스와 관련된 제1 어드레스와 인접 어드레스들의 제2 시퀀스와 관련된 제2 어드레스를 지정하고, 상기 실행회로는, 상기 체크 명령을 실행할 때, 상기 제1 어드레스와 상기 제2 어드레스간의 차이에 의존하여 상기 어드레스 해저드 조건의 존재를 판정하도록 배치되는, 장치.
  13. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 체크 명령은 체크 및 메모리 액세스 명령이고, 상기 실행회로는 상기 체크 및 메모리 액세스 명령의 실행에 응답하여, 상기 어드레스 해저드 조건이 상기 복수의 메모리 어드레스 중에서 존재하는지를 판정하기 위해 체크 연산을 행하고 또한, 상기 복수의 메모리 어드레스들에 관해 메모리 액세스 연산을 행하는, 장치.
  14. 제 13 항에 있어서,
    상기 실행회로는, 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 메모리 액세스 연산의 임의의 나머지 부분을 종료하도록 배치되는, 장치.
  15. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 처리회로는, 상기 체크 명령의 실행시에 체크 연산을 행하는 전용 체크 회로를 구비하는, 장치.
  16. 제 1 항 내지 제 14 항 중 어느 한 항에 있어서,
    상기 처리회로는 데이터 처리 연산들을 행하는 처리부를 구비하고, 상기 처리부는 상기 체크 명령의 실행시에 체크 연산을 행하기 위해 재사용되는, 장치.
  17. 제 16 항에 있어서,
    상기 처리부내의 회전기 회로와 비교기 회로는, 상기 체크 연산의 수행동안에 요구된 하나 이상의 어드레스 비교들을 병합하는데 사용되는, 장치.
  18. 제 3 항에 종속될 경우 선행하는 청구항 중 어느 한 항에 있어서,
    상기 실행회로가 상기 체크 명령의 실행에 의해 생성된 결과 데이터를 저장하도록 배치되는 해저드 체크 상태 레지스터를 더 구비하는, 장치.
  19. 선행하는 청구항 중 어느 한 항에 있어서,
    각 벡터 오퍼랜드는 N 요소들을 포함하고, N 액티브 요소들은, 상기 실행회로가 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 상기 명령들의 시퀀스를 실행할 때 병렬로 N 요소들을 처리하도록, 상기 벡터화의 디폴트 레벨과 관련되는, 장치.
  20. 제 1 항 내지 제 18 항 중 어느 한 항에 있어서,
    각 벡터 오퍼랜드는 N 요소들을 포함하고, 마스터 술어는 액티브 요소들로서 N이하의 요소들의 수를 특정하고, 상기 벡터화의 디폴트 레벨은 상기 마스터 술어에 의해 특정된 상기 액티브 요소들에 대응하여, 상기 실행회로는, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 상기 마스터 술어에 의해 특정된 상기 액티브 요소들을 병렬로 처리하는, 장치.
  21. 선행하는 청구항 중 어느 한 항에 있어서,
    이전에 실행된 명령 시퀀스들 동안 상기 어드레스 해저드 조건의 발생에 관한 이력 데이터를 유지하는 카운터 회로를 더 구비하고;
    상기 실행회로는 복수의 상이한 타입의 체크 명령을 포함하는 명령 세트의 제어하에 연산하도록 배치되고;
    상기 이력 데이터는, 상기 이력 데이터를 고려하는 상기 벡터 루프내에서 어떤 타입의 체크 명령을 사용할지를 컴파일러가 판정 가능하게 하는 상기 컴파일러에 이용 가능하게 되는, 장치.
  22. 제 21 항에 있어서,
    선택된 시간 동안, 상기 이력 데이터는 검출된 어드레스 충돌들의 총 수와 상기 벡터 오퍼랜드들의 벡터 길이내에서 검출된 어드레스 충돌들의 수 중 적어도 하나를 특정하는, 장치.
  23. 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어와, 명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하고, 상기 레지스터 스토어와 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하며, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 실행회로를 구비한 장치에서, 벡터 연산들을 행할 때 어드레스 충돌들을 관리하는 방법으로서,
    벡터 루프를 반복적으로 실행하는 단계;
    각 반복동안, 상기 실행회로-이 실행회로는 체크 명령의 실행에 응답하여 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정한다-내에서 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스-이 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함한다-를 실행하는 단계; 및
    상기 벡터 루프의 반복마다, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용하는 단계를 포함하는, 방법.
  24. 청구항 1 내지 22 중 어느 한 항에 기재된 것과 같은 장치에 대응한 프로그램 명령들을 위한 가상머신 실행 환경을 제공하도록 컴퓨터를 제어하는 컴퓨터 프로그램을 비일시적 형태로 저장하는 컴퓨터 프로그램 제품.
  25. 복수의 요소들로 각각 이루어진 벡터 오퍼랜드들을 저장하는 레지스터 스토어 수단과;
    명령들에서 지정한 연산들을 행하기 위해서 상기 명령들을 실행하는 실행수단으로서, 상기 레지스터 스토어 수단과 메모리의 사이에서 상기 벡터 오퍼랜드들을 이동시키기 위해서 메모리 액세스 연산들을 행하는 액세스 수단과, 상기 벡터 오퍼랜드들을 사용하여 데이터 처리 연산들을 행하는 처리수단으로 이루어진, 상기 실행수단을 구비하는 장치로서,
    상기 실행수단은 벡터 루프를 반복적으로 실행하고, 각 반복동안 상기 실행수단은 상기 벡터 루프를 구현하기 위해 명령들의 시퀀스를 실행하고, 상기 시퀀스는 복수의 메모리 어드레스들을 특정하는 체크 명령을 포함하고, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 복수의 메모리 어드레스들 중에서 어드레스 해저드 조건이 존재하는지를 판정하고;
    상기 벡터 루프의 반복마다, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 부재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 디폴트 레벨을 이용하고, 상기 실행수단은 상기 체크 명령의 실행에 응답하여 상기 어드레스 해저드 조건의 존재를 판정하면, 상기 벡터 루프를 구현하기 위해 명령들의 상기 시퀀스를 실행할 때 벡터화의 감소 레벨을 이용하는, 장치.
KR1020187033191A 2016-04-26 2017-04-06 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 KR102379894B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1607261.3A GB2549737B (en) 2016-04-26 2016-04-26 An apparatus and method for managing address collisions when performing vector operations
GB1607261.3 2016-04-26
PCT/GB2017/050960 WO2017187130A1 (en) 2016-04-26 2017-04-06 An apparatus and method for managing address collisions when performing vector operations

Publications (2)

Publication Number Publication Date
KR20180137521A true KR20180137521A (ko) 2018-12-27
KR102379894B1 KR102379894B1 (ko) 2022-03-30

Family

ID=58548749

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187033191A KR102379894B1 (ko) 2016-04-26 2017-04-06 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법

Country Status (9)

Country Link
US (1) US11132196B2 (ko)
EP (1) EP3449356B1 (ko)
JP (1) JP6913693B2 (ko)
KR (1) KR102379894B1 (ko)
CN (1) CN109074256B (ko)
GB (1) GB2549737B (ko)
IL (1) IL262198B (ko)
TW (1) TWI733798B (ko)
WO (1) WO2017187130A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10713746B2 (en) 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US10719268B2 (en) * 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
JP7124608B2 (ja) * 2018-09-28 2022-08-24 日本電気株式会社 計算機および計算方法
US10963252B2 (en) * 2019-05-24 2021-03-30 Texas Instruments Incorporated Vector maximum and minimum with indexing
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
CN111158755A (zh) * 2019-11-29 2020-05-15 华东师范大学 用于消除simd向量化程序中缓存缺失的多向量交错执行方法
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质
CN117891509A (zh) * 2024-03-18 2024-04-16 芯来智融半导体科技(上海)有限公司 数据访存方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140071425A (ko) * 2011-09-28 2014-06-11 에이알엠 리미티드 벡터 액세스 명령어에 응답하여 발행된 데이터 액세스의 인터리빙
KR20150105199A (ko) * 2014-03-07 2015-09-16 에이알엠 리미티드 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5063497A (en) * 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
IN169636B (ko) * 1987-07-01 1991-11-23 Digital Equipment Corp
JPH0812661B2 (ja) 1988-04-01 1996-02-07 日本電気株式会社 命令処理順序制御システム
DE69031443T2 (de) * 1989-06-30 1998-04-23 Digital Equipment Corp Verfahren und Anordnung zur Steuerung von Schattenspeichern
US5471628A (en) * 1992-06-30 1995-11-28 International Business Machines Corporation Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode
US6219780B1 (en) * 1998-10-27 2001-04-17 International Business Machines Corporation Circuit arrangement and method of dispatching instructions to multiple execution units
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US8078847B2 (en) 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US7941584B2 (en) * 2009-03-26 2011-05-10 Arm Limited Data processing apparatus and method for performing hazard detection
US8996845B2 (en) * 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
WO2013095606A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for detecting identical elements within a vector register
US9116686B2 (en) * 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9400650B2 (en) * 2012-09-28 2016-07-26 Intel Corporation Read and write masks update instruction for vectorization of recursive computations over interdependent data
US10241793B2 (en) * 2013-03-15 2019-03-26 Analog Devices Global Paralleizing loops in the presence of possible memory aliases
WO2014142972A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
CN103279327B (zh) * 2013-04-28 2015-11-25 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
US9600280B2 (en) * 2013-09-24 2017-03-21 Apple Inc. Hazard check instructions for enhanced predicate vector operations
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140071425A (ko) * 2011-09-28 2014-06-11 에이알엠 리미티드 벡터 액세스 명령어에 응답하여 발행된 데이터 액세스의 인터리빙
KR20150105199A (ko) * 2014-03-07 2015-09-16 에이알엠 리미티드 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법

Also Published As

Publication number Publication date
WO2017187130A1 (en) 2017-11-02
JP6913693B2 (ja) 2021-08-04
IL262198A (en) 2018-11-29
EP3449356A1 (en) 2019-03-06
KR102379894B1 (ko) 2022-03-30
CN109074256B (zh) 2023-02-28
CN109074256A (zh) 2018-12-21
JP2019517060A (ja) 2019-06-20
GB2549737A (en) 2017-11-01
US11132196B2 (en) 2021-09-28
TWI733798B (zh) 2021-07-21
GB2549737B (en) 2019-05-08
IL262198B (en) 2020-09-30
EP3449356B1 (en) 2020-01-22
US20190114172A1 (en) 2019-04-18
TW201738737A (zh) 2017-11-01

Similar Documents

Publication Publication Date Title
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
KR101511837B1 (ko) 벡터 분할 루프들의 성능 향상
EP2951681B1 (en) Solution to divergent branches in a simd core using hardware pointers
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
CN108139907B (zh) 向量数据传送指令
US7529917B2 (en) Method and apparatus for interrupt handling during loop processing in reconfigurable coarse grained array
JP2011514598A (ja) 効率的な同期および並列リダクション演算を可能にするベクトル命令
JP2012529096A (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
TWI740851B (zh) 用於向量負載指示之資料處理設備、方法及電腦程式
US20150254077A1 (en) Data processing apparatus and method for processing vector operands
US20120221837A1 (en) Running multiply-accumulate instructions for processing vectors
US7712091B2 (en) Method for predicate promotion in a software loop
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
US9098295B2 (en) Predicting a result for an actual instruction when processing vector instructions
US8683178B2 (en) Sharing a fault-status register when processing vector instructions
US8924693B2 (en) Predicting a result for a predicate-generating instruction when processing vector instructions
JP5939586B2 (ja) オーバーロードチェックを実行する命令
JP2021515929A (ja) データ処理
US11966619B2 (en) Background processing during remote memory access
US9009528B2 (en) Scalar readXF instruction for processing vectors
WO2020246598A1 (ja) 演算装置、演算方法、および演算プログラム

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right