KR20180034501A - 동적 벡터 길이의 루프를 이용한 벡터 처리 - Google Patents

동적 벡터 길이의 루프를 이용한 벡터 처리 Download PDF

Info

Publication number
KR20180034501A
KR20180034501A KR1020187004899A KR20187004899A KR20180034501A KR 20180034501 A KR20180034501 A KR 20180034501A KR 1020187004899 A KR1020187004899 A KR 1020187004899A KR 20187004899 A KR20187004899 A KR 20187004899A KR 20180034501 A KR20180034501 A KR 20180034501A
Authority
KR
South Korea
Prior art keywords
instruction
value
data
command
vector
Prior art date
Application number
KR1020187004899A
Other languages
English (en)
Inventor
니겔 존 스테펜스
그리고리오스 맥클리스
나다나엘 프레밀리우
비센테 알레한드로 마르티네즈
엠보우 욜
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Priority to KR1020247013072A priority Critical patent/KR20240058195A/ko
Publication of KR20180034501A publication Critical patent/KR20180034501A/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

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)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Communication Control (AREA)

Abstract

데이터 처리 장치는 데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 처리 회로를 포함하며, 처리 회로는, 프로그램 명령을 디코딩하는 명령 디코더 회로와; 상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하며, 명령 디코더 회로는 WHILE 명령과 CHANGE 명령에 응답하여 술어 플래그의 수에 따라 명령 처리를 제어한다.

Description

동적 벡터 길이의 루프를 이용한 벡터 처리
본 개시 내용은 데이터 처리 장치 및 방법에 관한 것이다.
일부 데이터 처리 방식은 데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 데이터 항목에 단일 벡터 처리 명령을 적용하는 것을 포함하는 벡터 처리 동작을 허용한다. 이에 대해, 스칼라 처리는 데이터 벡터보다는 단일 데이터 항목들에 대해 효과적으로 작용한다.
벡터 처리는 처리 동작이 다수의 상이한 인스턴스의 처리 대상 데이터에 대해 수행되는 인스턴스에 사용될 수 있다. 벡터 처리 방식에서는 다중 데이터 항목(데이터 벡터의)에 단일 명령이 동시에 적용될 수 있다. 이것은 스칼라 처리에 비해 데이터 처리의 효율 및 처리량을 향상시킬 수 있다.
예시적인 구성으로 제공되는 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 처리 회로를 포함하고, 상기 처리 회로는,
프로그램 명령을 디코딩하는 명령 디코더 회로와;
상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
상기 명령 디코더 회로는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 적용 수단을 포함하고, 상기 적용 수단은,
명령을 디코딩하는 명령 디코딩 수단과;
상기 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
상기 명령 디코딩 수단은 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 실행 수단을 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 데이터 처리 방법은,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 단계와;
명령을 디코딩하는 단계와;
명령을 실행하는 단계를 포함하고,
상기 디코딩 단계는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 실행 단계를 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 가상 머신은 머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 프로세서를 포함하고, 상기 프로세서는,
명령을 디코딩하는 명령 디코더와;
상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
상기 명령 디코더는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 프로세서를 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 데이터 처리 장치는,
명령을 디코딩하는 명령 디코더 회로와;
상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
상기 명령 디코더 회로는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 명령 처리 회로를 제어하며;
상기 명령 디코더 회로는 CHANGE 명령에 응답하여, 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 상기 포화값에 따라, 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 처리 회로를 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 데이터 처리 장치는,
명령을 디코딩하는 명령 디코딩 수단과;
상기 명령 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
상기 디코딩 수단은 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 수단을 제어하며;
상기 디코딩 수단은 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록 동작 가능하게, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 수단을 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 데이터 처리 방법은,
명령을 디코딩하는 디코딩 단계와;
상기 디코딩 단계에 의해 디코딩된 명령을 실행하는 실행 단계를 포함하고,
상기 디코딩 단계는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 단계를 제어하며;
상기 디코딩 단계는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 단계를 제어하는 것을 특징으로 한다.
다른 예의 구성으로 제공되는 가상 머신은 머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
명령을 디코딩하는 명령 디코더와;
상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
상기 명령 디코더는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 복수의 데이터 항목과 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 연산을 적용하도록, 상기 명령 프로세서를 제어하며;
상기 명령 디코더는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행시 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 프로세서를 제어하는 것을 특징으로 한다.
본 기술은 첨부 도면을 참조로 예시된 바와 같은 실시예를 참조로 단지 예로써 아래에 설명된다. 도면에서,
도 1은 데이터 처리 장치를 개략적으로 예시하며;
도 2는 데이터를 다중 데이터 벡터로서 처리하는 것을 개략적으로 예시하며;
도 3은 루프화된 동작을 나타낸 개략적인 흐름도이고;
도 4는 술어 플래그의 사용을 개략적으로 예시하며;
도 5는 카운터 변수에 따른 술어 플래그의 제어를 개략적으로 예시하며;
도 6은 카운터 변수에 따른 WHILE 명령에 의한 술어 플래그의 설정을 나타낸 개략적인 흐름도이고;
도 7은 소위 전개된(unrolled) 루프를 개략적으로 예시하며;
도 8 및 도 9는 카운터 변수로 나타낼 수 있는 값을 개략적으로 예시하며;
도 10 및 도 11은 각각 증가 및 감소 명령의 동작을 나타낸 개략적인 흐름도이고;
도 12는 가상 머신을 개략적인 예시한다.
첨부 도면을 참조로 실시예들을 논의하기에 앞서, 실시예들의 설명을 아래에 제공한다.
예시적인 실시예로 제공되는 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어(predicate) 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 처리 회로를 포함하고, 상기 처리 회로는,
프로그램 명령을 디코딩하는 명령 디코더 회로와;
상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
상기 명령 디코더 회로는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어한다.
본 개시 내용은 (재컴파일링(recompilation) 처리 없이) 벡터 처리 회로에 있어서 다른 유효 벡터 길이(VL)를 가질 수 있는 상이한 인스턴스들(instances)에 의한 실행을 위해 의도된 프로그램 명령의 경우, 명령이 실행되게 하는 벡터 처리 회로의 유효 길이(VL)가 어떤 값인가에 따라 동작하는 루프화되거나 또는 다른 동작을 제어하기 위한 구성을 제공하는 데 유용할 수 있음을 인식하고 있다. (가상의 VL을 벡터 처리 회로의 상이한 인스턴스들 사이에서 부딪칠 수 있는 최소 레벨로 고정할 수 있는 대안예는 일부의 인스턴스에 유용한 긴 벡터 길이를 사용하지 않는 것에 의해 비효율적일 수 있다)
본 개시 내용의 실시예는 실행시 술어 플래그(예, 벡터 길이에 대한 프록시로서)의 수에 따른 양만큼 변수(예, 루프 제어 변수)를 수정하여 명령이 실행되게 하는 시스템의 벡터 길이에 따라 변화량을 설정할 수 있는 CHANGE 명령을 제공한다. 이것은 상이한 개별 유효 벡터 길이를 가지는 벡터 처리 회로의 상이한 인스턴스들에 대해 반드시 재컴파일링을 요구하지 않고 동일한 프로그램 명령이 실행될 수 있게 할 수 있다.
수정치의 사용은 단일의 CHANGE 명령이 벡터 연산이 "전개되는(unrolled)" (예컨대) 루프 제어 또는 다른 벡터 연산에 사용될 수 있게 하는 데, 이는 말하자면, 다중 데이터 벡터가 루프 또는 다른 세트의 처리 명령의 단일 반복 또는 인스턴스에서 처리되는 것이다.
예시적인 실시예에서, 명령 디코더 회로는 CHANGE 명령에 응답하여, 술어 플래그의 수와 수정치에 따른 값의 곱(product)에 따른 양만큼 변수의 값을 변화시키도록 명령 처리 회로를 제어한다. 예로서, 수정치는 승수(multiplicative value)일 수 있다. 예로서, CHANGE 명령에 의해 설정된 제어 변수의 연속 값 사이의 단계는 수정치에 대해 예컨대 비례하는 것과 같이 의존할 수 있다.
변수의 값이 단순 연산 테스트에 의해 테스트되어 (예컨대) 루프의 완료 여부를 판정하도록 하게 위해, 예시적인 실시예에서, CHANGE 명령은 관련 포화값을 가지며, 그에 따라, CHANGE 명령은 실행시 포화값보다 크지 않게 변수의 값을 변화시킨다.
일부의 예로, CHANGE 명령은 변수의 값을 감소시키는 감소 명령이고; 포화값은 변수로 나타낼 수 있는 최소값이다. 다른 예로, CHANGE 명령은 변수의 값을 증가시키는 증가 명령이고; 포화값은 변수로 나타낼 수 있는 최대값이다.
CHANGE 명령은 (전적인 것은 아니지만) 특히 로프 제어의 측면에 유용하며, 예시적인 실시예에서, 변수는 카운터 변수이며, 벡터 처리 회로는 처리 루프의 q회 이상의 반복 중에 적어도 부분적으로 상기 카운터 변수에 의해 정의되는 데이터 벡터에 벡터 처리 명령을 적용하며; 명령 디코더 회로는 추가의 명령에 응답하여, 상기 카운터 변수에 따라 처리 루프를 반복적으로 계속 실행할지 여부를 감지하도록 명령 처리 회로를 제어한다.
예시적인 실시예에서, 상기 처리 루프를 계속 실행할 지 여부를 감지하는 상기 추가의 명령은 WHILE 명령을 포함하며, 명령 디코더 회로는 상기 WHILE 명령에 응답하여, 상기 카운터 변수에 연산 조건이 적용되는 동안 처리 루프를 계속 실행하도록 명령 처리 회로를 제어한다. 예를 들면, 상기 연산 조건은 하기 열거된 리스트로부터 선택된 조건일 수 있다,
i. 카운터 변수가 상한값보다 작고;
ii. 카운터 변수가 하한값보다 크고;
iii. 카운터 변수가 상한값 이하이고;
iv. 카운터 변수가 하한값 이상임.
술어 플래그의 수는 일부의 경우 시스템의 벡터 길이와 동일하지 않을 수 있고, 일부의 경우, 명령 디코더 회로는 CHANGE 명령에 응답하여, (예, 처리 회로에 의해 선택된) 술어 플래그의 수의 선택된 부분 집합과 수정치에 따른 양만큼 변수의 값을 변화시키도록 명령 처리 회로를 제어한다.
아래 논의되는 바와 같이, 예시적인 실시예에서, 명령 디코더 회로는 WHILE 명령에 응답하여, 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상을 선택하되, 그 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 고려한 루프 변수의 값이 연산 조건을 위배하지 않도록, 명령 처리 회로를 제어한다. 아래에 논의되는 바와 같이, 예시적인 실시예에서, 명령 디코더 회로는 WHILE 명령에 응답하여, 술어 플래그의 미리 정해진 순서에 따라 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상을 선택하되, 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 고려한 루프 변수의 값이 연산 조건에 위배되지 않도록, 명령 처리 회로를 제어한다.
다른 예시적인 실시예로 제공되는 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 적용 수단을 포함하고, 상기 적용 수단은,
명령을 디코딩하는 명령 디코딩 수단과;
상기 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
상기 명령 디코딩 수단은 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 실행 수단을 제어한다.
또한, 예시적인 실시예로 제공되는 데이터 처리 방법은,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 단계와;
명령을 디코딩하는 단계와;
명령을 실행하는 단계를 포함하고,
상기 디코딩 단계는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 실행 단계를 제어한다.
예시적인 실시예로 제공되는 가상 머신은 머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 프로세서를 포함하고, 상기 프로세서는,
명령을 디코딩하는 명령 디코더와;
상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
상기 명령 디코더는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 프로세서를 제어한다.
(예컨대) 벡터 처리 시스템에서의 루프화된 연산의 제어와 같은 데이터 처리 연산의 측면에서, 예시적인 실시예는 포화 카운터와 명쾌하게 단순한 연산 테스트를 사용하여 루프화된 함수의 실행을 제어할 수 있다.
예시적인 실시예로 제공되는 데이터 처리 장치는,
명령을 디코딩하는 명령 디코더 회로와;
상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
상기 명령 디코더 회로는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 명령 처리 회로를 제어하며;
상기 명령 디코더 회로는 CHANGE 명령에 응답하여, 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 상기 포화값에 따라, 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 처리 회로를 제어한다.
카운터가 포화값을 넘지 않도록 억제하는 것에 의해, 무효한 결과(예, 카운터의 비트 수의 주변값 또는 이를 넘는 카운터에 의해 야기될 수 있는 결과)가 방지될 수 있다.
예시적인 실시예에서, 상기 연산 조건은 하기 열거된 리스트로부터 선택된 조건일 수 있다,
i. 제어 변수가 상한값보다 작고;
ii. 제어 변수가 하한값보다 크고;
iii. 제어 변수가 상한값 이하이고;
iv. 제어 변수가 하한값 이상임.
예시적인 실시예에서, 술어 플래그는 제어 기능의 일부로서 사용될 수 있다. 예시적인 실시예에서, 술어 플래그는 벡터 처리 명령이 활성 상태의 술어 플래그에 대응하는 데이터 벡터의 위치에 적용되어야 함을 나타내는 활성 상태를 가진다.
예시적인 실시예에서, 명령 디코더 회로는 WHILE 명령에 응답하여, 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상을 선택하되, 상기 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 고려한(예, 경우에 따라 가산 또는 감산) 제어 변수의 값이 연산 조건을 위배하지 않도록, 명령 처리 회로를 제어한다. 이렇게, WHILE 명령은 루프 제어와 같은 제어의 실행을 위해 술어 플래그이 메커니즘을 편리하게 사용할 수 있다.
예시적인 실시예에서, 명령 디코더 회로는 WHILE 명령에 응답하여, 술어 플래그의 미리 정해진 순서에 따라 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상을 선택하도록, 명령 처리 회로를 제어한다. 예를 들면, 상기 순서는 처리될 하위의 데이터 항목의 순서에 대응하는 순서일 수 있다.
예시적인 실시예에서, 명령 디코더 회로는 WHILE 명령에 응답하여, 제어 변수에 연산 조건이 적용되는 동안 처리 루프를 반복적으로 계속 실행하도록 명령 처리 회로를 제어한다.
예시적인 실시예로 제공되는 데이터 처리 장치는,
명령을 디코딩하는 명령 디코딩 수단과;
상기 명령 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
상기 디코딩 수단은 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 수단을 제어하며;
상기 디코딩 수단은 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록 동작 가능하게, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 수단을 제어한다.
또한, 예시적인 실시예로 제공되는 데이터 처리 방법은,
명령을 디코딩하는 디코딩 단계와;
상기 디코딩 단계에 의해 디코딩된 명령을 실행하는 실행 단계를 포함하고,
상기 디코딩 단계는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 단계를 제어하며;
상기 디코딩 단계는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 단계를 제어한다.
예시적인 실시예로 제공되는 가상 머신은 머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
명령을 디코딩하는 명령 디코더와;
상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
상기 명령 디코더는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 복수의 데이터 항목과 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 연산을 적용하도록, 상기 명령 프로세서를 제어하며;
상기 명령 디코더는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행시 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 프로세서를 제어한다.
이제 도 1을 참조하면, 도 1은 데이터 값(32)과 프로그램 명령(34)을 저장하는 메모리(30)에 결합된 프로세서(20)를 포함하는 데이터 처리 시스템(10)를 개략적으로 예시한다. 프로세서(20)는 메모리(30)로부터 프로그램 명령(34)을 페치하고 해당 페치 프로그램 명령을 디코더 회로(50)에 공급하는 명령 페치부(40)를 포함한다. 디코더 회로(50)는 페치된 프로그램 명령을 디코딩하고, 해당 디코딩된 벡터 명령에 의해 특정되는 바와 같이 벡터 레지스터 회로(70) 내에 저장된 벡터 레지스터에 대해 벡터 처리 연산을 수행하도록 벡터 처리 회로(60)를 제어하는 제어 신호를 발생시킨다.
또한, 프로세서(20)는 스칼라 명령과 관련된 스칼라 처리 회로(80)를 포함한다.
스칼라 처리와 벡터 처리 간의 일반적인 구분은 다음과 같다. 벡터 처리는 데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 데이터 항목에 단일 벡터 처리 명령을 적용하는 것을 포함한다. 스칼라 처리는 데이터 벡터보다는 단일 데이터 항목들에 대해 효과적으로 작용한다.
벡터 처리는 처리 동작이 다수의 상이한 인스턴스의 처리 대상 데이터에 대해 수행되는 인스턴스에 사용될 수 있다. 벡터 처리 방식에서는 다중 데이터 항목(데이터 벡터의)에 단일 명령이 동시에 적용될 수 있다. 이것은 스칼라 처리에 비해 데이터 처리의 효율 및 처리량을 향상시킬 수 있다.
하기의 논의는 예시적인 프로그램 명령(34)에 관한 것이다. 본 개시 내용의 실시예는 이러한 프로그램 명령을 디코딩하고 실행하도록 동작 가능하거나 구성된 예컨대, 도 1에 도시된 종류의 장치를 포함한다. 따라서, 도 1은 데이터 벡터 내의 다수의 위치에 있는 데이터 항목에 대해 상기 위치와 관련된 개별 술어(predictate) 플래그(후술됨)의 세트의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 예시적인 처리 회로를 제공하는 데, 여기서, 데이터 벡터는 데이터 벡터 처리 순서를 가지며, 각각의 데이터 벡터는 데이터 항목 순서를 가지는 복수의 데이터 항목을 포함하며, 상기 처리 회로는 프로그램 명령을 디코딩하는 명령 디코더 회로와; 상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하며, 상기 명령 디코더 회로는 명령 처리 회로를 제어하는 명령에 응답하여 후술되는 기능을 수행한다.
도 2는 데이터를 다중 데이터 벡터로서 처리하는 것을 개략적으로 예시한다. 이 구성에서, 데이터 항목(100)의 세트는 처리 순서(110)로 처리되도록 의도된 것이다. 데이터 항목(100)은 실제 벡터 처리 연산에서 단일 벡터 처리 명령이 데이터 벡터 내의 데이터 항목 모두(예, 4 데이터 항목, 8 데이터 항목, 또는 특정 시스템의 벡터 길이가 어떤 값이든지)에 동시에 적용되도록 연속적인 데이터 벡터(120)로서 취급된다.
다시 말해, 각각의 데이터 벡터(120)는 데이터 항목 처리 순서(130)를 보유하고, 벡터로부터 벡터까지 벡터 처리 순서(140)가 존재하므로, 처리 중에 원래 처리 순서(110)에 대한 어떤 참조가 요구되면, 이것은 벡터 처리 순서(140)의 데이터 벡터를 고려하고 데이터 항목 처리 순서(130)의 데이터 벡터를 고려하는 것에 의해 달성될 수 있다. 이러한 고려 사항은 하기에 논의되는 바와 같이 (적어도) 루프 처리의 종료에 관련된다.
도 3은 벡터 처리 구성에서 루프화된 동작을 나타낸 개략적인 흐름도이다. 200 단계에서, 초기 파라미터가 확립된다. 이것의 단순한 예는 루프 제어 변수가 예컨대, 스칼라 처리 회로(80)의 연산에 의해 제로와 같은 초기 값으로 설정된다.
210 단계에서, 현재 데이터 벡터에 대해 하나 이상의 처리 연산이 수행된다. 현재 데이터 벡터는 예컨대, 메모리에 저장된 데이터(32)의 인접 블록에 대해 다음과 같이 정의될 수 있다,
벡터A = 데이터[SA+i,...,SA+i+VL-1]
여기서, 변수(i)는 루프 제어 변수이고, 변수(SA)는 데이터의 인접 블록의 시작 어드레스이고, 변수(VL)는 사용 중 특정 처리 시스템에 적용 가능한 벡터 길이이다. 다시 말해, 상기 예에서, 다음 양측의 어드레스를 포함하여 (SA+i) 어드레스와 (SA+i+VL-1) 어드레스 사이의 인접한 그룹의 데이터 항목들은 벡터(벡터A)의 VL 데이터 항목을 형성한다.
이것은 루프 제어(또는 카운터) 변수가 데이터의 블록 또는 어레이 내의 또는 (집합된 구성으로 하기 논의되는 바와 같이) 포인터들의 블록 또는 어레이 내의 데이터 벡터의 위치(예, 시작 위치)를 정의한다는 점에서 예시적인 데이터 벡터(벡터A)가 적어도 부분적으로 루프 제어(또는 카운터) 변수에 의존하는 예를 제공한다.
다른 예에서, 데이터 벡터를 구분하거나 채우기 위해 메모리 내의 2곳 이상의 비-인접 위치에 포인터들의 세트가 제공되는 소위 집합된 데이터 벡터가 사용될 수 있다. 유사하게, 데이터 벡터를 다시 주 메모리에 기록할 때, 데이터 항목이 다시 비-인접 메모리 위치에 기록되도록 소위 분산 처리가 이용될 수 있다. 이러한 방식은 여기에 설명되는 처리들이 동작되는 방식에 영향을 미치지 않으며, 본 설명의 목적상 연속하는 데이터 세트(인접 저장되거나 그렇지 않든간에)가 취해진다. 그러나, 메모리에 대한 불필요한 수집 또는 분산 작업을 피하기 위해 불활성 술어 플래그(후술됨)를 사용하는 것은 벡터 처리 연산의 처리 오버헤드를 감소시킬 수 있음을 알아야 한다.
210 단계에서 여러 가지 다른 종류의 벡터 처리 연산(들)이 수행될 수 있다. 예를 들면, 벡터 처리 연산은 제2 데이터 벡터(벡터B)의 데이터 항목으로서 저장되는 결과를 발생시키도록 벡터A의 데이터 항목과 관련하여 수행될 수 있다.
220 단계에서, 루프 연산을 순방향으로 이동시키도록 카운터 또는 루프 제어 변수가 증가된다. 여기서, "증가"란 용어는 단지 1만큼의 증가만을 말하는 것이 아니며, 다른 값만큼의 증가를 말할 수 있다. 실제, 상기 예에서 루프 제어 변수는 예컨대 처리 회로에 의해 결정되는 바와 같이 술어 플래그에 의해 표현되는 벡터 길이(VL)만큼 증가된다.
230 단계에서, 시스템은 루프 연산을 계속할 지 여부, 즉 루프 제어 변수가 해당 루프에 의해 정의된 종단 포인트에 도달하였는 지 여부를 감지한다. 루프 연산이 계속되어야 한다면, 제어는 210 단계로 복귀한다. 다른 파라미터들도 220 단계에서 설정되며, 처리의 이 부분의 예가 아래에 논의된다. 그렇지 않으면, 처리는 종료된다.
루프 연산을 계속할 지 여부의 결정은 예컨대, 아래에 논의되는 WHILE 명령과 같은 명령의 실행에 기초한 하나 이상의 프로세서 상태 플래그(예, N, Z, C, V, 플래그)를 제외한 상태가 표시될 수 있는 프로그램 흐름(예, 210 단계로의 복귀)을 변화시키는 조건부 점프, 분기 또는 다른 명령의 형태로 취해질 수 있다. 따라서, WHILE 명령은 별도의(조건부 분기 또는 점프) 명령이 루프를 계속하는 프로그램 흐름을 실제 변화시킬 지 여부를 제어하는 하나 이상의 상태 플래그를 설정하는 결과를 가져온다. (그러나, 다른 예에서, WHILE 명령이 점프 또는 분기를 수행할 수 있는 것도 고려된다.)
벡터 처리 회로에 있어서 다른 유효 벡터 길이(VL)를 가질 수 있는 상이한 인스턴스에 의한 실행(재검파일링 처리 없이)을 위해 의도된 프로그램 명령의 경우, 명령이 실행되게 하는 벡터 처리 회로의 유효 길이(VL)가 어떤 값인가에 따라 동작되는 루프화된 연산을 제어하기 위한 구성을 제공하는 데 유용할 수 있다. (가상의 VL을 벡터 처리 회로의 상이한 인스턴스들 사이에서 부딪칠 수 있는 최소 레벨로 고정할 수 있는 대안예는 일부의 인스턴스에 유용한 긴 벡터 길이를 사용하지 않는 것에 의해 비효율적일 수 있다) 여기에 논의되는 예시적인 구성에서는 루프 연산을 제어하기 위해 스칼라 연산을 이용하기보다는 술어 플래그(후술됨)가 사용된다.
도 4는 벡터 처리 동작을 제어하기 위해 술어 플래그의 사용을 개략적으로 예시한다.
데이터 벡터 내의 상이한 데이터 항목에 대해 단일 벡터 처리 동작이 달리 적용되어야 하는 인스턴스가 존재할 수 있다. 벡터 처리 회로(60)는 소위 술어 플래그의 사용으로 이것을 제공한다. 술어 플래그는 처리 동작이 해당 데이터 항목 위치에 대해 수행되어야 할 지 여부를 지시하기 위해 데이터 벡ㅌ 내의 데이터 항목 위치마다 제공되는 플래그 정보를 포함한다. 예로써, 벡터 처리 회로(60)는 임의의 특정 벡터 처리 동작이 해당 벡터 처리 동작에 대한 파라미터로서 한 세트 이상의 술어 플래그를 참조할 수 있도록 다수의 세트의 술어 플래그에 접근할 수 있다.
도 4를 참조하면, 예시적인 구성은 4개의 데이터 항목(VL=4)으로 이루어진 데이터 벡터를 사용하고 있지만, 이들 구성은 다른 벡터 길이를 적용할 수 있음을 알 것이다. 예시적인 입력 데이터 벡터(250)(벡터A)는 벡터 처리 동작(260)의 대상이 될 수 있는 데, 그에 따라 술어 플래그에 의한 제어의 부재시, 벡터 처리 동작(260)은 각각의 데이터 항목 위치에 적용되게 된다. 그러나, 데이터 항목 위치 또는 "레인(lane)"마다 하나씩인 술어 플래그(270)의 세트도 역시 벡터 처리 동작의 제어를 위해 제공된다.
입력 벡터(벡터A)의 데이터 항목(252)은 출력 데이터 벡터(280)(벡터B)의 데이터 항목(282)을 생성하도록 벡터 처리 동작(260)에 따라 처리된다. 출력 데이터 벡터(28) 내의 데이터 항목 위치에 대응하는 술어 플래그(272)가 "활성"(예, 1의 값)으로 설정되면, 해당 위치에 대한 동작이 수행된다. 출력 벡터 위치에 대응하는 술어 플래그가 "비활성"(예, 0의 값)으로 설정되면, 해당 출력 벡터 위치에 대한 벡터 처리 동작(260)은 수행되지 않는다.
전술한 바와 같이, 상기 예에서, 술어 플래그는 출력 데이터 벡터(280)에 대한 특정 출력 위치 또는 "레인"의 벡터 처리 동작의 수행 여부를 제어한다. 그러나, 다른 예에서, 술어 플래그는 입력 벡터(또는 하나 이상의 입력 벡터)(250) 내의 데이터 항목 위치의 사용 여부를 제어하는 데 사용될 수 있다.
따라서, 이것은 벡터 처리 명령이 활성 상태의 술어 플래그에 대응하는 데이터 벡터의 해당 위치에 적용되어야 함을 나타내는 활성 상태를 가지는 술어 플래그의 예를 제공한다. 비활성 상태는 벡터 처리 동작이 그렇게 적용되지 않아야 함을 지시한다.
벡터 처리 동작이 비활성의 술어 플래그 때문에 특정 출력 벡터 위치(282)에 대해 수행되지 않으면, 일부의 경우, 0과 같은 고정값이 해당 출력 위치에 삽입될 수 있다. 다른 예에서, 무엇이든지 출력 위치의 이전 콘텐츠는 불변 상태로 남겨질 수 있다.
따라서, 이 방식의 술어 플래그의 사용은 데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 해당 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 명령을 적용하는 예를 제공한다.
상기 예들은 예컨대 도 3에 개략적으로 예시된 것과 같은 루프화된 동작의 제어로 술어 플래그의 사용을 허용한다. 도 5 및 도 6은 이러한 유형의 동작의 양태를 설명하는 데 사용될 것이다.
루프화된 동작의 특징은 루프 제어 변수가, 루프가 도 3의 230 단계에서 종료되는 지점인, 특정 상한에 도달할 때까지, 다수의 데이터 항목이 루프 제어 변수의 제어 하에 데이터 항목 처리 순서로 처리되는 것이다. 스칼라 처리 루프의 예가 다음의 개략적인 의사 코드에 의해 제공된다,
Figure pct00001
여기서, 루프화된 동작은 0으로 설정된 루프 제어 변수(i)로 시작하여 루프 제어 변수(i)가 97의 값에 도달하기까지 계속된다. 다시 말해, 총 98개의 데이터 항목이 처리된다.
이 대신, 루프 동작은 도 3을 참조로 논의된 바와 같은 벡터 처리를 이용하여 수행될 수 있는 데, 그에 따라 데이터 항목은 한 번에 하나의 벡터가 처리된다.
예를 들면, 벡터 길이(VL)가 4여서 각각의 데이터 벡터가 4개의 데이터 항목을 가지는 시스템의 경우, 루프 동작의 처음 96개 데이터 항목은 단지 24(=96/4)개이 벡터 처리 동작에 의해 처리될 수 있다. 그러나, 무려 25th 벡터의 4개의 데이터 항목이 처리되려면, 이것은 처리 데이터 항목의 수를 100까지 취하게 되는 데, 이는 요구되는 루프 동작을 초과하는 것이다.
대신에, 최종 벡터 처리 동작은 오직 97번째와 98번째 데이터 항목(처리 순서(110)에서)에 대해서만 동작되고 처리 순서(110)에서 99번째와 100번째 데이터 항목에 대해서는 동작되지 않는다.
예시적인 실시예는 예컨대 루프화된 동작에서, 적어도 부분적으로, 루프 제어 변수와 같은 제어 변수에 의해 정의되는 데이터 벡터의 하나 이상의 데이터 항목에 대해 벡터 처리 명령을 적용하도록 벡터 처리 회로(60)를 제어하는 WHILE 명령을 제공한다. WHILE 명령은 처리되는 데이터 항목의 수가 루프 상한을 초과하지 않도록 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상을 선택하도록 제어 변수에 응답한다.
이러한 구성의 사용의 예가 도 5에 예시되며, 도 5는 전술한 예시적인 루프 동작에서 처리될 마지막 3개의 데이터 벡터를 개략적으로 나타내는 데, 여기서 (순전히 상기 예의 목적으로) 98개 데이터 항목이 처리될 것이며, VL=4이다.
전술한 바와 같이, 98 데이터 항목의 예시적인 루프에서, 데이터 항목은 한 번에 하나의 데이터 벡터가 처리되며, 상기 예에서 데이터 벡터 길이(VL)를 4 데이터 항목으로 하면, 루프 카운터는 0에서 시작하여 (VL)의 단위(0, 4, 8, 12,,,,)로 증가한다. 이 방식으로 증가하는 루프 카운터의 최종 3개의 인스턴스에 대한 상황이 도 5에 개략적으로 예시되는 데, 즉 루프 카운터가 88, 92 및 96으로 설정된다. 이들 상황 각각에 적용 가능한 술어 플래그(300, 310, 320)가 예시되는 데, 여기서 논리값 1은 "활성"을 나타내며 논리값 0은 "비활성"을 나타낸다.
술어 플래그는 각각의 데이터 벡터의 데이터 항목 처리 순서(130)에 대응하는 술어 플래그들의 미리 정해진 순서에 따라 WHILE 명령에 의해 설정된다.
i=88인 경우, WHILE 명령은 모두 4개의 술어 플래그가 1(활성)로 설정될 수 있고 이들 술어 플래그를 1로 설정한 결과로서 처리되는 데이터 항목의 총수가 여전히 97의 루프 상한 미만임을 감지한다. 유사하게, i가 92로 증가되면, WHILE 명령은 모두 4개의 술어 플래그(310)가 1로 설정될 수 있고 여전히 해당 데이터 벡터의 처리의 종료시 처리되는 데이터 항목의 수(96)가 여전히 98의 총 요구수 미만이 됨을 감지한다.
도 5의 제3 인스턴스에서, 루프 제어 변수(i)는 96으로 설정된다. WHILE 명령은 97의 루프 상한을 지키기 위해 루프의 해당 최종의 벡터 처리 동작으로 처리될 데이터 항목이 오직 2개 존재함을 감지한다. 따라서, WHILE 명령은 처음 2개의 술러 플래그(처리 순서(130)에서)를 1로 설정하고 나머지 2개의 술어 플래그(순서(130)에서)를 0으로 설정함으로써 210 단계에서의 처리 동작은 해당 술어 플래그에 따라 수행될 수 있고 루프 제어 변수(i)의 상한에 의해 정해진 동작의 총수를 여전히 초과하지 않을 수 있다.
이러한 동작의 일부로서, WHILE 명령은 230 단계의 기능의 적어도 일부를 역시 제공하여, 수행될 처리 동작이 여전히 존재하는 한 제어의 패싱을 도 3의 210 단계로 복귀 제어하도록 하나 이상의 조건 플래그를 설정하는 데, 이는 다시 말해 220 단계에서 WHILE 명령으로 통과된 i의 값이 루프 제어 변수 상한(해당 예에서는 97)보다 작다.
따라서, 이것은, 실행시 활성 상태로의 설정을 위해 술어 플래그 중 하나 이상의 선택하되, 그 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 고려한 제어 변수의 값이 연산 조건을 위배하지 않도록, 선택하는 WHILE 명령의 예를 제공한다. 여기서, "고려한다"는 표현은 증가 카운터의 경우, 현재의 카운터 값에 대해 더하는 것을 의미하고, 감소 카운터의 경우, 현재 카운터 값으로부터 빼는 것을 의미한다. 활성 상태로의 설정을 위한 술어 플래그 중 하나 이상은 예컨대 순서(130)와 같은 술어 플래그의 미리 정해진 순서에 따라 선택될 수 있다.
도 6은 카운터 변수에 따른 WHILE 명령에 의한 술어 플래그의 설정을 나타낸 개략적인 흐름도이다.
도 6에서, 330 단계에서, WHILE 명령은 현재 카운터(루프 제어 변수) 값과 한계 값(해당 예에서는 각각 i와 97)를 감지한다. 340 단계에서, WHILE 명령은 루프 제어 변수의 값과 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 더한 값이 루프 제어 변수의 상한을 위배하지 않도록 술어 플래그를 형성한다.
물론, 다른 예에서 루프 제어 변수는 위로보다는 아래로 카운트될 수 있는 데, 이 경우, 한계값은 상한값보다는 하한값이 될 것임을 알 것이다. 유사하게, WHILE 명령에 의해 340 단계에서 적용된 연산 테스트는 제어 변수가 하한값보다 큰지 여부에 대한 테스트가 된다. 또한, 루프화된 동작이 한계값에 못미쳐 하나의 인스턴스가 종료하도록 예컨대, "이하(less than or equal to)" 또는 "이상(greater than or equal to)" 테스트가 적용될 수 있음을 알 것이다. 일반적으로, WHILE 명령에 의해 적용되는 연산 조건은 하기에 열거된 리스트로부터 선택된 조건일 수 있다,
- 제어 변수가 상한값보다 작고;
- 제어 변수가 하한값보다 크고;
- 제어 변수가 상한값 이하이고;
- 제어 변수가 하한값 이상임.
도 7은 소위 "전개된(unrolled)" 루프를 개략적으로 예시한다.
전개가 없는 경우, 루프화된 동작의 각각의 반복은 단일 데이터 벡터만큼의 처리를 수행한다. 그러면, 루프는 다음 루프 위치로 전진하고, 다음 데이터 벡터만큼의 처리가 수행되고, 이러한 방식이 반복된다.
루프의 "전개"는 단일 루프 반복 내에서 다중의 연속 데이터 벡터를 처리하는 것을 포함한다. 루프 전개는 예컨대, 루프의 각각의 반복을 개시 및 종료시 포함되는 처리 오버헤드가 다중 데이터 벡터의 처리 사이에 공유된다는 점에서 효율을 향상시키기 위해 수행된다.
도 7에서, 데이터 처리 순서(410)를 가지고 처리될 데이터(400)는 각각 벡터 길이(VL)를 가지는 다중 데이터 벡터 내로의 루프 처리의 목적으로 배열된다. 보여진 예에서, VL은 4이지만, 사용 중 벡터 처리 회로(60)의 파라미터에 따라 다른 값이 적용될 수 있다.
동작은 다중 데이터 벡터가 각각의 루프 반복에서 처리되는 것을 제외하고, 도 3을 참조로 설명된 것과 유사하다. 따라서, 420 단계에서, 초기 파라미터는 도 3의 200 단계와 유사한 방식으로 설정된다. 예를 들면, 루프 제어 변수 또는 카운터가 0으로 초기화된다. 이후, 430, 440, 450, 460 단계에서, 다중의 연속 데이터 벡터가 동일한 처리를 받게 된다. 430 단계는 루프 제어 변수(i)에 의해 정해진 데이터(400) 내의 시작 위치를 가지는 데이터 벡터를 처리하는 것을 포함한다. 440 단계는 동일한 처리를 i+VL 등등으로 정해진 데이터(400) 내의 시작 위치를 가지는 데이터 벡터에 적용한다. 루프의 각각의 반복시 처리되는 데이터 벡터의 수는 2이상의 임의의 수일 수 있으며, 해당 예에서 4개의 데이터 벡터의 사용은 단지 이것을 설명하기 위한 목적일 뿐임을 알 것이다. 470 단계에서, 루프 제어 변수(i)는 n×(VL)만큼 증가되는 데, 여기서 n은 전개된 루프의 각각의 반복시 처리되는 데이터 벡터의 수이다. 480 단계에서, WHILE 명령은 파라미터(도 5 및 도 6과 관련하여 설명된 바와 같은 술어 플래그)를 설정하고 루프를 계속할 지 또는 루프를 계속하지 않을 지에 대해 하나 이상의 조건 플래그를 설정할 지 여부를 감지한다. 루프가 계속되면, 제어는 다시 430 단계로 통과되며(예, 조건 플래그와 같은 플래그를 설정하는 WHILE 명령과 해당 조건에 응답하는 조건부 접프 또는 분기에 의해), 루프가 계속되지 않으면, 처리는 종료 절차를 따른다.
도 3 및 도 7의 흐름도는, 도 5 및 도 6의 설명을 함께 판독시, (예컨대, 디코더 회로(50)에 의한) 명령의 디코딩 및 실행의 예를 제공하는 데, WHILE 명령을 디코딩하여(논의된 바와 같이, 230, 480 단계에서), 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록 벡터 프로세서를 제어하며; 관련 포화값을 가지는 CHANGE 명령을 디코딩하여, CHANGE 명령의 실행으로 상기 포화값을 넘지 않게 제어 변수의 값을 변화시키도록, 술어 플래그의 수에 따른 양만큼 제어 변수의 값을 변화시키며(예, 220 단계와 470 단계에서); (예, 벡터 처리 회로(60) 및/또는 스칼라 처리 회로(80)에 의해) 명령 디코더에 의해 디코딩된 명령을 실행시킨다.
230 및 480 단계는 실행시, 예컨대 전술한 바와 같이 하나 이상의 조건 플래그를 설정하는 것에 의해 제어 변수에 연산 조건이 적용되는 동안 프로세서가 처리 루프의 반복적 실행을 계속하게 하는 WHILE 명형의 예를 제공한다.
도 8 및 도 9는 카운터 변수로 나타낼 수 있는 값을 개략적으로 예시한다. 도 8의 경우, 카운터 변수는 -VAL의 하한과 +VAL의 상한 사이의 값으로 나타낼 수 있는 부호화된 변수이다. 도 9의 경우, 카운터 변수는 0과 +VAL의 상한 사이의 값으로 나타낼 수 있는 부호화되지 않은 변수이다. 도 8의 경우 상한 및 하한은 하한이 -VAL1이고 상한이 +VAL2인 다른 크기를 가질 수 있음에 유의하여야 한다(여기서 │VAL1│과 │VAL2│은 상이하다(│x│은 x의 계수 또는 크기이다)). 예를 들면, 8-비트의 부호화된 2개의 상보적 표현에서, -VAL1은 -127일 수 있고, +VAL2는 +128일 수 있다. 유사하게, 도 9에서 +VAL의 상한은 도 8의 +VAL의 상한과 반드시 동일한 것은 아니다. 그러나, 어떤 경우든, 예시되는 원리는 카운터 변수의 특성이 나타낼 수 있는 값의 하한 및 상한으로 표시될 수 있다는 것이다.
도 10 및 도 11은 각각 증가 및 감소 명령의 동작을 나타낸 개략적인 흐름도이다.
도 10을 참조하면, 500 단계에서, 증가 명령은 MUL인수로 곱한 패턴(하기에 추가로 설명됨)에 따른 양만큼 루프 제어 변수와 같은 변수를 증가시키는 데, 여기서 전개된 루프의 470 단계 등의 단계에서의 이러한 명령의 사용의 예에서 MUL의 값은 루프의 하나의 반복시 처리되는 연속 데이터 벡터의 수로 설정될 수 있다.
510 단계에서, 증가 명령은 변수로 나타낼 수 있는 최고값에서 포화된다. 포화 단계는 다음과 관계된다. 500 단계의 결과가 여전히 해당 변수로 나타낼 수 있는 최고값(예, +VAL)보다 낮으면, 500 단계의 출력은 증가 명령의 결과로서 복귀된다. 다른 한편, 500 단계의 출력이 (예컨대) 변수가 주변값을 가지거나)(해당 변수에 유효한 비트의 수를 초과) 다른 극단의 표시 값으로부터 재시작하게 되도록 상기 변수로 나타낼 수 있는 최고값을 초과하게 되면, 510 단계는 명령의 실행에 의해 돌아오는 출력으로서 최고의 표시 값(예, +VAL)이 도달하지 않지만 그 최고값을 초과하지 않도록 포화되거나 증가가 한정된다.
포화(470 단계에서와 같이 MUL 인수를 사용하든, 또는 220 단계에서와 같이 사용하지 않든지 간에)는 WHILE 또는 유사한 동작 또는 명령이 230 또는 480 단계에 적용되어 루프 제어 변수 또는 카운터가 연산 조건에 부합되면 루프가 계속적으로 실행되게 하는 경우와 관련될 수 있다. 상한을 가지는 카운터를 상향 카운팅하는 예에서, 연산 조건은 예컨대, 카운터 값이 특정 상한값 미만(또는 이하)인지 여부일 수 있다. 그러나, 포화 특성이 사용되지 않으면, 카운터가 카운터 변수로 나타낼 수 있는 최대값을 넘어서 "주변값을 가지거나(wrap around)" 카운터 변수로 나타낼 수 있는 최저값(또는 다른 값)에서 재시작하게 되는 잠재적인 위험이 존재한다. 카운터는 VL의 단위로 증가하므로, WHILE 연산 테스트는 하나의 루프 반복시 (정확히) 통과될 수 있고, 이후 다음의 이러한 테스트를 위해 카운터는 주변값을 가질 수 있어서 테스트는 다음의 반복시 (부정확하게) 통과되게 된다.
사용례로서, 카운터 변수가 단순 8비트 비부호 값으로서 유지되면, 포화 특성 없이도 카운터는 0으로부터 상향 카운팅을 계속하기 전에 255의 최대 카운트에 도달할 수 있다. MUL×VL이 8이고, 따라서 카운터는 8의 단위로 증가하고, 루프의 종단은 i=253으로 정해지는 것으로 가정한다. 그러면 (말하자면) 주변값(0 또는 0의 근사치)의 값이 테스트를 통과하게 되므로 230 단계 또는 480 단계에서의 "미만" 테스트의 사용은 운용되지 않게 되는 반면, 카운터가 i=248에서 테스트를 통과하게 되지만 다음의 반복(i)에서는 다시 0의 주변값이 되어 "미만" 테스트를 다시 (부정확하게) 통과하게 되므로 테스트는 불합격되었어야 한다. 포화 특성은 카운터가 최종 반복시 255에서 포화되게 하므로, 카운터(i)는 "253 미만" 테스트를 (정확하게) 불합격하게 된다.
포화값은 카운터 변수가 저장되어 유지되는 방식의 특성임에 유의하라. 루프화된 동작의 인스턴스에 의해 카운터 변수에 부과된 특정 한계와 동일하지 않다.
"패턴" 파라미터를 이제 설명한다. 이것은 유효 술어 플래그의 수에 따른 변화량을 제공하는 데, 이는 다시 벡터 길이에 따라 자동으로 비율 조절되는 구성을 제공함으로써 동일한 프로그램 명령이 다른 유효 벡터 길이를 가지는 벡터 처리 회로의 인스턴스에 의해 재컴파일링의 개입을 반드시 요하지 않고 실행되도록 하는 데 기여한다.
"변화" 명령은 220 단계 또는 470 단계와 같은 상황에 사용시 적어도 승수 인수 MUL(1일 수 있거나 1보다 클 수 있는, 예컨대 1...8과 같이 3-비트 파라미터로 나타낼 수 있는 값일 수 있다)에 따른 양만큼 변수를 변화(증가 또는 감소)시킨다. 변화(증가 또는 감소)량은 (예컨대 벡터 처리 회로에 의해 감지되는) VL의 표시로서 술어 플래그의 수에 의존할 수도 있다. 예를 들면, 적절한 변화는 각각의 술어 플래그가 데이터 항목에 대응하는 경우 MUL×VL에 의한 것일 수 있다. 그러나, 다른 예에서, 개별 데이터 항목은 첫 번째 예에서의 2배일 수 있으므로(예, 바이트 대신에 반-단어(half-word)) 오직 하나 건너 하나의 술어 플래그만이 유효하게 사용되어 진다. 이러한 경우, VL의 유효값은 술어 플래그의 수의 절반일 수 있는 데, 이 경우 변화량은 [(MUL×(술어 플래그의 수))/2]가 되어야 한다.
CHANGE 명령은 패턴에 따라 술어 플래그의 수를 감지하고 해당 수만큼 변수를 증가 또는 감소시킨다. 패턴은 예컨대 교번하는 술어 플래그, 매 4번째의 술어 플래그, 또는 "모든 술어 플래그"의 디폴트를 가지는 다양한 다른 패턴일 수 있다. 이 구성은 변화량이 명령이 구동되는 시스템에 유효한 술어 플래그의 수에 의존하는 자기-조절 증가 또는 감소 명령을 제공한다. 다시 말해, 이것은 증가 또는 감소 명령이 현재 유효한 벡터 길이로 조절될 것이므로 상이한 유효 벡터 길이를 가지는 상이한 시스템에 대해 동일한 명령이 사용될 수 있음을 의미한다.
따라서, 이것은 실행시 선택된 부분 조합의 술어 플래그의 수와 수정치에 따른 양만큼 변수의 값을 변화시키는 CHANGE 명령의 예를 제공한다. 언급한 바와 같이 상기 부분 조합은 실제 "전체"일 수 있음에 유의하라. 선택된 부분 조합은 명령의 파라미터에 의존하고, 사용되는 부분 조합의 감지는 명령의 다른 측면을 실행하는 동일한 처리 회로, 구성 또는 리소스에 의한 명령의 실행의 일부이다.
도 11은, 520 단계에서 루프 제어 변수와 같은 변수가 패턴량과 MUL 인수의 곱(product)(또는 다른 조합)만큼 감소되고, 530 단계에서 결과가 해당 변수로 나타낼 수 있는 최저값으서 포화되거나 다시 말해 해당 변수로 나타낼 수 있는 최저량에 도달하지만 해당 최저량 미만으로는 가지 않게 하는 감소 명령의 유사한 동작을 나타낸 개략적인 흐름도이다.
카운터(l)는 스칼라 변수이므로 스칼라 처리 회로(80)에 의해 처리되거나(갱신되거나 테스트됨), 데이터 벡터 또는 데이터 벡터의 일부로서 처리될 수 있어서 벡터 처리 회로(60)에 의해 처리될 수 있음에 유의하라.
따라서, 도 10 및 도 11은 명령 파라미터로서 수정치(예, MUL)를 가지는 "변화" 명령의 실행의 예를 제공하는 데, 여기서 CHANGE 명령은 술어 플래그의 수와 수정치에 따른 양만큼 변수의 값을 변화시킨다. 예를 들면, 연속적인 변화 또는 스텝 크기는 수정치에 비례할 수 있다.
도 1의 장치는 도 10 또는 도 11의 흐름도에 예시된 것에 대응하는 동작을 실행시 다음의 구성을 가지는 예시적인 데이터 처리 장치(예, 장치(10))를 제공하는 데, 해당 데이터 처리 장치는, 데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하는 벡터 처리 회로(예, 레지스터(70)와 협력 동작하는 회로(60))와; 명령 파라미터로서 수정치(예, MUL)를 가지는 한편, 실행시, 술어 플래그의 수와 수정치에 따른 양만큼 변수(예, 루프 제어 변수)의 값을 변화시키는, CHANGE 명령(예, 도 10 또는 도 11의 흐름도에 의해 나타낸)을 디코딩하는 명령 디코더(예, 디코더 회로(50))와; 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서(예, 스칼라 처리 회로(80) 또는 벡터 처리 회로(60))를 포함한다. 예를 들면, CHANGE 명령은 실행시 술어 플래그의 수에 따른 값과 수정치의 곱에 따른 양만큼 변수의 값을 변화시킬 수 있다.
510 단계, 530 단계를 참조로 논의된 바와 같이, CHANGE 명령은 관련 포화값을 가질 수 있으므로, CHANGE 명령은 실행시 포화값을 넘지 않게 변수의 값을 변화시킨다. 도 8 및 도 8를 참조로 논의된 바와 같이, 변수의 값을 감소시키는 감소 명령의 경우, 포화값은 변수로 나타낼 수 있는 최소값일 수 있다. 변수의 값을 증가시키는 증가 명령의 경우, 포화값은 변수로 나타낼 수 있는 최대값일 수 있다.
이러한 명령이, 예컨대, 변수가 카운터 변수이고, 벡터 처리 회로는 처리 루프의 1회 이상의 반복 중에 적어도 부분적으로 상기 카운터 변수에 의해 정해진 데이터 벡터에 대해 벡터 처리 명령을 적용하는, 도 7의 루프화된 동작의 470 단계에 대해 사용되는 경우, 명령 디코더는 상기 카운터 변수에 따라 처리 루프의 실행을 반복적으로 계속할 지 여부를 감지하도록 명령을 디코딩하도록(예, 480 단계에 대응) 구성될 수 있다. 이러한 명령은 예컨대, 카운터 변수에 연산 조건이 적용되는 동안 처리 루프의 반복적인 실행을 계속하도록 처리 회로를 제어하도록 조건 플래그를 설정하는 WHILE 명령일 수 있다. 연산 조건의 예는, 제어 변수가 상한값 미만; 제어 변수가 하한값 초과; 제어 변수가 상한값 이하; 제어 변수가 하한값 이상;을 포함한다.
도 12는 상기 논의된 기능의 일부 또는 전부가 제ㅔ공되는 가상 머신을 개략적으로 예시한다. 가상 머신은 데이터 처리 회로(800)의 예로서 중앙 처리 유닛(CPU), 비휘발성 메모리(810), 제어 인터페이스(820) 및 입/출력(I/O) 인터페이스(830)를 포함하며, 이들 모두는 버스 구성(840)에 의해 상호 접속된다. 램던 액세스 메모리(RAM)(850)는 CPU(800)의 동작을 제어하는 소프트웨어(860)를 제공하는 프로그램 명령을 저장한다. 소프트웨어(860)의 제어하에, CPU(800)는 전술한 처리 명령 중 하나 이상의 기능을 제공하거나 에뮬레이트한다. RAM(850)은 프로그램 명령(870)과 데이터(880)도 역시 저장하는 데, 프로그램 명령(870)은 도 1의 프로세서(20)에 적용 가능하고 가상 머신으로서 작용하는 CPU(800)에 의해 해석, 에뮬레이트 또는 그렇지 않으면 실행되는 명령이다. 데이터(880)는 프로그램 명령(870)의 (가상) 실행에 의해 영향을 받는 도 1의 데이터(32)에 대응하는 데이터이다. 따라서, 도 19의 구성은, 데이터 프로세서가 전술한 유형의 데이터 처리 장치로서 동작되게 하도록, 머신 판독 가능 명령(예, 스프트웨어(860))을 가지는 컴퓨터 프로그램을 실행시키는 데이터 프로세서(예, CPU(800))를 포함하는 가상 머신의 예를 제공한다. 예시적인 실시예는 컴퓨터에 의해 실행시 컴퓨터가 전술한 기술 중 하나 이상을 수행토록 하는 컴퓨터 소프트웨어와 이러한 컴퓨터 소프트웨어를 저장하는 비일시적 머신 판독 가능 저장 매체로도 표현된다.
본 출원에서 "하도록 구성된"이란 표현은 장치의 요소가 상기 정해진 동작을 수행할 수 있는 구성을 가진다는 것을 의미하는 데 사용된다. 이 점에서, "구성"은 하드웨어 또는 소프트웨어의 상호 접속의 구성 또는 방식을 의미한다. 예를 들면, 장치는 정해진 동작을 제공하는 전용 하드웨어를 가질 수 있으며, 그렇지 않으면 프로세서 또는 처리 장치가 그 기능을 수행하도록 프로그램밍될 수 있다. "하도록 구성된"의 표현은 장치 요소가 정해진 동작을 제공하기 위해 어떤 방식으로든 변화되는 것이 필요함을 의미하지 않는다.
본 기술의 예시적인 실시예들을 첨부 도면을 참조로 여기에 상세히 설명하였지만, 본 기술은 해당 구체적인 실시예에 한정되지 않으며 첨부된 청구범위에 의해 정의되는 범위 및 요지를 벗어나지 않고 당업자에 의해 해당 실시예에 대해 다양한 변화, 추가 및 변형을 행할 수 있음을 알아야 한다. 예를 들면, 본 기술의 범위를 벗어나지 않고 독립 청구항의 특징부들과 종속 청구항의 특징부들을 다양하게 조합할 수 있다.

Claims (30)

  1. 데이터 처리 장치로서,
    명령을 디코딩하는 명령 디코더 회로와;
    상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
    상기 명령 디코더 회로는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 명령 처리 회로를 제어하며,
    상기 명령 디코더 회로는 CHANGE 명령에 응답하여, 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 상기 포화값에 따라, 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  2. 제1항에 있어서,
    상기 연산 조건은,
    i. 상기 제어 변수가 상한값 미만;
    ii. 상기 제어 변수가 하한값 초과;
    iii. 상기 제어 변수가 상한값 이하;
    iv. 상기 제어 변수가 하한값 이상으로 이루어진 리스트로부터 선택된 데이터 처리 장치.
  3. 제1항 또는 제2항에 있어서,
    상기 술어 플래그는 상기 벡터 처리 명령이 활성 상태의 술어 플래그에 대응하는 데이터 벡터의 위치에 적용되어야 함을 나타내는 활성 상태를 가지는 데이터 처리 장치.
  4. 제3항에 있어서,
    상기 명령 디코더 회로는 상기 WHILE 명령에 응답하여, 상기 활성 상태로의 설정을 위해 상기 술어 플래그 중 하나 이상을 선택하되, 상기 활성 상태로의 설정을 위해 선택된 술어 플래그의 수를 고려한 상기 제어 변수의 값이 상기 연산 조건을 위배하지 않도록, 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  5. 제4항에 있어서,
    상기 명령 디코더 회로는 상기 WHILE 명령에 응답하여, 상기 술어 플래그의 미리 정해진 순서에 따라 상기 활성 상태로의 설정을 위해 상기 술어 플래그 중 하나 이상을 선택하도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 명령 디코더 회로는 상기 WHILE 명형에 응답하여, 상기 제어 변수에 연산 조건이 적용되는 동안 처리 루프의 반복 실행을 계속하도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 명령 디코더 회로는 상기 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 CHANGE 명령의 파라미터를 형성하는 수정치에 따른 양만큼 상기 제어 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 CHANGE 명령은 상기 제어 변수의 값을 감소시키는 감소 명령이고;
    상기 포화값은 상기 제어 변수로 나타낼 수 있는 최소값인 데이터 처리 장치.
  9. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 CHANGE 명령은 상기 제어 변수의 값을 증가시키는 증가 명령이고;
    상기 포화값은 상기 제어 변수로 나타낼 수 있는 최대값인 데이터 처리 장치.
  10. 데이터 처리 장치로서,
    명령을 디코딩하는 명령 디코딩 수단과;
    상기 명령 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
    상기 디코딩 수단은 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 수단을 제어하며;
    상기 디코딩 수단은 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록 동작 가능하게, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 수단을 제어하는 데이터 처리 장치.
  11. 데이터 처리 방법으로서,
    명령을 디코딩하는 디코딩 단계와;
    상기 디코딩 단계에 의해 디코딩된 명령을 실행하는 실행 단계를 포함하고,
    상기 디코딩 단계는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 내부의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 위치와 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 명령을 적용하도록, 상기 실행 단계를 제어하며;
    상기 디코딩 단계는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행으로 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 실행 단계를 제어하는 데이터 처리 방법.
  12. 컴퓨터에 의해 실행시, 상기 컴퓨터가 제11항의 방법을 수행하도록 하는 컴퓨터 소프트웨어.
  13. 제12항에 따른 컴퓨터 소프트웨어를 저장하는 비일시적 머신 판독 가능 저장 매체.
  14. 가상 머신으로서,
    머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
    명령을 디코딩하는 명령 디코더와;
    상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
    상기 명령 디코더는 WHILE 명령에 응답하여, 적어도 부분적으로 제어 변수에 의해 정의되는 한편, 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해, 상기 제어 변수에 연산 조건이 적용되는 동안, 상기 복수의 데이터 항목과 관련된 개별 술어 플래그의 상태에 따라, 벡터 처리 연산을 적용하도록, 상기 명령 프로세서를 제어하며;
    상기 명령 디코더는 관련 포화값을 가지는 CHANGE 명령에 응답하여, 상기 CHANGE 명령의 실행시 상기 관련 포화값을 넘지 않게 상기 제어 변수의 값을 변화시키도록, 특정 상태로 현재 설정되는 상기 술어 플래그의 수에 따른 양만큼 상기 제어 변수의 값을 변화시키도록, 상기 명령 프로세서를 제어하는 가상 머신.
  15. 데이터 처리 장치로서,
    데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 처리 회로를 포함하고, 상기 처리 회로는,
    프로그램 명령을 디코딩하는 명령 디코더 회로와;
    상기 명령 디코더 회로에 의해 디코딩된 명령을 실행하는 명령 처리 회로를 포함하고,
    상기 명령 디코더 회로는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  16. 제15항에 있어서,
    상기 명령 디코더 회로는 상기 CHANGE 명령에 응답하여 상기 술어 플래그의 수에 따른 값과 상기 수정치의 곱에 따른 양만큼 상기 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  17. 제15항 또는 제16항에 있어서,
    상기 CHANGE 명령은 관련 포화값을 가지며, 상기 명령 디코더 회로는 상기 CHANGE 명령에 응답하여 상기 포화값을 넘지 않게 상기 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  18. 제17항에 있어서,
    상기 CHANGE 명령은 상기 변수의 값을 감소시키는 감소 명령이고;
    상기 포화값은 상기 변수로 나타낼 수 있는 최소값인 데이터 처리 장치.
  19. 제17항에 있어서,
    상기 CHANGE 명령은 상기 변수의 값을 증가시키는 증가 명령이고;
    상기 포화값은 상기 변수로 나타낼 수 있는 최대값인 데이터 처리 장치.
  20. 제15항 내지 제19항 중 어느 한 항에 있어서,
    상기 변수는 카운터 변수이고, 상기 처리 회로는 처리 루프의 1회 이상의 반복 중에 적어도 부분적으로 상기 카운터 변수에 의해 정해지는 데이터 벡터에 대해 상기 벡터 처리 명령을 적용하며;
    상기 명령 디코더 회로는 추가의 명령에 응답하여 상기 카운터 변수에 따라 상기 처리 루프를 계속 반복적으로 실행할 지 여부를 감지하도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  21. 제20항에 있어서,
    상기 처리 루프를 계속 실행하지 여부를 감지하는 상기 추가의 명령은 WHILE 명령을 포함하고, 상기 명령 디코더 회로는 상기 WHILE 명령에 응답하여 상기 카운터 변수에 연산 조건이 적용되는 동안 상기 처리 루프를 계속 반복적으로 실행하도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  22. 제21항에 있어서,
    상기 연산 조건은,
    i. 상기 카운터 변수가 상한값 미만;
    ii. 상기 카운터 변수가 하한값 초과;
    iii. 상기 카운터 변수가 상한값 이하;
    iv. 상기 카운터 변수가 하한값 이상으로 이루어진 리스트로부터 선택된 데이터 처리 장치.
  23. 제21항 또는 제22항에 있어서,
    상기 명령 디코더 회로는 상기 CHANGE 명령에 응답하여 상기 술어 플래그의 수의 선택된 부분 조합과 상기 수정치에 따른 양만큼 상기 변수의 값을 변화시키도록 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  24. 제23항에 있어서,
    상기 명령 디코더 회로는 상기 WHILE 명령에 응답하여, 상기 활성 상태로의 설정을 위해 상기 술어 플래그 중 하나 이상을 선택하되, 상기 활성 상태로의 설정을 위해 선택된 상기 술어 플래그의 수를 고려한 루프 변수의 값이 상기 연산 조건을 위배하지 않도록, 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  25. 제24항에 있어서,
    상기 명령 디코더 회로는 상기 WHILE 명령에 응답하여, 상기 술어 플래그의 미리 정해진 순서에 따라 상기 활성 상태로의 설정을 위해 상기 술어 플래그 중 하나 이상을 선택하되, 상기 활성 상태로의 설정을 위해 선택된 상기 술어 플래그의 수를 고려한 상기 루프 변수의 값이 상기 연산 조건을 위배하지 않도록, 상기 명령 처리 회로를 제어하는 데이터 처리 장치.
  26. 데이터 처리 장치로서,
    데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 적용 수단을 포함하고, 상기 적용 수단은,
    명령을 디코딩하는 명령 디코딩 수단과;
    상기 디코딩 수단에 의해 디코딩된 명령을 실행하는 명령 실행 수단을 포함하고,
    상기 명령 디코딩 수단은 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 실행 수단을 제어하는 데이터 처리 장치.
  27. 데이터 처리 방법으로서,
    데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 단계와;
    명령을 디코딩하는 단계와;
    명령을 실행하는 단계를 포함하고,
    상기 디코딩 단계는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 실행 단계를 제어하는 데이터 처리 방법.
  28. 컴퓨터에 의해 실행시, 상기 컴퓨터가 제27항의 방법을 수행하도록 하는 컴퓨터 소프트웨어.
  29. 제28항에 따른 컴퓨터 소프트웨어를 저장하는 비일시적 머신 판독 가능 저장 매체.
  30. 가상 머신으로서,
    머신 판독 가능 명령을 가지는 컴퓨터 프로그램을 실행하는 데이터 프로세서를 포함하고, 상기 컴퓨터 프로그램의 실행은 상기 데이터 프로세서가 데이터 처리 장치로서 동작하도록 하며, 상기 데이터 처리 장치는,
    데이터 벡터 내의 개별 위치에 복수의 데이터 항목을 가지는 데이터 벡터의 하나 이상의 데이터 항목에 대해 상기 위치와 관련된 개별 술어 플래그의 상태에 따라 벡터 처리 연산을 선택적으로 적용하는 프로세서를 포함하고, 상기 프로세서는,
    명령을 디코딩하는 명령 디코더와;
    상기 명령 디코더에 의해 디코딩된 명령을 실행하는 명령 프로세서를 포함하고,
    상기 명령 디코더는 명령 파라미터로서 수정치를 가지는 CHANGE 명령에 응답하여, 상기 술어 플래그의 수와 상기 수정치에 따른 양만큼 변수의 값을 변화시키도록 상기 명령 프로세서를 제어하는 가상 머신.
KR1020187004899A 2015-07-31 2016-07-28 동적 벡터 길이의 루프를 이용한 벡터 처리 KR20180034501A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020247013072A KR20240058195A (ko) 2015-07-31 2016-07-28 데이터 처리장치 및 데이터 처리방법

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP15386025.9 2015-07-31
EP15386025.9A EP3125108A1 (en) 2015-07-31 2015-07-31 Vector processing using loops of dynamic vector length
PCT/EP2016/068013 WO2017021269A1 (en) 2015-07-31 2016-07-28 Vector processing using loops of dynamic vector length

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020247013072A Division KR20240058195A (ko) 2015-07-31 2016-07-28 데이터 처리장치 및 데이터 처리방법

Publications (1)

Publication Number Publication Date
KR20180034501A true KR20180034501A (ko) 2018-04-04

Family

ID=54140381

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020247013072A KR20240058195A (ko) 2015-07-31 2016-07-28 데이터 처리장치 및 데이터 처리방법
KR1020187004899A KR20180034501A (ko) 2015-07-31 2016-07-28 동적 벡터 길이의 루프를 이용한 벡터 처리

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020247013072A KR20240058195A (ko) 2015-07-31 2016-07-28 데이터 처리장치 및 데이터 처리방법

Country Status (8)

Country Link
US (1) US10430192B2 (ko)
EP (2) EP3125108A1 (ko)
JP (1) JP6883564B2 (ko)
KR (2) KR20240058195A (ko)
CN (1) CN107851021B (ko)
IL (1) IL256859B (ko)
TW (1) TWI723036B (ko)
WO (1) WO2017021269A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
GB2571527B (en) * 2018-02-28 2020-09-16 Advanced Risc Mach Ltd Data processing
US10528346B2 (en) 2018-03-29 2020-01-07 Intel Corporation Instructions for fused multiply-add operations with variable precision input operands
WO2022154847A1 (en) 2021-01-12 2022-07-21 Emed Labs, Llc Health testing and diagnostics platform
US11929168B2 (en) 2021-05-24 2024-03-12 Emed Labs, Llc Systems, devices, and methods for diagnostic aid kit apparatus
US11615888B2 (en) 2021-03-23 2023-03-28 Emed Labs, Llc Remote diagnostic testing and treatment
GB2623461A (en) 2021-06-22 2024-04-17 Emed Labs Llc Systems, methods, and devices for non-human readable diagnostic tests
US12014829B2 (en) 2021-09-01 2024-06-18 Emed Labs, Llc Image processing and presentation techniques for enhanced proctoring sessions
GB2616601B (en) * 2022-03-11 2024-05-08 Advanced Risc Mach Ltd Sub-vector-supporting instruction for scalable vector instruction set architecture

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4745547A (en) * 1985-06-17 1988-05-17 International Business Machines Corp. Vector processing
IT1270439B (it) * 1993-06-10 1997-05-05 Sip Procedimento e dispositivo per la quantizzazione dei parametri spettrali in codificatori numerici della voce
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
WO2002084451A2 (en) * 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
US6976158B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Repeat instruction with interrupt
US7055021B2 (en) * 2002-02-05 2006-05-30 Sun Microsystems, Inc. Out-of-order processor that reduces mis-speculation using a replay scoreboard
US8370806B2 (en) * 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US7945763B2 (en) * 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US8345968B2 (en) * 2007-06-28 2013-01-01 Mitsubishi Electric Corporation Image encoding device, image decoding device, image encoding method and image decoding method
BR112012028576A2 (pt) * 2010-05-12 2016-08-02 Nippon Telegraph & Telephone método de controle de codificação de vídeo, aparelho de codificação de vídeo, e programa de codificação de vídeo
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
WO2013001770A1 (ja) * 2011-06-30 2013-01-03 パナソニック株式会社 画像復号方法、画像符号化方法、画像復号装置、画像符号化装置及び画像符号化復号装置
SE536462C2 (sv) * 2011-10-18 2013-11-26 Mediatek Sweden Ab Digital signalprocessor och basbandskommunikationsanordning
US20130151822A1 (en) * 2011-12-09 2013-06-13 International Business Machines Corporation Efficient Enqueuing of Values in SIMD Engines with Permute Unit
CN104115113B (zh) * 2011-12-14 2018-06-05 英特尔公司 用于循环剩余掩码指令的系统、装置和方法
US9122475B2 (en) * 2012-09-28 2015-09-01 Intel Corporation Instruction for shifting bits left with pulling ones into less significant bits
US9557993B2 (en) * 2012-10-23 2017-01-31 Analog Devices Global Processor architecture and method for simplifying programming single instruction, multiple data within a register
US9619229B2 (en) * 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
JP2014191757A (ja) * 2013-03-28 2014-10-06 Fujitsu Ltd 情報処理方法、装置及びプログラム
GB2540941B (en) * 2015-07-31 2017-11-15 Advanced Risc Mach Ltd Data processing

Also Published As

Publication number Publication date
EP3125108A1 (en) 2017-02-01
TWI723036B (zh) 2021-04-01
CN107851021A (zh) 2018-03-27
IL256859A (en) 2018-03-29
WO2017021269A1 (en) 2017-02-09
JP6883564B2 (ja) 2021-06-09
US20190012176A1 (en) 2019-01-10
KR20240058195A (ko) 2024-05-03
IL256859B (en) 2020-03-31
JP2018525735A (ja) 2018-09-06
EP3329365A1 (en) 2018-06-06
US10430192B2 (en) 2019-10-01
TW201716991A (zh) 2017-05-16
CN107851021B (zh) 2022-04-22

Similar Documents

Publication Publication Date Title
KR20180034501A (ko) 동적 벡터 길이의 루프를 이용한 벡터 처리
KR102628985B1 (ko) 벡터 데이터 전송 명령어
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
JP5611756B2 (ja) プログラム・フロー制御
TWI740851B (zh) 用於向量負載指示之資料處理設備、方法及電腦程式
KR102603377B1 (ko) 데이터 처리
KR20160065145A (ko) 데이터 처리장치 및 추론 벡터 연산의 수행 제어방법
TWI733746B (zh) 在運行時最佳化指令的處理器、由處理器在運行時最佳化指令的方法及非暫態機器可讀媒體
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
JP7377208B2 (ja) データ処理

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X601 Decision of rejection after re-examination