KR101827747B1 - 동일한 데이터 조건에 의존하는 인접 명령의 실행 제어 - Google Patents

동일한 데이터 조건에 의존하는 인접 명령의 실행 제어 Download PDF

Info

Publication number
KR101827747B1
KR101827747B1 KR1020137022123A KR20137022123A KR101827747B1 KR 101827747 B1 KR101827747 B1 KR 101827747B1 KR 1020137022123 A KR1020137022123 A KR 1020137022123A KR 20137022123 A KR20137022123 A KR 20137022123A KR 101827747 B1 KR101827747 B1 KR 101827747B1
Authority
KR
South Korea
Prior art keywords
instructions
data
satisfied
condition
instruction
Prior art date
Application number
KR1020137022123A
Other languages
English (en)
Other versions
KR20140014143A (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 KR20140014143A publication Critical patent/KR20140014143A/ko
Application granted granted Critical
Publication of KR101827747B1 publication Critical patent/KR101827747B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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
    • 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/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

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

Abstract

명령들의 스트림을 디코드하도록 구성된 명령 디코더와, 디코드된 명령들의 스트림을 처리하도록 구성된 데이터 프로세서를 구비하고, 데이터 조건이 만족되는 것에 실행이 의존하고 데이터 조건이 만족되지 않을 때 실행이 데이터 레지스터에 기억된 값을 변경시키지 않는 명령들의 스트림 내부의 복수의 인접 명령들에 응답하여, 데이터 프로세서가, 데이터 조건이 만족되는지 여부의 판정을 개시하고, 복수의 인접 명령들의 처리를 개시하고, 데이터 조건이 만족되지 않는 것으로 판정한 것에 응답하여, 아직 실행되지 않은 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고 복수의 인접 명령들 다음의 실행할 다음 명령으로 스킵하여, 다음 명령에서 실행을 계속하도록 구성된 데이터 처리장치가 개시된다.

Description

동일한 데이터 조건에 의존하는 인접 명령의 실행 제어{CONTROLLING THE EXECUTION OF ADJACENT INSTRUCTIONS THAT ARE DEPENDENT UPON A SAME DATA CONDITION}
본 발명의 분야는, 데이터 처리장치에 관한 것으로, 특히 데이터 조건에 실행이 의존하는 명령인 술어 명령(predicated instruction)의 처리에 관한 것이다.
조건부 명령의 실행이 특정한 데이터 조건에 의존하는 조건부 명령들이 알려져 있다. 예를 들면, 위치 x 및 y에 기억된 2개의 값을 비교하여, x가 y보다 크거나 y와 같으면 2개의 값들을 가산하고 x가 y보다 작으면 감산하는 CMP x, y, ADDGE, SUBLT 등의 명령이 알려져 있다.
복수의 데이터 요소에 대해 연산을 행하는 벡터 명령들이 더욱 더 흔해지고 있다. 이들 벡터 명령들은 마스크들을 사용하여 어떤 요소들이 처리될지를 제어한다. 예를 들어, 마스크 10000001을 이용하여 8-요소 벡터 기억 명령을 실행하면, 2개의 요소만(첫번째 및 마지막) 기억할 것이다. 이와 같은 식으로 마스크들을 사용하는 벡터화된 코드를 기록할 때의 일반적인 최적화는, 명령들의 시퀀스가 모두 동일한 마스크에 의해 제어되는 것을 인식하고, 마스크가 제로인 경우에 이들 모든 명령들 주위에 분기를 삽입하는 것으로서, 이와 같은 경우에 어떤 명령도 아무 것도 하지 않게 될 것이기 때문이다. 따라서, 코드가 다음과 같이 될 것이다:
VCMP D0, D1, D2 ; D1 및 D2를 비교하여 결과 마스크를 D0에 넣는다
VTEST D0 ; Do의 모든 비트가 제로인지 여부를 테스트한다
BEQ L1 ; 마스크가 제로이면, 다음의 10개의 연산을 스킵한다
D0 → VOP1 ; 마스크 D0의 제어하에서 벡터 연산 1을 행한다
D0 → VOP2 ; 마스크 D0의 제어하에서 벡터 연산 2를 행한다
·
·
·
D0 → VOP10 ; 마스크 D0의 제어하에서 벡터 연산 10을 행한다
L1
이것은 마스크가 제로인 경우에 매우 효율적인데, 이것은, 이 경우에 테스트 및 분기가 단지 2개의 명령만을 사용하고, 분기가 없었더라면 행해졌을 10개의 명령을 실행할 필요가 없게 만들기 때문이다. 이와 같은 종래기술의 접근방법의 문제점은, 분기가 취해질지(taken) 아닐지가 2개의 데이터 값 D1 및 D2에 의존한다는 점에서 분기가 데이터 의존성을 갖는다는 것이다. 데이터에 의존하는 분기는 예측하기가 매우 곤란하므로, 연산의 속도를 증가시키기 위해 분기 예측이 사용되는 경우에 분기가 오예측되는 일이 자주 일어날 수도 있으며, 분기가 취해지지 않았던 것이 틀림없을 때 분기가 취해진 것으로 예측되면, 분기가 취해지기 전의 이전의 상태로 장치의 상태를 롤백할 필요가 있다. 벡터 처리를 행할 때, 특정한 시점에서 장치의 상태를 보존하는 것은 데이터 단어(data word)의 길이로 인해 비용이 많이 든다.
따라서, 조건부 명령 실행의 성능을 향상시킬 수 있는 것이 바람직할 것이다.
본 발명의 제 1 면은, 명령들의 스트림을 디코드하도록 구성된 명령 디코더와, 상기 디코드된 명령들의 스트림을 처리하도록 구성된 데이터 프로세서를 구비하고, 상기 데이터 프로세서는, 상기 명령들의 스트림을 분석하여, 데이터 조건이 만족되는 것에 실행이 의존하고 상기 데이터 조건이 만족되지 않을 때 실행이 데이터 레지스터에 기억된 값을 변경시키지 않는 상기 명령들의 스트림 내부의 복수의 인접 명령들을 식별하도록 구성되고, 상기 복수의 인접 명령(adjacent instructions)을 식별한 것에 응답하여, 상기 데이터 프로세서가, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하고, 상기 데이터 조건이 만족되지 않는 것으로 판정한 것에 응답하여, 아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 다음의 실행할 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하도록 구성된, 데이터 처리장치를 제공한다.
본 발명은, 동일한 조건에 모두 의존하는 조건부로 실행된 명령들이 존재하고, 조건이 충족되지 않을 때 이들 명령들의 실행이 데이터 처리장치의 상태에 영향을 미치지 않는 경우, 조건이 결정되기 전에 이들 명령의 처리를 개시할 수 있고, 이들 명령이 실행되지 않아야 한다는 것이 밝혀지면, 이 시점에서 이들 명령의 종료로 스킵할 수 있다는 것을 인식하였다. 이와 관련하여, 데이터 처리장치의 상태를 변경하지 않는 것을 이용하는데, 이것은 데이터 레지스터들 내부에 기억된 데이터 값들이 변경되지 않는다는 것을 의미하며, 이에 따라, 명령들이 기억된 값을 오버라이트하지 않으므로, 이들 명령이 실행되지 않았어야 했던 경우에 상태 복원을 행할 필요가 없다. 이와 관련하여, 명령의 실행이 프로그램 카운터와 아마도 캐시의 값 등을 변경하게 되지만, 실행된 명령들의 목적지 레지스터들의 값에 변경이 존재하지 않으면, 이들 명령의 실행이 추후의 명령들의 실행에 영향을 미치지 않으므로, 명령들이 실행되지 않았어야 할 때 명령이 실행된 경우에 롤백이 필요하지 않다. 따라서, 상태 복구가 필요하지 않는 경우, 이 상태를 변경되지 않은 것으로 볼 수 있다.
따라서, 추가적인 복구 단계를 행할 필요성이 없이, 관련된 성능 및 전력 이점을 갖고서 명령들의 실행을 스킵할 수 있다는 이점을 달성한다. 이때, 이 "스킵" 단계를 처리하는데 필요한 추가적인 회로와 관련된 약간의 오버헤드가 존재한다는 점에 주목하기 바란다.
일부 실시예에서, 상기 데이터 처리장치는 데이터 기억장치를 더 구비하고, 상기 데이터 처리장치는, 상기 복수의 인접 명령들에 응답하여, 상기 데이터 기억장치 내부에 상기 복수의 인접 명령들의 실행후 실행될 상기 다음 명령의 위치를 타겟 위치로서 식별하는 식별자를 기억하고, 상기 데이터 기억장치 내부에 스킵 플래그를 설정하고, 상기 스킵 플래그는, 상기 데이터 조건이 만족되지 않은 것에 응답하여 상기 프로세서가 상기 타겟 위치에 대응하는 어드레스로 프로그램 카운터를 갱신해야만 한다는 것을 상기 프로세서에게 표시한다.
명령들의 스킵이 다양한 방식으로 구현될 수 있지만, 일부 실시예에서는, 복수의 인접 명령들의 검출이 프로세서가 스킵 플래그를 설정하고 타겟위치의 표시를 기억하도록 기동하며, 스킵 플래그는, 조건이 만족되지 않는 것으로 판정할 때 타겟 위치로 스킵할 수 있다는 것을 프로세서에게 표시한다. 즉, 프로세서가 복수의 인접 명령들의 실행을 중지할 수 있고, 타겟 위치에서 명령들의 실행을 계속할 수 있으며, 이때에는 인접 명령들이 의존하고 있는 조건이 충족되지 않는다는 것을 알기 때문에, 이 시점에서 실행되지 않은 인접 명령들은 실행되지 않게 된다.
일부 실시예에서, 상기 다음 명령의 위치를 식별하는 상기 식별자는 어드레스를 포함한다.
명령들의 실행이 스킵하려는 목적지인 타겟 위치는 다양한 방식으로 표시될 수 있지만, 일부 실시예에서는, 이 타겟 위치는 단순히 어드레스를 포함한다. 어드레스를 포함하는 경우에는, 프로그램 카운터가 간단히 이 정보로 갱신될 수 있다. 다른 실시예에서는, 정보가 인접 명령들의 수를 식별하는 식별자로서 될 수도 있는데, 이 경우에는, 이 값을 사용하여 카운터가 갱신될 수 있고, 명령이 실행될 때마다 이 카운터가 감소될 수 있으며, 조건이 충족되지 않는 것으로 판정된 시점에, 카운터로부터의 정보를 이용하여 프로그램 카운터가 갱신될 수 있다.
일부 실시예에서, 상기 복수의 인접 명령들은 벡터 데이터 성분들을 처리하는 벡터 명령들을 포함하고, 각각의 벡터 명령은 상기 벡터 성분들 중에서 어떤 성분들이 처리될지를 제어하는 마스크를 포함하고, 상기 만족되고 있지 않은 상기 조건은 어떤 데이터 성분들도 처리되지 않을 것이라는 것을 표시하는 제로값들을 포함하는 상기 마스크를 포함한다.
본 기술은 벡터 명령들과 사용될 때 특히 유리하다. 벡터 데이터 성분들을 처리시에, 조건부 명령들 주위로 분기시키기 위해 분기 명령을 사용하고자 하는 경우에, 오예측(misprediction)을 설명하기 위해, 분기에서의 프로세서의 상태를 기억할 필요가 있다. 벡터 데이터 성분들에 대해서는, 이들 데이터 성분들이 많기 때문에, 이 상태의 기억에 많은 비용이 든다. 따라서, 본 발명은 롤백할 필요를 없애므로, 상태가 기억될 필요가 없기 때문에, 벡터 데이터 성분들과 함께 사용할 때 매우 유리하다.
벡터 데이터 성분들의 처리는, 벡터 데이터 성분들 중에서 어떤 성분들이 처리되어야 할지를 제어하는 벡터 마스크를 사용하여 제어되는 일이 많다. 마스크가 모드 제로값이면, 이것은, 성분들 중에서 어느 것도 처리할 필요가 없다는 것을 표시한다. 따라서, 본 발명의 실시예들은, 데이터 조건으로서 제로값이 아닌 마스크를 가질 수 있다. 따라서, 데이터 조건이 만족되지 않는 경우에는 마스크가 모두 제로값이며, 이 시점에서 명령들의 실행이 프로세서의 상태를 변경하지 않으므로 사실상 이 실행이 필요하지 않다는 것을 알게 되어, 아직 실행되지 않은 이들 명령들을 스킵할 수 있다. 또한, 실행되었지만 필요하지 않았던 중간 명령들이 프로세서의 상태를 변경하지 않았으므로, 상태의 롤백이 필요하지 않다는 것을 알 수 있다.
일부 실시예에서, 상기 복수의 인접 명령들은 동일한 술어(predicate)를 각각 포함하는 복수의 명령들을 포함하고, 상기 술어는 상기 데이터 조건을 결정하고, 상기 명령들은 상기 술어가 만족되는 것에 응답해서만 기억된 데이터 값들을 완료 및 갱신하고, 상기 데이터 처리장치는, 상기 복수의 인접 명령들의 처리를 개시하고, 상기 데이터 조건이 만족되지 않는다는 판정에 응답하여, 기억된 데이터 값들이 갱신되지 않도록 상기 복수의 인접 명령들의 실행을 종료하고, 아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간 명령들을 실행하지 않고 상기 복수의 인접 명령들 후의 다음 명령으로 스킵하여 상기 다음 명령에서 실행을 계속하도록 구성된다.
본 발명은, 술서에 의존하여 실행되는 명령들과 함께 사용하는데에도 적합하다. 이와 같은 명령들은, 술어 조건이 만족되는 것으로 판정된 경우에만 프로세서의 상태를 완료하고 갱신한다. 그러나, 이들 명령은 술서의 결과가 알려지기 전에 데이터의 처리를 개시한다. 따라서, 이들 명령들은 조건 또는 술어의 결과가 알려지기 전에 실행될 수도 있다. 술어가 만족되지 않으면, 이들 명령이 이들의 계산을 기억장치에 기록하지 않으므로 프로세서의 상태가 변경되지 않게 되고, 명령들이 이들 명령의 실행을 개시하더라고, 상태를 롤백할 필요가 없다. 따라서, 이들 복수의 명령들이 서로 인접한 경우에는, 이들 명령들의 처리를 개시하고, 술어 조건이 만족되지 않는다는 판정에 응답하여 복수의 인접 명령들의 실행을 종료하고, 이들 명령 후의 다음 명령들로 스킵하는 것이 유리하다.
일부 실시예에서는, 상기 데이터 처리장치가 데이터 기억장치 및 검출회로를 구비하고, 상기 검출회로는 상기 데이터 조건이 만족되지 않는 것에 의존하는 조건부 분기 명령의 검출에 응답하여 상기 복수의 인접 명령들 주위로 전방으로 분기하여, 상기 분기 명령의 타겟 위치를 표시하는 값을 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억하고 상기 데이터 기억장치 내부의 상기 스킵 플래그 값을 설정하고, 상기 프로세서는, 상기 스킵 플래그에 응답하여, 상기 분기를 취하지 않고, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 복수의 인접 명령들의 실행을 개시하고, 상기 데이터 조건이 만족되지 않는다는 판정에 응답하여, 프로그램 카운터를 상기 타겟 위치에 의존하는 값으로 설정한다.
본 발명의 서론 부분에서 언급한 것과 같이, 이들 복수의 인접 명령들을 처리하는 종래의 방법은 이들 인접 명령들 주위로 분기하는 것이다. 따라서, 데이터 처리장치가 데이터 조건에 의존하는 조건부 분기 명령과 이에 뒤따르는 복수의 이들 인접 명령들을 검출하도록 구성된 경우에는, 분기를 취하는 것보다는 스킵 절차에 착수하는 것이 유리할지도 모른다. 따라서, 분기를 취하고 분기가 오예측되는 경우에 상태를 기억할 필요가 있는 것보다는, 데이터 처리장치가 명령들의 패턴을 인식하고 스킵 플래그가 설정된 인접 명령들의 처리를 개시하여, 조건이 만족되는지 여부를 판정시에, 조건이 만족되지 않는 경우에는, 이들 인접 명령들의 끝으로 스킵하는 한편, 조건이 만족되는 경우에는, 단순히 모든 인접 명령들의 실행으로 진행하고 스킵 플래그를 소거한다.
일부 실시예에서, 상기 조건부 분기 명령은 벡터 값을 조건으로 하고, 상기 프로세서는 상기 벡터의 값을 테스트하는 벡터 테스트 명령을 실행함으로써 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 벡터 값이 소정의 값을 포함하는 것으로 판정된 것에 응답하여, 상기 데이터 조건이 만족되지 않는 것으로 판정된다.
일부 실시예에서는, 조건부 분기 명령이 벡터 값을 조건으로 한다. 이와 같은 경우에, 프로세서는, 벡터 테스트 명령을 실행함으로써 데이터 조건이 만족되는지 여부의 판정을 개시하게 되고, 그후 복수의 인접 명령들의 실행을 개시하게 된다. 벡터 테스트 명령으로부터의 결과가 수신되었을 때, 조건이 만족되지 않는 것으로 이 결과가 표시하는 경우에는, 프로세서가 인접 명령들의 끝으로 스킵하여 다음 명령으로부터 처리를 계속한다.
일부 실시예에서, 상기 데이터 처리장치는 데이터 기억장치와 검출회로를 더 구비하고, 상기 검출회로는 상기 데이터 조건에 의존하는 조건부 분기 명령의 검출에 응답하여 상기 복수의 인접 명령들의 시작 위치로 후방으로 분기하여, 1만큼 증분된 상기 분기 명령의 위치를 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억하고 상기 데이터 기억장치 내부의 스킵 플래그 값을 설정하고, 상기 프로세서는, 상기 스킵 플래그에 응답하여, 상기 분기를 취하고, 상기 데이터 조건이 만족되는지 여부를 판정하고, 상기 복수의 인접 명령들의 실행을 개시하고, 상기 데이터 조건이 만족되지 않는다는 판정에 응답하여 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억된 값에 의존하는 값으로 프로그램 카운터를 설정한다.
본 발명의 실시예들은, 동일한 조건을 조건으로 하는 인접 명령들의 문자열이 후방 분기(backward branch)에 의해 분기되는 목적지인 후방 분기들의 어드레스를 지정하는데 사용될 수도 있다. 이 경우에, 처리장치가 이 명령들의 패턴을 인식하면, 처리장치가 이 분기를 취하고 인접 명령들의 실행을 개시하게 된다. 그러나, 조건이 만족되는지 여부가 일단 판정되어, 조건이 만족되지 않으면, 인접 명령들의 실행을 중단하게 되고, 명령이 취한 분기 다음에 있는 프로그램 스트림의 다음 명령에서 실행을 계속하게 된다.
마찬가지로, 조건 분기 명령이 벡터를 조건으로 하는 경우에, 프로세서는, 벡터의 값을 테스트하는 벡터 테스트 명령을 실행함으로써 데이터 조건이 만족되는지 여부를 판정한다.
일부 실시예에서, 데이터 처리장치는 데이터 기억장치 및 검출회로를 구비하고, 상기 검출회로는, 상기 데이터 조건에 의존하는 상기 복수의 인접 명령들이 상기 데이터 조건과 완료될 각각의 명령에 대해 조건이 만족되어야 하는지 여부의 표시를 포함하는 명령에 뒤따른다는 것을 표시하는 상기 명령의 검출에 응답하여, 상기 복수의 명령에 뒤따르는 상기 다음 명령의 위치를 상기 타겟 위치로서 식별하는 식별자를 기억하고 상기 데이터 기억장치 내부에 스킵 플래그 값을 설정하고, 상기 데이터 조건이 만족되지 않는다는 판정에 응답하여, 상기 프로세서가 상기 스킵 플래그에 응답하여 상기 타겟 위치를 스킵한다.
일부 실시예에서는, 스킵 기능을 구현하는 것이 유리할 것인 명령들의 패턴를 검출하기 위해 설치된 검출회로가 존재한다.
일부 실시예에서는, 상기 데이터 조건이 만족된다는 판정에 응답하여, 상기 프로세서가 상기 복수의 인접 명령들의 실행을 계속하고 상기 스킵 플래그를 소거하도록 구성된다.
데이터 조건이 만족되는 것으로 프로세서가 판정하면, 복수의 인접 명령들을 실행할 필요가 없으며, 이 경우에, 프로세서는 인접 명령들의 실행을 계속하고 스킵 플래그를 소거한다.
일부 실시예에서는, 상기 데이터 조건이 판정되기 전의 모든 상기 인접 명령들의 실행에 응답하여, 상기 프로세서가 상기 스킵 플래그를 소거하도록 구성된다.
더구나, 모든 인접 명령들이 실행되기 전에 데이터 조건이 판정되면, 프로세서가 스킵을 해야 하는지 여부는 더 이상 의미가 없으며, 이 경우에도 스킵 플래그가 소거되어야 한다.
본 발명의 제 2 면은, 데이터 처리장치로서, 타겟 레지스터와 데이터 조건 레지스터를 명시하는 적어도 한 개의 스킵 명령을 디코드하도록 구성된 명령 디코더와, 상기 명령 디코더에 의해 제어되어 데이터 처리 연산을 행하도록 구성된 데이터 프로세서를 구비하고, 상기 데이터 프로세서는, 상기 디코드된 적어도 한 개의 스킵 명령에 응답하여 상기 데이터 조건의 판정을 개시하고 상기 명령 스트림 내부의 후속된 명령들의 처리를 개시하고, 상기 데이터 조건이 소정의 결과를 갖지 않는다는 판정에 응답하여 상기 타겟 레지스터에 기억된 값에 의존하는 값으로 프로그램 카운터를 설정하는, 데이터 처리장치를 제공한다.
데이터 프로세서가 스킵 명령이 명령들의 패턴을 검출하는 기능을 생성할 수 있기는 하지만, 일부 실시예에서, 스킵 명령은, 프로세서가 디코드 및 실행한 후 스킵 기능을 행하는 실제 명령이다.
일부 실시예에서, 상기 명령 디코더는 상기 적어도 한 개의 스킵 명령에 응답하여 상기 데이터 기억장치 내부의 스킵 플래그를 설정한다.
디코더는 다양한 방식으로 스킵 명령에 응답할 수 있지만, 일부 실시예에서는, 데이터 조건에 관한 판정 결과를 디코더가 기다리고 있으며 조건이 만족되지 않는 경우에 디코더가 이 결과를 가지만, 스킵 기능을 행할 필요가 있다는 것을 프로세서에게 표시하는 스킵 플래그를 디코더가 설정한다.
본 발명의 제 3 면은, 데이터 처리장치로서, 타겟 레지스터와 데이터 조건 레지스터를 명시하는 적어도 한 개의 루프 명령을 디코드하도록 구성된 명령 디코더와, 상기 명령 디코더에 의해 제어되어 데이터 처리 연산을 행하도록 구성된 데이터 프로세서를 구비하고, 상기 데이터 프로세서는, 상기 디코드된 적어도 한 개의 루프 명령에 응답하여 상기 데이터 조건의 판정을 개시하고 상기 루프의 개시시에 이전에 실행된 명령의 어드레스로 상기 프로그램 카운터를 설정하고 상기 명령 스트림 내부의 명령들의 처리를 개시하고, 상기 조건이 소정의 결과를 갖지 않는다는 판정에 응답하여 상기 타겟 레지스터에 기억된 값에 의존하는 값으로 프로그램 카운터를 설정하는, 데이터 처리장치를 제공한다.
이용가능할지로 모르는 추가적인 명령은 루프 명령으로, 이 루프 명령은, 인접 명령들이 의존하고 있는 조건이 만족되지 않는 것으로 판정된 경우에, 후방 분기를 취하는 목적지인 인접 명령들을 스킵할 수 있도록 한다.
본 발명의 제 4 면은, 데이터 프로세서에 의해 실행하기 위해 애플리케이션을 컴파일하는 방법으로서, 상기 애플리케이션 내부의 복수의 명령들을 분석하는 단계와, 동일한 데이터 조건에 실행이 의존하며 상기 조건이 만족되지 않을 때 실행되면 데이터 레지스터에 기억된 값을 변경하지 않는 복수의 인접 명령들을 상기 복수의 명령들이 포함하는지 여부를 검출하는 단계와, 상기 복수의 명령이 상기 복수의 인접 명령을 포함하는 경우에, 상기 복수의 인접 명령이 뒤따르는 스킵 명령을 포함하는 명령들의 스트림을 발생하는 단계를 포함하고, 상기 스킵 명령은 타겟 어드레스를 명시하고, 상기 타겟 어드레스는 상기 인접 명령들과 상기 데이터 조건 뒤에 있는 다음 명령의 어드레스이고, 상기 스킵 명령은, 상기 데이터 프로세서를 제어하는 상기 데이터 프로세서에 의해 실행될 때, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하고, 상기 컴파일 방법은, 상기 데이터 조건이 만족되었다는 판정에 응답하여, 아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 뒤에 있는 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하는 단계와, 상기 데이터 조건이 만족되지 않았다는 판정에 응답하여, 상기 복수의 인접 명령들의 실행을 계속하는 단계를 더 포함하는, 애플리케이션 컴파일방법을 제공한다.
또한, 컴파일러는, 코드의 분석과, 모두 동일한 데이터 조건에 의존하고 데이터 조건이 만족되지 않는 경우에 실행되었을 때 프로세서의 상태를 변경시키지 않는 복수의 인접 명령들이 존재한다는 판정에 응답하여, 스킵 명령을 발생할 수도 있다. 이에 따르면, 컴파일러는, 코드가 프로세서에 의해 실행되기 전에 코드의 최적화를 제공한다.
본 발명의 제 5 면은, 데이터 프로세서에 의해 실행하기 위해 애플리케이션을 컴파일하는 방법으로서, 상기 애플리케이션 내부의 복수의 명령들을 분석하는 단계와, 동일한 데이터 조건에 실행이 의존하며 상기 조건이 만족되지 않을 때 실행되면 데이터 레지스터에 기억된 값을 변경하지 않는 복수의 인접 명령들 중에서 첫 번째 인접 명령의 어드레스를 명시하는 루프 명령을 포함하는 명령들의 스트림을 발생하는 단계를 포함하고, 상기 루프 명령은 상기 데이터 조건과 타겟 어드레스를 명시하고, 상기 타겟 어드레스는 상기 루프 명령의 뒤에 있는 다음 명령의 어드레스이고, 상기 루프 명령은, 상기 데이터 프로세서를 제어하는 상기 데이터 프로세서에 의해 실행될 때, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 복수의 인접 명령들로 점프하여 이들 인접 명령들의 처리를 개시하고, 상기 컴파일 방법은, 상기 데이터 조건이 만족되었다는 판정에 응답하여, 아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고 상기 타겟 어드레스에 의해 명시된 상기 명령으로 스킵하여 상기 명령에서 실행을 계속하는 단계와, 상기 데이터 조건이 만족되지 않았다는 판정에 응답하여, 상기 복수의 인접 명령들의 실행을 계속하는 단계를 더 포함하는, 애플리케이션 컴파일방법을 제공한다.
또한, 컴파일러는, 복수의 인접 조건부 명령들로의 후방 분기의 검출에 응답하여 루프 명령을 발생하여도 된다. 마찬가지로, 이와 같은 구성은 이들 명령을 처리하는 프로세서의 성능을 향상시킬 수 있다.
본 발명의 제 6 면은, 장치를 제어하여 본 발명의 제 5 또는 제 6 면에 따른 방법을 수행하게 하는 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제 7 면은, 데이터 처리방법으로서, 명령들의 스트림을 디코드하는 단계와, 상기 디코드된 명령들의 스트림을 처리하는 단계와, 데이터 조건이 만족되는 것에 실행이 의존하고 상기 데이터 조건이 만족되지 않을 때 실행이 데이터 레지스터에 기억된 값을 변경시키지 않는 상기 명령들의 스트림 내부의 복수의 인접 명령들에 응답하여, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하는 단계와, 상기 데이터 조건이 만족되지 않는 것으로 판정한 것에 응답하여, 아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 다음의 실행할 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하는 단계를 포함하는, 데이터 처리방법을 제공한다.
본 발명의 제 8 면은, 데이터 처리장치 상에서 실행되는 컴퓨터 프로그램에 의해 제공되고, 본 발명의 제 1 면의 데이터 처리장치에 따른 명령 실행 환경을 제공하는 가상 머신을 제공한다.
본 발명의 전술한 목적, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 이하의 실시예의 상세한 설명으로부터 명확해질 것이다.
도 1은 본 발명의 일 실시예에 따른 데이터 처리장치를 나타낸 것이고,
도 2a 및 도 2b는 스킵 명령의 예를 나타낸 것이고,
도 3은 루프 명령의 예를 나타낸 것이고,
도 4는 명령 패턴 스폿팅(spotting) 모드에서 처리장치가 진입한 상태들을 나타낸 것이고,
도 5는 본 발명의 일 실시예에 따른 컴파일러를 개략적으로 나타낸 것이고,
도 6은 본 발명의 또 다른 실시예에 따른 데이터 처리장치를 나타낸 것이고,
도 7은 본 발명의 일 실시예에 따른 스킵 연산을 행하는 방법의 단계들을 나타낸 흐름도이고,
도 8은 본 발명의 일 실시예에 따른 루프 연산을 행하는 방법의 단계들을 나타낸 흐름도이고,
도 9는 루프 및 스킵 명령들의 발생을 포함하는 프로그램의 컴파일 방법의 단계들을 나타낸 것이고,
도 10은 본 발명의 일 실시예의 가상머신 구현을 나타낸 것이다.
도 1은 본 발명에 따른 명령 스트림을 처리하는 데이터 처리장치(10)를 나타낸 것이다. 데이터 처리장치는 처리할 명령들을 기억하는 명령 캐시(12)를 갖는다. 이들 명령은 프로그램 카운터(40) 내부의 값에 의존하여 페치부(14)에 의해 페치된다. 페치된 명령들은 명령 디코더(16)로 전송되어 디코드된 후, 병렬 실행 파이프라인들(18) 중에서 한 개에 의해 실행된다. 페치부, 디코드부 및 실행 파이프라인들은 명령들을 처리하는 처리회로(30)를 구성한다. 명령들의 실행을 제어하는 제어값들을 유지하는 레지스터들을 포함하는 데이터 기억장치(20)와, 실행되는 명령들에 의해 처리되는 데이터 값들을 기억하는 레지스터들을 포함하는 또 다른 데이터 기억장치(35)가 더 존재한다. 이때, 데이터 기억장치 20과 데이터 기억장치 35는 일부 실시예에서는 한 개의 레지스터 뱅크를 구성한다는 점에 주목하기 바란다.
본 발명의 일 실시예에서는, 페치된 명령들은, 스킵 명령과, 이 스킵 명령에 뒤따르며 벡터 마스크가 0이 아닌 것으로 조건으로 하는 복수의 벡터 명령들을 포함한다. 벡터 마스크가 0이면, 복수의 벡터 명령들에 응답하여 모든 데이터 성분들에 대해 연산이 행해지지 않는다. 스킵 명령은, 벡터 마스크를 포함하는 레지스터를 명시하는 한 개의 레지스터 지정자(specifier)와, 타겟 어드레스, 즉 명령 스트림 내부의 복수의 벡터 명령들 중에서 마지막 벡터 명령 다음의 명령의 어드레스에 해당하는 명령 어드레스를 포함한다.
디코더는, 스킵 명령을 디코드할 때, 타겟 어드레스의 값을 레지스터 22에 기억하고, 벡터 마스크 레지스터의 어드레스를 레지스터 23에 기억하고, 레지스터 21에 스킵 플래그를 설정한다. 스킵 플래그는, 스킵이 보류상태(pending)라는 것과, 데이터 조건이 만족되지 않은 것으로 판정된 경우에, 벡터 마스크 레지스터가 제로값들을 포함하는 경우, 프로그램 카운터가 타겟 레지스터(22) 내부의 값으로 설정되어야 한다는 것을 처리회로(30)에게 표시한다.
따라서, 스킵 명령에 응답하여, 디코더는 이들 값들을 데이터 기억장치 20에 기록하고, 파이프라인들(18) 중에서 한 개가 벡터 마스크 레지스터의 값을 검사하여 이 값이 0인지 여부를 확인하는 벡터 테스트 명령을 실행한다. 그후, 연속된 조건부 벡터 명령들 중에서 첫 번째 조건부 벡터 명령이 병렬 파이프라인들(18) 중에서 다른 병렬 파이프라인에서 실행된다. 벡터 테스트 연산이 벡터 마스크에 대한 결과를 결정할 때까지, 디코드 및 페치부가 이들 연속된 명령들의 페치 및 디코드를 계속한다. 벡터 마스크가 0이면, 프로그램 카운터가 스킵 명령의 타겟 값으로 설정되고, 이것이 페치되는 다음 명령이 된다. 벡터 마스크가 0이 아니면, 데이터 기억장치 20 내부의 스킵 명령에 응답하여 설정된 스킵 플래그가 리셋되어, 연속된 명령들이 모두 실행된다.
이때, 벡터 마스크가 0이더라도, 벡터 마스크 레지스터가 결정되고 있었던 동안 실행될 필요가 없는 일부의 명령들이 실행되었으며, 벡터 마스크가 0이라는 것은 이들 연산으로부터 어떤 성분도 기억되지 않는다는 것을 의미하므로, 레지스터 35의 데이터 값들이 오버라이트되지 않고, 어떤 상태도 복원될 필요가 없다는 점에서 프로세서의 상태가 변경되지 않으며, 프로세서가 단순히 타겟 명령으로 스킵할 수 있다는 점에 주목하기 바란다.
도 2a 및 도 2b는 스킵 명령의 일례와 프로세서가 그것을 구현하는 방법을 나타낸 것이다. 따라서, SKIP P,L은 조건 P에 의존하는 어드레스 L로의 옵션의 분기를 표시한다.
스킵 명령 다음에, 프로세서가 조건 P를 즉시 해결(resolve)할 수 있으면, 프로세서가 어드레스 L로 즉시 분기하게 된다. 프로세서가 조건을 즉시 분석할 수 없으면, 값 P를 조건으로 하는 다음의 명령들의 실행을 계속하게 된다. 프로세서는 다음의 3개의 레지스터를 수정함으로써 해결하지 않은 스킵을 갖는 것을 "기억한다". 프로세서는 pending_skip을 참(true)으로 설정함으로써 스킵 플래그 레지스터를 수정한다. 프로세서는, target_skip 레지스터를 분기할 어드레스인 L로 설정함으로써 이 레지스터를 수정하고, resister_skip을 이 경우에는 벡터 마스크 레지스터인 P로 설정한다.
도 2b는 이 명령에 대해 프로세서가 동작하는 방법을 나타낸 것이다. 보류상태의 스킵 플래그가 설정되는 동안(pending_skip=true), 프로그램 카운터가 스킵 명령의 타겟 어드레스에 이르면, 이 시점에서는 모든 연속된 명령들이 실행되었으므로 스킵이 더 이상 보류상태가 아니므로 스킵 플래그가 (pending_skip=false)로 리셋된다. 더구나, 스킵 명령이 의존하고 있는 조건이 해결되면, 이 경우에 벡터 마스크 레지스터가 0인 경우에, 프로그램 카운터가 target_skip 어드레스로 설정되고, 모든 중간의 연속된 명령들이 스킵된다. 이 시점에서, 스킵 플래그가 마찬가지로 거짓(false)으로 리셋된다.
이때, 보류상태의 스킵 플래그를 설정하고 프로세서가 조건이 만족되지 않은 명령들을 처리하지 않도록 하는 것이 프로세서의 성능을 향상시키지만, 이것은 필수적인 것은 아니며, 이들 명령이 스킵되지 않더라도 프로세서가 여전히 올바르게 실행된다는 점에 주목하기 바란다. 따라서, 임의의 시점에서 프로세서가 스킵 플래그를 리셋할 수 있다. 조건이 만족되는지 여부를 결정하기 위한 비교를 행하기 곤란하여 그것을 조건으로 하는 명령들 이전에 이 비교가 행해질 것 같이 않은 경우에 프로세서가 스킵 플래그를 리셋할 수도 있다. 이것은, 스킵 플래그를 리셋함으로써, 프로세서가 타겟 어드레스, 벡터 마스크 및 플래그를 기억하는 레지스터들을 완전히 비우는 것에 의해 행해진다.
이때, 위에서 주어진 실시예에서는, 스킵 명령이 어드레스를 명시하였지만, 스킵 명령이 다수의 명령들 또는 스킵할 다수의 명령 바이트들을 명시할 수도 있다는 점에 주목하기 바란다. 이와 같은 구현이 사용된다면, 스킵 명령의 실행에 응답하여, 카운터가 이 값으로 설정되고, 실행되는 연속된 명령들 중에서 각각의 명령에 대해 카운터가 감소된다. 카운터가 0에 이르면, 스킵 영역을 들뜨게 하여(excited) 스킵 플래그가 리셋된다, 그러나, 카운터가 0에 도달하지 않고 벡터 마스크가 0인 것으로 밝혀지면, 카운터에 남아 있는 명령들의 수가 스킵되는데, 즉 프로그램 카운터가 이 값만큼 증분한다.
술어 레지스터의 어드레스의 명시에 대한 대안은 벡터 마스크들에 대해 사용된 전역(global) 레지스터가 존재하는 경우가 될 수 있다. 이 경우, 스킵 명령이 항상 이 레지스터를 참조하고 있었다는 것을 알 수 있으므로, 스킵 명령 내에서 레지스터를 명시할 필요가 없을 것이다.
도 3은 스킵 명령의 변종인 VLOOP 명령과 이 명령이 갖는 거동을 나타낸 것이다.
이 경우, 해당 코드는 마스크가 모두 0이 될 때까지 반복되는 루프이다. 이 코드는 후방 분기를 이용하기 때문에 전술한 스킵 코드와 다수의 중요한 면에서 다르며, 이 경우에는 분기가 취해지는 것으로 추측해야 하며, 이것은 마찬가지로 마스크가 0이 아니라는 것을 추측하는 것에 대응한다. (도 4에 도시된 것과) 마찬가지로, 도 2에 나타낸 스킵 명령에 대해 사용된 것과 동일한 레지스터들을 VLOOP 명령들에 대해 사용하여 타겟 레지스터 및 술어 레지스터를 표시하지만, 이것이 스킵 명령이라기 보다는 보류상태의 VLOOP이라는 것을 표시하기 위해 이와 다른 플래그가 설정된다. 스킵 명령에서와 마찬가지로, 술어가 모두 제로인 것으로 판정되면, 프로세서가 타겟 어드레스로 스킵한다. 이 시점에서 VLOOP 플래그가 거짓으로 리셋된다.
위에서 주어진 실시예에서는, 스킵 및 루프 연산들이 새로운 명령이었다는 점에서 아키텍처적으로(architecturally) 구현되었다. 이들 연산들은, 전단의 디코더, 즉 프리디코더가 동일한 술어에 의해 제어되는 연산들의 시퀀스를 발견할 수 있으며, 조건이 만족되지 않는 경우 이들의 연산이 스킵 또는 루프 연산을 구현할 수 있는 아키텍처 상태를 변경하지 않는 마이크로-아키텍처적으로 구현될 수도 있다. 이때, 벡터 명령들이 전역 레지스터에 의존하고 전역 레지스터가 0과 꼭 같은 경우에 이들 벡터 명령들이 루프들처럼 모두 거동하는 본 출원의 서도에서 주어진 것과 같은 벡터 명령들에 대해 이와 같은 종류의 패턴을 스폿팅하는 것은 매우 간단하다는 점에 주목하기 바란다.
도 4는 이와 같은 패턴 스폿팅 모드에서 처리장치(10)가 동작하게 되는 다양한 상태들을 개략적으로 나타낸 것이다. 따라서, 페치부(14)는 명령들을 페치하고, 전단의 디코더(16)가 특정한 패턴 코드를 검출하게 된다. 이 예에서는, 프로세서가 정규 "a" 상태에서 동작하고 있으며, 특정한 벡터 마스크 레지스터 P를 테스트하는 벡터 테스트 연산 VTEST의 검출에 응답하여, 프로세서가 resister_skip(22)을 이 벡터 마스크 값으로 설정한다. 그후, 프로세서는 상태 b로 진행한다. 다음의 명령이 정규 명령이면, 이 시점에서 프로세서가 발견하려는 명령들의 패턴이 그곳에 없다는 것을 알아차리므로, 프로세서가 경로 *를 따라 상태 a로 복귀한다. 그러나, 술어 레지스터 P에 의존하는 분기 명령이 존재하면, 프로세서가 target_skip 레지스터(23)를 분기의 타겟 값, 즉 L로 설정하게 되고, 이 프로세서가 상태 c로 진행하게 된다. 상태 c에서는, 벡터 마스크 레지스터의 값이 결정될 때까지, 프로세서가 벡터 마스크 레지스터에 의존하는 연속된 연산들을 처리하게 된다. 벡터 마스크 레지스터의 값이 0이면, 프로그램 카운터를 타겟 스킵의 값으로 설정함으로써 프로세서가 상태 d로 진행하게 된다. 그후, 프로세서는 이 어드레스에서 명령을 실행하고 정규 상태 a로 복귀하게 된다. 연속된 명령들의 연산 중에, 벡터 마스크가 0이 아니거나 프로그램 카운터가 타겟 스킵보다 크게 상승한 것으로 밝혀지면, 프로세서가 *로 표시된 경로들을 따라 정규 상태 a로 복귀하게 된다.
도 5는 본 발명의 일 실시예에 따른 컴파일러(50)를 나타낸 것이다. 컴파일러(50)는 프로그래머에 의해 작성된 프로그램을 받아 그것을 프로세서에 의해 처리되는 코드로 변환한다. 변환을 할 때, 컴파일러는 코드가 더욱 더 효율적으로 실행되도록 이 코드를 최적화하는 단계를 행한다. 본 발명의 일 실시예에서는, 컴파일러가, 도 4에 관련하여 설명한 이전 단계의 디코더에 의해 행해진 것과 유사한 패턴 매칭 단계들을 행하고, 적절히 스킵 및 루프 기능을 행하는 처리를 제어하는 코드를 생성한다.
스킵 기능이 연계하여 사용될 수 있는 또 다른 명령은, 다양한 연산들이 특정한 조건에 의존하여 실행되어야 한다는 것을 표시하는 Thumb IT 명령이다. 따라서, ITTTGE 명령은, 한 개의 값이 다른 값보다 크거나 같으면 다음의 3 연산들이 행해져야 한다는 것을 표시한다. 조건의 결과가 알려질 때까지 이들 연산의 결과가 다시 기록되지 않을 때, 스킵 플래그가 설정될 수 있으며, 첫 번째 3개의 연산이 완료하기 전에 조건 GE가 만족되지 않은 것으로 판정되면, 프로세서가 4번째 연산으로 스킵할 수도 있다.
도 6은 데이터 처리장치(10)의 또 다른 실시예를 나타낸 것으로, 레지스터 뱅크(20) 내부에 보류상태의 벡터 바스크들을 기억하도록 구성된 레지스터 24가 존재한다. 따라서, 스킵 및 vloop 명령이 벡터 마스크 레지스터를 명시하지 않는다. 본 실시예에서는, 본 실시예에서는, 레지스터 내부에 타겟 어드레스를 설정하는 것 대신에, 스킵 명령들에 대한 벡터 마스크 등의 조건을 조건으로 하는 명령들의 개수가 카운터(42)에 설정된다. 이들 명령 각각이 실행될 때, 신호가 카운터로 전송되고 카운터가 감소된다. 조건부 명령들이 여전히 실행되고 있는 동안 조건이 만족되지 않는 것으로 판정되면, 카운터(42) 내부의 값을 프로그램 카운터에 가산함으로써 프로그램 카운터(40)가 갱신된다.
도 7은 본 발명의 일 실시예에 따른 명령 스트림을 처리하는 방법의 단계들을 나타낸 흐름도이다. 명령 스트림이 디코드되고, 디코더는 동일한 데이터 조건에 의존하고 상기 데이터 조건이 만족되지 않을 때 그것의 실행이 데이터 프로세서의 상태를 변경하지 않는 복수의 명령을 검출한다. 이것의 검출에 응답하여, EH는 다른 실시예들에서는 스킵 명령의 디코딩에 응답하여, 디코더는 스킵 플래그를 설정하고 스킵 연산의 타겟 어드레스를 타겟 어드레스 레지스터에 기록한다. 디코더가 스킵 명령을 디코딩하고 있는 경우에 이 타겟 어드레스가 스킵 명령에 명시되거나, 또는 동일한 데이터 조건에 의존하여 복수의 명령을 검출하는 경우에 이 타겟 어드레스는 이들 명령 다음의 명령의 어드레스가 된다.
그후, 프로세서는, 결과 데이터 조건이 판정되었는지 여부를 판정한다. 판정되지 않은 경우에는, 인접 조건부 명령들 중에서 첫 번째 조건부 명령이 실행된다. 그후, 프로그램 카운터가 타겟 어드레스보다 큰지 여부를 판정하여, 크지 않은 경우에, 조건이 아직 판정되지 않은 경우에는, 다음의 조건부 명령이 실행되고 프로그램 카운터를 다시 검사한다.
어떤 시점에서, 조건의 결과가 판정되어, 조건이 만족하면, 스킵 플래그가 리셋되고 조건부 명령부 명령의 실행이 계속된다. 조건이 만족되지 않으면, 프로그램 카운터를 타겟 어드레스로 설정함으로써 프로그램이 타겟 어드레스로 스킵하고 스킵 플래그가 리셋된다.
그러나, 조건 결과가 판정되기 전에 프로그램 카운터가 타겟 어드레스에 이르면, 스킵 플래그가 리셋되고 명령 스트림의 실행이 정상적으로 계속된다.
도 8은 복수의 조건부 명령들로의 후방 점프를 포함하는 명령 스트림 처리방법의 단계들을 나타낸 흐름도이다. 명령 스트림이 디코드되고, 동일한 데이터 조건에 의존하고 상기 데이터 조건이 만족되지 않을 때 그것의 실행이 데이터 프로세서의 상태를 변경하지 않는 복수의 명령들로의 후방 점프를 디코더가 검출한다. 이 검출에 응답하여, 또는 다른 실시예들에서는 루프 명령의 디코딩에 응답하여, 디코더는 vloop 플래그를 설정하고 루프 연산의 타겟 어드레스를 타겟 어드레스 레지스터에 기록한다. 이 타겟 어드레스는 1만큼 증분된 현재 프로그램 카운터이다.
그후, 프로세서는 첫 번째 조건부 명령으로 후방으로 점프한다. 그후, 조건 결과가 판정되었는지 여부를 판정한다. 판정되지 않은 경우에는, 다음 조건부 명령이 실행되고 다시 판정한다. 조건이 판정되면, 조건이 만족된 경우에 vloop 플래그가 리셋되고 조건부 명령들의 실행이 계속된다. 조건이 만족되지 않으면, 프로그램이 타겟 어드레스로 점프하여 vloop 플래그를 리셋한다. 조건부 명령들이 실행되는 동안 조건이 판정되지 않으면, 프로그램 스트림에서 타겟 어드레스로의 분기가 일어나고 이 시점에서 vloop 플래그가 리셋된다. 이들 단계는 도시되어 있지 않다.
도 9는 프로그램을 컴파일하는 방법의 단계들을 나타낸 것이다. 프로그램 내부의 명령들을 분석하고, 동일한 데이터 조건에 의존하며 그것의 실행이 프로세서의 상태를 변경하지 않는 복수의 인접 조건부 명령들이 존재하는지 판정한다. 이들 인접 명령들이 검출되면, 이들 명령들로의 후방 분기가 존재하는지 여부를 판정한다. 존재하지 않는 경우에는, 스킵 명령이 생성되고 복수의 조건부 명령들이 뒤따르는 명령 스트림 내부에 놓인다. 후방 분기가 존재하면, 루프 명령이 발생된다.
도 10은 사용될 수 있는 가상머신 구현을 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 프로세싱 하드웨어를 작동하는 장치 및 방법 면에서 본 발명을 구현하지만, 하드웨어 장치들의 소위 가상머신 구현을 제공하는 것도 가능하다. 이들 가상머신 구현은, 가상머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 실행하는 호스트 프로세서(530) 상에서 실행된다. 일반적으로, 적당한 속도로 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서들이 필요하지만, 호환성 또는 재사용 이유로 인해 다른 프로세서에 네이티브한 코드를 실행하는 것이 필요할 때 등과 같이, 특정한 환경에서는 이와 같은 접근방식이 정당화될 수 있다. 가상머신 프로그램(510)은, 가상머신 프로그램(510)에 의해 모델링되고 있는 장치인 실제 하드웨어에 의해 제공되는 애플리케이션 프로그램 인터페이스와 동일한 애플리케이션 프로그램 인터페이스를 애플리케이션 프로그램(500)에게 제공한다. 따라서, 전술한 메모리 액세스 제어를 포함하는 프로그램 명령들은 가상머신 프로그램(510)을 사용하여 애플리케이션 프로그램(500) 내부에서부터 실행되어 가상머신 하드웨어와의 상호작용을 모델링하여도 된다.
첨부된 도면을 참조하여 본 발명의 예시적인 실시예를 상세히 설명하였지만, 본 발명은 이들 정확한 실시예들에 한정되지 않으며, 첨부된 청구범위에 규정된 본 발명의 보호범위 및 사상을 벗어나지 않으면서 당업자에 의해 다양한 변경 및 변형이 행해질 수 있다는 것은 자명하다. 예를 들어, 본 발명의 보호범위를 벗어나지 않으면서, 독립항들의 특징과 다음의 종속항들의 특징의 다양한 조합이 행해질 수도 있다.

Claims (21)

  1. 명령들의 스트림을 디코드하도록 구성된 명령 디코더와,
    상기 디코드된 명령들의 스트림을 처리하도록 구성된 데이터 프로세서를 구비하고,
    상기 데이터 프로세서는, 상기 명령들의 스트림을 분석하여, 데이터 조건이 만족되는 것에 실행이 의존하고 상기 데이터 조건이 만족되지 않을 때 실행이 데이터 레지스터에 기억된 값을 변경시키지 않는 상기 명령들의 스트림 내부의 복수의 인접 명령들을 식별하도록 구성되고, 상기 복수의 인접 명령을 식별한 것에 응답하여, 상기 데이터 프로세서가,
    상기 데이터 조건이 만족되는지 여부의 판정을 개시하고,
    상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하고,
    상기 데이터 조건이 만족되지 않는 것으로 판정한 것에 응답하여,
    아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 다음의 실행할 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하도록 구성된, 데이터 처리장치.
  2. 제 1항에 있어서,
    상기 데이터 처리장치는 데이터 기억장치를 더 구비하고, 상기 데이터 처리장치는, 상기 복수의 인접 명령들에 응답하여, 상기 데이터 기억장치 내부에 상기 복수의 인접 명령들의 실행후 실행될 상기 다음 명령의 위치를 타겟 위치로서 식별하는 식별자를 기억하고, 상기 데이터 기억장치 내부에 스킵 플래그를 설정하고, 상기 스킵 플래그는, 상기 데이터 조건이 만족되지 않은 것에 응답하여 상기 프로세서가 상기 타겟 위치에 대응하는 어드레스로 프로그램 카운터를 갱신해야만 한다는 것을 상기 프로세서에게 표시하는, 데이터 처리장치.
  3. 제 2항에 있어서,
    상기 다음 명령의 위치를 식별하는 상기 식별자는 어드레스를 포함하는, 데이터 처리장치.
  4. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 복수의 인접 명령들은 벡터 데이터 성분들을 처리하는 벡터 명령들을 포함하고, 각각의 벡터 명령은 상기 벡터 데이터 성분들 중에서 어떤 성분들이 처리될지를 제어하는 마스크를 포함하고, 상기 만족되고 있지 않은 상기 조건은 어떤 데이터 성분들도 처리되지 않을 것이라는 것을 표시하는 제로값들을 포함하는 상기 마스크를 포함하는, 데이터 처리장치.
  5. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 복수의 인접 명령들은 동일한 술어를 각각 포함하는 복수의 명령들을 포함하고, 상기 명령들은 상기 술어가 만족되는 것에 응답해서만 기억된 데이터 값들을 완료 및 갱신하고, 상기 데이터 처리장치는,
    상기 복수의 인접 명령들의 처리를 개시하고,
    상기 술어가 만족되지 않는다는 판정에 응답하여,
    기억된 데이터 값들이 갱신되지 않도록 상기 복수의 인접 명령들의 실행을 종료하고,
    아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간 명령들을 실행하지 않고 상기 복수의 인접 명령들 후의 다음 명령으로 스킵하여 상기 다음 명령에서 실행을 계속하도록 구성된, 데이터 처리장치.
  6. 제 2항 또는 제 3항에 있어서,
    상기 데이터 처리장치는 데이터 기억장치 및 검출회로를 구비하고,
    상기 검출회로는 상기 데이터 조건이 만족되지 않는 것에 의존하는 조건부 분기 명령의 검출에 응답하여 상기 복수의 인접 명령들 주위로 전방으로 분기하여,
    상기 분기 명령의 타겟 위치를 표시하는 값을 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억하고 상기 데이터 기억장치 내부의 상기 스킵 플래그 값을 설정하고,
    상기 프로세서는, 상기 스킵 플래그에 응답하여, 상기 분기를 취하지 않고, 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고,
    상기 복수의 인접 명령들의 실행을 개시하고,
    상기 데이터 조건이 만족되지 않는다는 판정에 응답하여, 프로그램 카운터를 상기 타겟 위치에 의존하는 값으로 설정하는, 데이터 처리장치.
  7. 제 6항에 있어서,
    상기 조건부 분기 명령은 벡터 값을 조건으로 하고, 상기 프로세서는 상기 벡터의 값을 테스트하는 벡터 테스트 명령을 실행함으로써 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 벡터 값이 소정의 값을 포함하는 것으로 판정된 것에 응답하여, 상기 데이터 조건이 만족되지 않는 것으로 판정되는, 데이터 처리장치.
  8. 제 2항 또는 제 3항에 있어서,
    상기 데이터 처리장치는 데이터 기억장치와 검출회로를 더 구비하고,
    상기 검출회로는 상기 데이터 조건에 의존하는 조건부 분기 명령의 검출에 응답하여 상기 복수의 인접 명령들의 시작 위치로 후방으로 분기하여,
    1만큼 증분된 상기 분기 명령의 위치를 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억하고 상기 데이터 기억장치 내부의 스킵 플래그 값을 설정하고,
    상기 프로세서는, 상기 스킵 플래그에 응답하여, 상기 분기를 취하고, 상기 데이터 조건이 만족되는지 여부를 판정하고,
    상기 복수의 인접 명령들의 실행을 개시하고,
    상기 데이터 조건이 만족되지 않는다는 판정에 응답하여 상기 타겟 위치로서 상기 데이터 기억장치 내부에 기억된 값에 의존하는 값으로 프로그램 카운터를 설정하는, 데이터 처리장치.
  9. 제 8항에 있어서,
    상기 조건부 분기 명령은 벡터 값을 조건으로 하고, 상기 프로세서는 상기 벡터의 값을 테스트하는 벡터 테스트 명령을 실행함으로써 상기 데이터 조건이 만족되는지 여부의 판정을 개시하고, 상기 벡터 값이 소정의 값을 포함하는 것으로 판정된 것에 응답하여, 상기 데이터 조건이 만족되지 않는 것으로 판정되는, 데이터 처리장치.
  10. 제 2항 또는 제 3항에 있어서,
    데이터 기억장치 및 검출회로를 더 구비하고,
    상기 검출회로는, 상기 데이터 조건에 의존하는 상기 복수의 인접 명령들이 상기 데이터 조건과 완료될 각각의 명령에 대해 조건이 만족되어야 하는지 여부의 표시를 포함하는 명령에 뒤따른다는 것을 표시하는 상기 명령의 검출에 응답하여,
    상기 복수의 명령에 뒤따르는 상기 다음 명령의 위치를 상기 타겟 위치로서 식별하는 식별자를 기억하고 상기 데이터 기억장치 내부에 스킵 플래그 값을 설정하고,
    상기 데이터 조건이 만족되지 않는다는 판정에 응답하여, 상기 프로세서가 상기 스킵 플래그에 응답하여 상기 타겟 위치를 스킵하는, 데이터 처리장치.
  11. 제 2항 또는 제 3항에 있어서,
    상기 데이터 조건이 만족된다는 판정에 응답하여, 상기 프로세서가 상기 복수의 인접 명령들의 실행을 계속하고 상기 스킵 플래그를 소거하도록 구성된, 데이터 처리장치.
  12. 제 2항 또는 제 3항에 있어서,
    상기 데이터 조건이 판정되기 전의 모든 상기 인접 명령들의 실행에 응답하여, 상기 프로세서가 상기 스킵 플래그를 소거하도록 구성된, 데이터 처리장치.
  13. 데이터 프로세서에 의해 실행하기 위해 애플리케이션을 컴파일하는 방법으로서,
    상기 애플리케이션 내부의 복수의 명령들을 분석하는 단계와,
    동일한 데이터 조건에 실행이 의존하며 상기 조건이 만족되지 않을 때 실행되면 데이터 레지스터에 기억된 값을 변경하지 않는 복수의 인접 명령들을 상기 복수의 명령들이 포함하는지 여부를 검출하는 단계와,
    상기 복수의 명령이 상기 복수의 인접 명령을 포함하는 경우에, 상기 복수의 인접 명령이 뒤따르는 스킵 명령을 포함하는 명령들의 스트림을 발생하는 단계를 포함하고,
    상기 스킵 명령은 타겟 어드레스를 명시하고, 상기 타겟 어드레스는 상기 인접 명령들과 상기 데이터 조건 뒤에 있는 다음 명령의 어드레스이고, 상기 스킵 명령은, 상기 데이터 프로세서를 제어하는 상기 데이터 프로세서에 의해 실행될 때,
    상기 데이터 조건이 만족되는지 여부의 판정을 개시하고,
    상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하고,
    상기 컴파일 방법은,
    상기 데이터 조건이 만족되었다는 판정에 응답하여,
    아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 뒤에 있는 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하는 단계와
    상기 데이터 조건이 만족되지 않았다는 판정에 응답하여, 상기 복수의 인접 명령들의 실행을 계속하는 단계를 더 포함하는, 애플리케이션 컴파일방법.
  14. 데이터 프로세서 상에서 실행될 때 데이터 프로세서가 청구항 13에 기재된 방법의 단계들을 수행하게 제어하도록 동작하는 스킵 명령을 포함하는 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록매체.
  15. 데이터 처리방법으로서,
    명령들의 스트림을 디코드하는 단계와,
    상기 디코드된 명령들의 스트림을 처리하는 단계와,
    데이터 조건이 만족되는 것에 실행이 의존하고 상기 데이터 조건이 만족되지 않을 때 실행이 데이터 레지스터에 기억된 값을 변경시키지 않는 상기 명령들의 스트림 내부의 복수의 인접 명령들에 응답하여,
    상기 데이터 조건이 만족되는지 여부의 판정을 개시하고,
    상기 데이터 조건이 만족되는지 여부의 판정을 기다리지 않고 상기 복수의 인접 명령들의 처리를 개시하는 단계와,
    상기 데이터 조건이 만족되지 않는 것으로 판정한 것에 응답하여,
    아직 실행되지 않은 상기 복수의 인접 명령들 중에서 중간의 명령들을 실행하지 않고, 또한 상기 데이터 레지스터 내부의 상기 값을 복원하지 않고, 상기 복수의 인접 명령들 다음의 실행할 다음 명령으로 스킵하여, 상기 다음 명령에서 실행을 계속하는 단계를 포함하는, 데이터 처리방법.
  16. 컴퓨터가 청구항 1에 기재된 데이터 처리장치로서 기능하기 위한 프로그램을 기록한 컴퓨터 판독 가능한 기록매체.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
KR1020137022123A 2011-02-07 2012-01-26 동일한 데이터 조건에 의존하는 인접 명령의 실행 제어 KR101827747B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/929,667 US9176737B2 (en) 2011-02-07 2011-02-07 Controlling the execution of adjacent instructions that are dependent upon a same data condition
US12/929,667 2011-02-07
PCT/GB2012/050161 WO2012107737A1 (en) 2011-02-07 2012-01-26 Controlling the execution of adjacent instructions that are dependent upon a same data condition

Publications (2)

Publication Number Publication Date
KR20140014143A KR20140014143A (ko) 2014-02-05
KR101827747B1 true KR101827747B1 (ko) 2018-03-22

Family

ID=45614861

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137022123A KR101827747B1 (ko) 2011-02-07 2012-01-26 동일한 데이터 조건에 의존하는 인접 명령의 실행 제어

Country Status (10)

Country Link
US (1) US9176737B2 (ko)
EP (1) EP2673703B1 (ko)
JP (1) JP6267513B2 (ko)
KR (1) KR101827747B1 (ko)
CN (1) CN103348318B (ko)
BR (1) BR112013019824B1 (ko)
GB (1) GB2501211B (ko)
IL (1) IL227476A (ko)
MY (1) MY160644A (ko)
WO (1) WO2012107737A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9335997B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US9342304B2 (en) 2008-08-15 2016-05-17 Apple Inc. Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture
US9335980B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
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
US9626185B2 (en) * 2013-02-22 2017-04-18 Apple Inc. IT instruction pre-decode
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9519482B2 (en) * 2014-06-20 2016-12-13 Netronome Systems, Inc. Efficient conditional instruction having companion load predicate bits instruction
US9830153B2 (en) * 2014-06-20 2017-11-28 Netronome Systems, Inc. Skip instruction to skip a number of instructions on a predicate
US10175988B2 (en) * 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
GB2540941B (en) * 2015-07-31 2017-11-15 Advanced Risc Mach Ltd Data processing
US10055208B2 (en) 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
CN107179935B (zh) * 2016-03-11 2021-01-29 华为技术有限公司 一种指令执行方法及虚拟机
KR101699491B1 (ko) * 2016-03-29 2017-01-24 주식회사 포워드벤처스 기능 사용법 표시 장치, 방법, 및 컴퓨터 프로그램
CN107329936A (zh) * 2016-04-29 2017-11-07 北京中科寒武纪科技有限公司 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法
US11726979B2 (en) 2016-09-13 2023-08-15 Oracle International Corporation Determining a chronological order of transactions executed in relation to an object stored in a storage system
US10860534B2 (en) 2016-10-27 2020-12-08 Oracle International Corporation Executing a conditional command on an object stored in a storage system
US10956051B2 (en) 2016-10-31 2021-03-23 Oracle International Corporation Data-packed storage containers for streamlined access and migration
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884746B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
GB2571996B (en) * 2018-03-16 2020-09-09 Advanced Risc Mach Ltd Branch target variant of branch-with-link instruction
CN111124500B (zh) * 2019-12-12 2022-03-08 浪潮(北京)电子信息产业有限公司 一种指令执行方法、装置、设备及存储介质
US11886883B2 (en) 2021-08-26 2024-01-30 International Business Machines Corporation Dependency skipping in a load-compare-jump sequence of instructions by incorporating compare functionality into the jump instruction and auto-finishing the compare instruction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6918032B1 (en) * 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US20060090063A1 (en) * 2002-06-24 2006-04-27 Jean-Paul Theis Method for executing structured symbolic machine code on a microprocessor
US20070220239A1 (en) * 2006-03-17 2007-09-20 Dieffenderfer James N Representing loop branches in a branch history register with multiple bits
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127091A (en) 1989-01-13 1992-06-30 International Business Machines Corporation System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor
JPH04137169A (ja) 1990-09-28 1992-05-12 Nec Corp 情報処理装置
GB2273377A (en) 1992-12-11 1994-06-15 Hughes Aircraft Co Multiple masks for array processors
US5799180A (en) 1995-10-31 1998-08-25 Texas Instruments Incorporated Microprocessor circuits, systems, and methods passing intermediate instructions between a short forward conditional branch instruction and target instruction through pipeline, then suppressing results if branch taken
JPH10320380A (ja) 1997-05-20 1998-12-04 Kofu Nippon Denki Kk ベクトル処理装置
JP2939248B2 (ja) 1997-07-14 1999-08-25 松下電器産業株式会社 分岐予測方法およびプロセッサ

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6918032B1 (en) * 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US20060090063A1 (en) * 2002-06-24 2006-04-27 Jean-Paul Theis Method for executing structured symbolic machine code on a microprocessor
US20070220239A1 (en) * 2006-03-17 2007-09-20 Dieffenderfer James N Representing loop branches in a branch history register with multiple bits
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates

Also Published As

Publication number Publication date
EP2673703B1 (en) 2019-08-28
GB2501211B (en) 2016-08-17
IL227476A (en) 2017-05-29
CN103348318B (zh) 2016-08-17
GB2501211A (en) 2013-10-16
KR20140014143A (ko) 2014-02-05
BR112013019824B1 (pt) 2021-06-15
JP6267513B2 (ja) 2018-01-24
CN103348318A (zh) 2013-10-09
EP2673703A1 (en) 2013-12-18
GB201313488D0 (en) 2013-09-11
MY160644A (en) 2017-03-15
US9176737B2 (en) 2015-11-03
BR112013019824A2 (pt) 2020-08-04
US20120204007A1 (en) 2012-08-09
IL227476A0 (en) 2013-09-30
JP2014504770A (ja) 2014-02-24
WO2012107737A1 (en) 2012-08-16

Similar Documents

Publication Publication Date Title
KR101827747B1 (ko) 동일한 데이터 조건에 의존하는 인접 명령의 실행 제어
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
JP6971220B2 (ja) スプライス演算を行うための装置および方法
JP4718901B2 (ja) 命令実行装置、デバッグ方法、デバッグ装置及びデバッグプログラム
CN108780397B (zh) 程序循环控制
CN108885549B (zh) 分支指令
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
WO2019236294A1 (en) Storing incidental branch predictions to reduce latency of misprediction recovery
JP3749233B2 (ja) パイプラインでの命令実行方法及び装置
JP7232331B2 (ja) ループ終了予測器
US9710269B2 (en) Early conditional selection of an operand
KR20070108936A (ko) 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
CN109144572B (zh) 指令执行方法和处理器
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
JP5696210B2 (ja) プロセッサ及びその命令処理方法
CN113703842B (zh) 一种基于分支预测的值预测方法、装置及介质
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
JP7513527B2 (ja) 予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納
WO2007048988A1 (en) A data processing apparatus and method for handling procedure call instructions
JP2005149297A (ja) プロセッサおよびそのアセンブラ
JP2006235723A (ja) 命令フェッチ回路

Legal Events

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