KR20230077251A - 벡터 연산을 위한 데이터 처리 방법 및 장치 - Google Patents

벡터 연산을 위한 데이터 처리 방법 및 장치 Download PDF

Info

Publication number
KR20230077251A
KR20230077251A KR1020210164316A KR20210164316A KR20230077251A KR 20230077251 A KR20230077251 A KR 20230077251A KR 1020210164316 A KR1020210164316 A KR 1020210164316A KR 20210164316 A KR20210164316 A KR 20210164316A KR 20230077251 A KR20230077251 A KR 20230077251A
Authority
KR
South Korea
Prior art keywords
command
write
register
instruction
destination register
Prior art date
Application number
KR1020210164316A
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 KR1020210164316A priority Critical patent/KR20230077251A/ko
Publication of KR20230077251A publication Critical patent/KR20230077251A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle 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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks

Abstract

본 발명은 벡터 연산을 위한 데이터 처리 방법 및 장치에 관한 것이다. 본 발명에 따른 데이터 처리 방법은, 명령어에서 사용하는 레지스터에 각각 대응하는 라이트 플래그와 리드 플래그 카운터를 마련하는 과정, 파이프라인 처리을 위한 순차적인 명령어 스트림에서 제1 명령어를 인출하여 디코딩하는 과정, 제1 명령어가 연산 결과가 저장되는 목적지 레지스터에 데이터를 쓰는 명령인 경우, 목적지 레지스터에 대응하는 라이트 플래그를 1로 세트하는 과정, 제1 명령어가 하나 이상의 피연산자 레지스터를 사용하는 경우, 피연산자레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 증가시키는 과정, 제1 명령어를 실행하는 과정, 목적지 레지스터에 대응하는 라이트 플래그를 0으로 클리어하고, 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 감소시키는 과정을 포함한다. 본 발명에 따르면, 파이프라인 벡터 연산에서 비교적 간단한 회로 구성으로 데이터 해저드 문제를 해결할 수 있다.

Description

벡터 연산을 위한 데이터 처리 방법 및 장치{Data processing method and apparatus for vector operation}
본 발명은 데이터 처리 방법 및 장치에 관한 것으로, 더욱 상세하세는 파이프라인 방식으로 벡터 명령어를 처리할 수 있는 데이터 처리 방법 및 장치에 관한 것이다.
파이프라인은 순차적인 명령어 스트림에 있는 명령어 간 병렬성을 추구하는 기술로, 여러 명령어가 중첩되어 실행되도록 하는 것이다. 즉, 하나의 연산 처리 과정을 여러 단계들로 나누고, 각 단계를 처리하기 위한 하드웨어 유닛들을 독립적으로 구성하여 동시에 동작하도록 하는 것이다.
파이프라인 방식으로 명령어를 처리하는 경우, 데이터 종속성으로 인해 어떤 단계가 다른 단계가 끝나기를 기다려야 하기 때문에 지연되는 상황이 발생할 수 있는데, 이를 데이터 해저드(data hazard)라고 한다.
일반적인 스칼라 프로세서의 경우, 명령어에서 사용하는 레지스터의 길이는 32비트 또는 64비트이므로, 데이터 해저드 해결을 위해 실행 큐에 미리 관련 레지스터 값을 읽어와서 독립적으로 연산을 수행하는 방식을 사용하더라도 크게 문제가 되지 않는다.
그러나, 벡터 프로세서와 같이 벡터 연산을 수행하는 경우, 사용하는 벡터 레지스터의 길이가 512비트 또는 그 이상이 되므로, 이러한 경우 데이터 해저드 해결을 위해 실행 큐에 미리 관련 레지스터 값을 읽어와서 연산을 수행하는 방식은 회로 구성을 복잡하게 한다. 또한, 이러한 점을 회피하기 위해, 실행 큐에 레지스터 데이터가 아니라 레지스터 어드레스만 저장하는 방식을 사용하는 경우에는 일반적으로 사용되는 방식으로 데이터 해저드 문제를 해결할 수 없다.
따라서, 파이프라인 벡터 연산 처리에 적합하게 데이터 해저드를 해결할 수 있는 방안이 필요하다,
따라서, 본 발명의 목적은, 데이터 해저드를 해결하면서 파이프라인 벡터 연산을 수행할 수 있는 데이터 처리 방법 및 장치를 제공함에 있다.
상기 목적을 달성하기 위한 본 발명에 따른 데이터 처리 방법은, 명령어에서 사용하는 레지스터에 각각 대응하는 라이트 플래그(writeFlag)와 리드 플래그 카운터(readFlag Counter)를 마련하는 단계, 파이프라인 처리을 위한 순차적인 명령어 스트림에서 제1 명령어를 인출하여 디코딩하는 단계, 상기 제1 명령어가 목적지 레지스터에 데이터를 쓰는 명령인 경우, 상기 목적지 레지스터에 대응하는 라이트 플래그를 1로 세트하는 단계, 상기 제1 명령어가 하나 이상의 피연산자 레지스터를 사용하는 경우, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 증가시키는 단계, 상기 제1 명령어를 실행하는 단계, 및 상기 목적지 레지스터에 대응하는 라이트 플래그를 0으로 클리어하고, 상기 피연산자 레지스터에 각각 대응하는 플래그 카운터 값을 하나 감소시키는 단계를 포함한다.
본 발명에 따른 데이터 처리 방법은, 상기 명령어 스트림에서 제2 명령어를 인출하여 디코딩하는 단계, 및 상기 제2 명령어의 목적지 레지스터에 대응하는 라이트 플래그가 1이거나, 상기 제2 명령어의 목적지 레지스터에 대응하는 리드 플래그 카운터 값이 0인 아닌 경우, 상기 제2 명령어의 실행을 지연시키는 단계를 더 포함할 수 있다.
또한, 본 발명에 따른 데이터 처리 방법은, 상기 제2 명령어에서 사용하는 피연산자 레지스터에 대응하는 라이트 플래그가 1인 경우, 상기 제2 명령어의 실행을 지연시키는 단계를 더 포함할 수 있다.
상기 목적으로 달성하기 위하여 본 발명에서는, 상기 데이터 처리 방법을 이용하여 벡터 연산을 수행하는 벡터 프로세서를 제공할 수 있다.
한편, 상기 목적을 달성하기 위한 본 발명에 따른 데이터 처리 장치는, 명령어에서 사용하는 레지스터에 각각 대응하도록 설치되는 라이트 플래그(writeFlag), 상기 명령어에서 사용하는 레지스터에 각각 대응하도록 설치되는 리드 플래그 카운터(readFlag Counter), 파이프라인 처리을 위한 순차적인 명령어 스트림에서 명령어를 인출하는 인출부, 상기 인출부에서 인출한 명령어를 디코딩하는 디코더, 상기 인출부에서 인출한 제1 명령어가 목적지 레지스터에 데이터를 쓰는 명령인 경우, 상기 목적지 레지스터에 대응하는 라이트 플래그를 1로 세트하고, 상기 제1 명령어가 하나 이상의 피연산자 레지스터를 사용하는 경우, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 증가시키는 해저드 검출부, 상기 디코더에서 디코딩한 명령어를 큐잉하는 디코더 큐, 및 상기 디코더 큐에 저장된 디코딩한 명령어를 실행하는 실행부를 포함하며, 상기 해저드 검출부는, 상기 제1 명령어의 실행이 완료되면, 상기 목적지 레지스터에 대응하는 라이트 플래그를 0으로 클리어하고, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 감소시킨다.
그리고, 상기 목적으로 달성하기 위하여 본 발명에서는, 상기 데이터 처리 장치를 이용하여 데이터를 처리하는 시스템 온 칩을 제공할 수도 있다.
본 발명에 따르면, 명령어에서 사용하는 레지스터에 각각 대응하도록 마련된 라이트 플래그와 리드 플래그 카운터 값을 이용하여 파이프라인 벡터 연산에서 데이터 해저드 문제를 해결할 수 있다. 또한, 본 발명에 따른 방식은 데이터 해저드 문제 해결을 위해 실행 큐에 미리 레지스터 값을 읽어올 필요가 없으므로, 비교적 간단한 회로 구성이 가능하며, 데이터 해저드 발생에 따른 성능 저하도 최소화할 수 있다.
도 1은 파이프라인 처리 방법에 대한 설명에 참조되는 도면,
도 2는 데이터 해저드 발생에 대한 설명에 참조되는 도면,
도 3은 본 발명에 따른 데이터 처리 방법이 적용되는 장치의 일 예를 나타낸 도면, 그리고
도 4 및 도 5는 본 발명의 일실시예에 따른 데이터 처리 방법에 대한 설명에 제공되는 흐름도이다.
본 명세서에서, 어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 경우, 어떤 구성요소에 다른 구성요소에 직접적으로 연결되어 있거나 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에" 또는 "~에 이웃하는" 등과, 어떤 구성요소가 다른 구성요소로 신호를 "전송한다" 와 같은 표현도 마찬가지로 해석되어야 한다.
이하에서는 도면을 참조하여 본 발명을 보다 상세하게 설명한다.
도 1은 파이프라인 처리 방법에 대한 설명에 참조되는 도면이다.
도 1을 참조하면, 명령어 인출 단계인 IF(Instruction Fetch), 명령어 해독 및 레지스터 파일 읽기 단계인 ID(Instruction Decode), 실행 또는 주소 계산 단계인 EX(Execution), 및 쓰기 단계인 WB(Write Back)와 같은 4단계로 이루어진 파이프라인 처리 과정이 도시되어 있다. 명령어에 따라서는 메모리 접근 단계인 MEM(Memory Access) 과정 등이 필요한 경우도 있다.
이와 같이, 하나의 명령어 처리 과정을 몇개의 단계들로 나누고, 각 단계를 처리하기 위한 하드웨어 유닛들을 독립적으로 구성하여 동시에 동작하도록 함으로써, 명령어를 중첩적으로 실행하여 병렬성을 추구할 수 있다.
도 2는 데이터 해저드에 대한 설명에 참조되는 도면이다.
도 2를 참조하면, add 명령어 바로 다음에 add의 합(r1)을 이용하는 뺄셈 명령어 sub가 뒤따르는 경우, add 명령어는 4번째 WB 단계전까지는 결과값을 쓰지 않게 되므로, sub 명령어는 add 명령어 결과값이 레지스터 r1에 써질때까지 실행이 지연되어야 한다.
이와 같이 어떤 단계가 다른 단계가 끝나기를 기다려야 하기 때문에 파이프라인 처리가 지연(stall)되는 경우를 데이터 해저드(data hazard)라고 한다.
이러한 데이터 해저드 해결을 위해, 컴파일러 수준에서 명령어를 재정렬하고 필요시 no-operation 명령을 삽입하는 방안이 있으나, 이러한 데이터 종속성은 너무 빈번하게 발생하고 지연은 너무 길어서 결과는 만족스럽지 못한 것으로 알려져 있다.
이외에도 명령어 실행 결과값이 레지스터 파일에 반영되기 전에 실행 단계에서 계산된 결과를 다음 명령어의 실행 단계로 전달하는 방법도 있다. 즉, 별도의 하드웨어를 추가하여 정상적으로 얻을 수 없는 값을 내부 자원으로부터 일찍 받아오는 것을 전방전달(forwarding) 또는 우회전달(bypassing)이라고 한다.
그러나, 전방전달이 모든 파이프라인 지연을 방지할 수는 없다. 예컨대, 명령어 하나에 전방전달해야 하는 결과가 여러개 있거나, 로드 명령어와 같이 4단계 이후에만 결과값을 사용할 수 있는 경우 등에는 전방전달을 사용하기 어려워 진다.
도 3은 본 발명에 따른 데이터 처리 방법이 적용되는 장치의 일 예를 나타낸 것이다.
도 3을 참조하면, 본 발명에 따른 데이터 처리 장치(100)는 인출부(110), 디코더(120), 해저드 검출부(130), 디코더 큐(140), 실행부(150), 라이트백부(160), 및 백터 레지스터(170)를 포함할 수 있다. 실행부(150)는 ALU부(151), FPU부(153), MAC부(155), 및 LD/ST부(157)를 포함할 수 있다.
이와 같은 구성요소들은 실제 응용에서 구현될 때 필요에 따라 2 이상의 구성요소가 하나의 구성요소로 합쳐지거나, 혹은 하나의 구성요소가 2 이상의 구성요소로 세분되어 구성될 수 있다.
인출부(110)는 명령어 캐시 등에 저장된 순차적인 명령어 스트림에서 명령어를 인출한다. 명령어 스트림은 벡터 연산을 위한 벡터 명령어를 포함한다. 벡터 명령어는 벡터로 구성된 여러 데이터를 한개의 명령어로 벡터 합, 차, 곱 등의 연산을 수행할 수 있다.
디코더(120)는 인출한 명령어를 디코딩한다. 해저드 검출부(130)는 후술하는 방법에 따라 데이터 해저드 발생을 검출하여, 데이터 해저드 발생시 명령어 처리를 지연(stall) 시킨다. 해저드 검출부(130)는 해저드 처리에 사용되는 라이트 플래그(writeFlag)와 리드 플래그 카운터(readFlag Counter)를 구비한다.
디코더 큐(140)는 디코더(120)에서 디코드된 명령어가 큐잉된다. .
실행부(150)는 디코터 큐(140)에 큐잉된 디코딩된 명령어를 실행한다. 실행부(150)는 벡터 연산들을 각각 처리하기 위한 ALU부(151), FPU부(153), MAC부(155), LD/ST부(157)을 포함할 수 있으며, 이외에도 추가적인 실행부들을 더 포함할 수 있다. 실행부(150)에서, ALU부(151)는 산술 또는 논리 연산을 수행하며, FPU부(153)는 부동소수점 연산을 수행하고, MAC부(155)는 곱셈과 덧셈 연산을 수행하며, LD/ST부(157)는 로드(load) 또는 스토어(store) 연산을 수행한다.
그리고, 라이트백부(160)는 실행된 명령어 결과를 벡터 레지스터(170)에 기록한다.
이와 같은 구성에 의해, 파이프라인 벡터 연산을 수행할 수 있다. 또한, 이와 같은 구성의 데이터 처리 장치(100)는 중앙처리장치(CPU), 그래픽처리장치(GPU), 시스템 온 칩(System on Chip), 및 기타 벡터 머신 등에 사용할 수 있다.
도 4 및 도 5는 본 발명의 일실시예에 따른 데이터 처리 방법에 대한 설명에 제공되는 흐름도이다.
본 발명에서는, 명령어에 사용하는 레지스터에 각각 대응하는 라이트 플래그(writeFlag)와 리드 플래그 카운터(readFlag Counter)를 사용한다. 즉, 명령어에서 사용하는 제1 내지 제n 레지스터가 있는 경우, 제1 내지 제n 레지스터에 각각 대응하는 제1 내지 제n 라이트 플래그(writeFlag)와, 제1 내지 제n 리드 플래그 카운터(readFlag Counter)를 사용한다. 제1 내지 제n 라이트 플래그(writeFlag)와, 제1 내지 제n 리드 플래그 카운터(readFlag Counter)의 초기값은 0 이며, 도 4 및 도 5에서는 순차적인 명령어 스트림에서 어느 한 명령어를 처리하는 과정에 대해 설명한다.
도 4를 참조하면, 인출부(110)는 파이프라인 처리을 위한 일련의 명령어 스트림에서 명령어를 인출하고(S300), 디코더(120)는 인출한 명령어를 해독하고, 필요한 레지스터 값을 읽어오는 명령어 디코딩을 수행한다(S305).
해저드 검출부(130)는 인출한 명령어에서 연산 결과가 저장되는 목적지(destination) 레지스터에 대한 해저드 발생 여부를 검사한다(S310). 목적지 레지스터에 대한 해저드 검사는, 목적지 레지스터에 대응하는 라이트 플래그가 1이거나, 목적지 레지스터에 대응하는 리드 플래그 카운터 값이 0인 아니 경우, 데이터 해저드가 발생한 것으로 판단한다.
다음으로 해저드 검출부(130)는 피연산자 레지스터에 대한 해저드 발생 여부를 검사한다(S315). 피연산자 레지스터에 대한 해저드 검사는, 인출한 명령어의 피연산자 레지스터에 대응하는 라이트 플래그가 1인 경우, 데이터 해저드가 발생한 것으로 판단한다.
해저드 발생시, 목적지 레지스터에 대응하는 라이트 플래그와 리드 플래그 카운터값이 모두 0이되고, 피연산자 레지스터에 대응하는 라이트 플래그가 0이 될때까지 명령어 처리를 지연시킨다(S320). 그리고, 해당 라이트 플래그와 리드 플래크 카운터 값이 모두 0이 되는 경우, 도 5에 도시한 과정을 수행한다.
도 5를 참조하면, 인출한 명령어가 목적지 레지스터에 데이터를 쓰는(write) 명령인 경우, 목적 레지스트에 대응하는 라이트 플래그를 1로 세트한다(S325, S330).
또한, 인출한 명령어가 피연산자 레지스터를 사용하는 경우, 사용하는 피연자 레지스터에 각각 대응하는 플래그 카운터 값을 하나 증가시킨다(S335, S340)
그리고, 실행부(150)에서 명령어를 실행하고, 명령어 실행 결과에 따라 레지스터 내용 등을 업데이트한다(S345).
해저드 검출부(130)는 S330 단계에서 1로 세트한 라이트 플래그가 있으면 다시 0으로 클리어하고(S350), S340 단계에서 카운터 값을 증가시킨 리드 플래그 카운터가 있으며 다시 카운터 값을 하나 감소시킨다(S355).
이와 같은 과정은 다음 명령어에서도 동일하게 수행한다.
다음은 본 발명에 따른 데이터 처리 방법을 설명하기 위한 명령어들을 예시한 것이다.

1: vmul v1, v2, v3

2: vadd v4, v2, v3

3: vsub v3, v2, v3

4: vdiv v5, v3, v7
명령어에서 첫번째 레지스터가 목적지 레지스터(rd)가 되고, 두번째와 세번째 레지스터가 피연산자 레지스터(rs)가 된다.
즉, 1번째 명령어 vmul v1, v2, v3 (v1 = v2 * v3) 에서,
v1 레지스터가 목적지 레지스터(rd)가 되고, v2 레지스터는 첫번째 피연산자 레지스터(rs1), v3 레지스터는 두번째 피연산자 레지스터(rs2)가 된다.
제1 명령어가 디코딩되면, v1 레지스터에 대응하는 제1 라이트 플래그(writeFlag1)가 1, v2 레지스터에 대응하는 제2 리드 플래그 카운터(readFlagcounter2) 값이 1, v3 레지스터에 대응하는 제3 리드 플래그 카운터(readFlagCounter3) 값이 1이 된다.
해저드 발생은 목적지 레지스터(rd)에 대응하는 라이트 플래그(writeFlag)가 1이거나, 목적지 레지스터(rd)에 대응하는 리드 플래그 카운터(readFlagCounter) 값이 0이 아닌 경우 발생한다. 또한, 피연산자 레지스터(rs1, rs2)에 대응하는 라이트 플래그(writeFlag1, writeFlag2)가 1인 경우에도 발생한다.
2번째 명령어 vadd v4, v2, v3 (v4 = v2 + v3) 에서,
v4 레지스터에 대응하는 제4 라이트 플래그(writeFlag4)가 1, v2 레지스터에 대응하는 제2 리드 플래그 카운터(readFlagcounter2) 값이 2, v3 레지스터에 대응하는 제3 리드 플래그 카운터(readFlagCounter3) 값이 2가 되며, 데이터 해저드는 발생하지 않는다.
3번째 명령어 vsub v3, v2, v3 (v3 = v2 - v3) 에서,
1번째 명령어 vmul v1, v2, v3가 아직 실행이 완료되지 않은 경우, 레지스터 v3에 대응하는 제3 리드 플래그 카운터(readFlagCounter3) 값이 2이므로, 데이터 해저드가 검출된다.
4번째 명령어 vdiv v5, v3, v7 (v5 = v3/v7) 에서,
v3 레지스터에 대응하는 제3 라이트 플래그(writeFlag3)가 3번째 명령어에 의해 1로 세트되어 있는 상태이므로, 데이터 해저드가 검출된다.
4번째 명령어까지 실행이 완료되면, 사용되었던 라이트 플래그와 리드 플래그 카운터는 모두 0이 된다. 즉, 리드 플래그 카운터 값은 서로 다른 명령어에 의해 동시에 증가와 감소가 일어날 수도 있으며, 명령어 실행 종료 시점이 동일할 경우 동시에 값이 감소된다.
이와 같은 과정에 의해 데이터 해저드를 문제를 해결할 수 있다.
한편, 본 발명에 따른 데이터 처리 방법 및 장치는 상기한 바와 같이 설명된 실시예들의 구성에 한정되게 적용될 수 있는 것이 아니라, 상기한 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
그리고, 본 발명의 내용은 하드웨어나 소프트웨어 사용에만 국한되지는 않으며, 다른 어떤 컴퓨팅 또는 처리 환경에 대해서도 적용 가능하다. 본 발명에서 설명하는 하드웨어, 소프트웨어 또는 하드웨어소프트웨어의 조합으로 구현될 수 있다. 본 발명은 회로를 사용하여 구현될 수 있다. 즉, 한 개 이상의 프로그램 가능한 논리회로, 즉 ASIC(application specific integrated circuit) 또는 논리회로(AND, OR NAND gates) 또는 프로세싱 장치(예를 들면 마이크로 프로세서, 컨트롤러)로 구현가능하다.
또한, 본 발명은 프로그램 가능한 컴퓨터상에서 컴퓨터 프로그램으로 구현 가능하다. 이러한 컴퓨터는 프로세서, 저장장치, 입력장치, 출력 장치를 포함할 수 있다. 본 발명에서 설명한 내용을 구현하기 위해 프로그램 코드는 마우스 또는 키보드 입력장치로 입력될 수 있다. 이러한 프로그램들은 고차원적인 언어나, 객체지향적인 언어로 구현될 수 있다. 또한 어셈블리나 기계어 코드로 구현된 컴퓨터 시스템으로도 구현될 수 있다.
또한, 이상에서는 본 발명의 바람직한 실시예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어서는 안될 것이다.
110 : 인출부 120 : 디코더
130 : 해저드 검출부 140 : 디코더 큐
150 : 실행부 160 : 라이트백부
170 : 벡터 레지스터

Claims (10)

  1. 명령어에서 사용하는 레지스터에 각각 대응하는 라이트 플래그(writeFlag)와 리드 플래그 카운터(readFlag Counter)를 마련하는 단계;
    파이프라인 처리을 위한 순차적인 명령어 스트림에서 제1 명령어를 인출하여 디코딩하는 단계;
    상기 제1 명령어가 목적지 레지스터에 데이터를 쓰는 명령인 경우, 상기 목적지 레지스터에 대응하는 라이트 플래그를 1로 세트하는 단계;
    상기 제1 명령어가 하나 이상의 피연산자 레지스터를 사용하는 경우, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 증가시키는 단계;
    상기 제1 명령어를 실행하는 단계; 및
    상기 목적지 레지스터에 대응하는 라이트 플래그를 0으로 클리어하고, 상기 피연산자 레지스터에 각각 대응하는 플래그 카운터 값을 하나 감소시키는 단계를 포함하는 데이터 처리 방법.
  2. 제1항에 있어서,
    상기 명령어 스트림에서 제2 명령어를 인출하여 디코딩하는 단계; 및
    상기 제2 명령어의 목적지 레지스터에 대응하는 라이트 플래그가 1이거나, 상기 제2 명령어의 목적지 레지스터에 대응하는 리드 플래그 카운터 값이 0인 아닌 경우, 상기 제2 명령어의 실행을 지연시키는 단계를 더 포함하는 데이터 처리 방법.
  3. 제2항에 있어서,
    상기 제2 명령어에서 사용하는 피연산자 레지스터에 대응하는 라이트 플래그가 1인 경우, 상기 제2 명령어의 실행을 지연시키는 단계를 더 포함하는 데이터 처리 방법.
  4. 제1항에 있어서,
    상기 제1 및 제2 명령어는 벡터 연산을 위한 벡터 명령어인 것을 특징으로 하는 데이터 처리 방법.
  5. 제1항 내지 제4항 중 어느 한 항의 데이터 처리 방법을 이용하여 벡터 연산을 수행하는 벡터 프로세서.
  6. 명령어에서 사용하는 레지스터에 각각 대응하도록 설치되는 라이트 플래그(writeFlag);
    상기 명령어에서 사용하는 레지스터에 각각 대응하도록 설치되는 리드 플래그 카운터(readFlag Counter);
    파이프라인 처리을 위한 순차적인 명령어 스트림에서 명령어를 인출하는 인출부;
    상기 인출부에서 인출한 명령어를 디코딩하는 디코더;
    상기 인출부에서 인출한 제1 명령어가 목적지 레지스터에 데이터를 쓰는 명령인 경우, 상기 목적지 레지스터에 대응하는 라이트 플래그를 1로 세트하고, 상기 제1 명령어가 하나 이상의 피연산자 레지스터를 사용하는 경우, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 증가시키는 해저드 검출부;
    상기 디코더에서 디코딩한 명령어를 큐잉하는 디코더 큐; 및
    상기 디코더 큐에 저장된 디코딩한 명령어를 실행하는 실행부;를 포함하며,
    상기 해저드 검출부는, 상기 제1 명령어의 실행이 완료되면, 상기 목적지 레지스터에 대응하는 라이트 플래그를 0으로 클리어하고, 상기 피연산자 레지스터에 각각 대응하는 리드 플래그 카운터 값을 하나 감소시키는 것을 특징으로 하는 데이터 처리 장치.
  7. 제6항에 있어서,
    상기 해저드 검출부는, 상기 명령어 스트림에서 인출한 제2 명령어의 목적지 레지스터에 대응하는 라이트 플래그가 1이거나, 상기 제2 명령어의 목적지 레지스터에 대응하는 리드 플래그 카운터 값이 0인 아닌 경우, 상기 제2 명령어의 실행을 지연시키는 것을 특징으로 하는 데이터 처리 장치.
  8. 제7항에 있어서,
    상기 해저드 검출부는, 상기 제2 명령어에서 사용하는 피연산자 레지스터에 대응하는 라이트 플래그가 1인 경우, 상기 제2 명령어의 실행을 지연시키는 것을 특징으로 하는 데이터 처리 장치.
  9. 제6항에 있어서,
    상기 실행부는, 산술 또는 논리 연산을 수행하는 ALU부;
    부동소수점 연산을 수행하는 FPU부;,
    곱셈과 덧셈 연산을 수행하는 MAC부; 및
    로드 또는 스토어 연산을 수행한는 LD/ST부를 포함하는 것을 특징으로 하는 데이터 처리 장치.
  10. 제6항 내지 제9항 중 어느 한 항의 데이터 처리 장치를 이용하여 데이터를 처리하는 시스템 온 칩.
KR1020210164316A 2021-11-25 2021-11-25 벡터 연산을 위한 데이터 처리 방법 및 장치 KR20230077251A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210164316A KR20230077251A (ko) 2021-11-25 2021-11-25 벡터 연산을 위한 데이터 처리 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210164316A KR20230077251A (ko) 2021-11-25 2021-11-25 벡터 연산을 위한 데이터 처리 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20230077251A true KR20230077251A (ko) 2023-06-01

Family

ID=86771023

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210164316A KR20230077251A (ko) 2021-11-25 2021-11-25 벡터 연산을 위한 데이터 처리 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20230077251A (ko)

Similar Documents

Publication Publication Date Title
EP2140347B1 (en) Processing long-latency instructions in a pipelined processor
US7793079B2 (en) Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
US8601239B2 (en) Extended register addressing using prefix instruction
US7937559B1 (en) System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
US5604878A (en) Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path
KR20040016829A (ko) 파이프라인식 프로세서에서의 예외 취급 방법, 장치 및시스템
US20090106533A1 (en) Data processing apparatus
US20070118726A1 (en) System and method for dynamically selecting storage instruction performance scheme
US20230273797A1 (en) Processor with adaptive pipeline length
US5996059A (en) System for monitoring an execution pipeline utilizing an address pipeline in parallel with the execution pipeline
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
US8447961B2 (en) Mechanism for efficient implementation of software pipelined loops in VLIW processors
US20200326940A1 (en) Data loading and storage instruction processing method and device
US5737562A (en) CPU pipeline having queuing stage to facilitate branch instructions
KR20230077251A (ko) 벡터 연산을 위한 데이터 처리 방법 및 장치
JP3146058B2 (ja) 並列処理型プロセッサシステムおよび並列処理型プロセッサシステムの制御方法
US20210089305A1 (en) Instruction executing method and apparatus
US5819060A (en) Instruction swapping in dual pipeline microprocessor
US8966230B2 (en) Dynamic selection of execution stage
KR20160108754A (ko) 파이프라인 구조의 프로세서에서의 무조건 분기 명령어 처리 방법
US6918028B1 (en) Pipelined processor including a loosely coupled side pipe
US20120265966A1 (en) Processor with increased efficiency via early instruction completion
US8275978B1 (en) Execution of conditional branch instruction specifying branch point operand to be stored in jump stack with branch destination for jumping to upon matching program counter value
US20050071830A1 (en) Method and system for processing a sequence of instructions
Lozano et al. A deeply embedded processor for smart devices