KR100948097B1 - 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법 - Google Patents

하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법 Download PDF

Info

Publication number
KR100948097B1
KR100948097B1 KR1020080004733A KR20080004733A KR100948097B1 KR 100948097 B1 KR100948097 B1 KR 100948097B1 KR 1020080004733 A KR1020080004733 A KR 1020080004733A KR 20080004733 A KR20080004733 A KR 20080004733A KR 100948097 B1 KR100948097 B1 KR 100948097B1
Authority
KR
South Korea
Prior art keywords
primitive
improvement
node
instruction
hardware
Prior art date
Application number
KR1020080004733A
Other languages
English (en)
Other versions
KR20090078893A (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 건국대학교 산학협력단
Priority to KR1020080004733A priority Critical patent/KR100948097B1/ko
Publication of KR20090078893A publication Critical patent/KR20090078893A/ko
Application granted granted Critical
Publication of KR100948097B1 publication Critical patent/KR100948097B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation

Abstract

본 발명은 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션(Primitive Instruction) 디자인 방법에 관한 것으로서, (a) 비디오 코덱의 함수 구조에 대한 연산 트리 그래프를 작성하는 단계; (b) 프로파일링을 통하여 상기 연산 트리 그래프의 세부 노드를 완성하는 단계; (c) 완성된 연산 트리 그래프를 이용하여 프리미티브 인스트럭션을 정의할 목표 노드를 결정하는 단계; (d) 결정한 목표 노드 내에서 프리미티브 인스트럭션을 정의하는 단계; 및 (e) 정의된 프리미티브 인스트럭션이 미리 설정된 하드웨어/소프트웨어 통합 설계의 목표값을 만족하는 경우, 상기 프리미티브 인스트럭션을 프리미티브 인스트럭션 세트로 확정하는 단계;를 포함한다.
본 발명에 따르면, 다양한 환경에 응용할 수 있도록 성능 향상도가 종래의 소프트웨어에 비해 n배에 가까운 우수한 결과를 얻도록 하드웨어와 소프트웨어를 분할할 수 있으며, 하드웨어/소프트웨어 분할 기법을 통해 비디오 코덱을 작성함으로써 소프트웨어 최적화와 같은 별도의 과정 없이도 속도가 향상되는 효과가 있다.
하드웨어/소프트웨어 통합 설계, 비디오 코덱, 프리미티브 인스트럭션, 연산 트리 그래프, 목표 노드, 프로파일링

Description

하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법 {Method for designing Primitive Instruction for Video codec based on HW/SW Co-design}
본 발명은 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션(Primitive Instruction) 디자인 방법에 관한 것으로서, 특히 소프트웨어 기반으로 하드웨어를 설계할 때 하드웨어와 소프트웨어를 분할하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법에 관한 것이다.
MPEG-2, 4 및 H.264와 같은 비디오 압축 기술의 발달은 방송 및 통신 분야에 사용되고 있는 영상 매체의 효율적이고 경제적인 활용이라는 측면에서 큰 영향을 미치게 되었다.
그러나, 상술한 바와 같은 비디오 압축 기술은 많은 연산이 필요하기 때문에 전부를 소프트웨어로 구현하는 경우 실시간 방송 및 통신 환경에 적용하기 어렵다는 문제점이 있다. 또한 전부를 하드웨어만으로 구현하는 경우에도 많은 시간과 비용이 소비되는 문제점이 있다. 따라서 상술한 두 가지 디자인 방법의 문제점을 해 결하기 위해 하드웨어/소프트웨어 통합 설계 기법들이 제안된바 있다.
상술한 통합 설계 기법은 DCT, ME, MC 등과 같은 연산량이 큰 블록을 하드웨어로 구현하고 나머지는 소프트웨어로 구현하였기 때문에, 높은 성능을 발휘하는 장점이 있다. 그러나, ME, MC와 같은 큰 블록을 구현해야 하기 때문에, 개발 비용과 시간에 있어서 큰 장점을 가지지 못하며, 다양한 응용 분야에서 요구하는 성능 향상도를 구현할 수 있는 분할 방법을 제공하지 못하는 문제점이 있었다.
최근 DMB, 영상 통화, 모바일 웹서핑 서비스 등의 방송 또는 통신이 휴대할 수 있는 미디어에 적용되기 시작했고, HDTV 등 고화질의 방송 서비스가 출현하기 시작하면서 대량의 멀티미디어 데이터를 신속하게 처리해야 하는 환경에 도래하였다. 이러한 추세에 따라, 다양한 환경에 적합하도록 고성능을 발휘하는 비디오 코덱을 디자인할 수 있는 분할 기법이 필요하다.
본 발명이 해결하고자 하는 과제는, 상기 문제점을 해결하기 위한 것으로서, 낮은 전력 소모나 높은 성능이 필요한 환경에 있어서도 비디오 코덱의 다양한 적용이 가능하도록 종래의 방법에 비하여 현저히 향상된 성능 향상도를 얻을 수 있는 하드웨어/소프트웨어 통합 설계 분할 방법을 제공하는 것이다.
본 발명이 해결하고자 하는 다른 과제는, 상기 문제점을 해결하기 위한 것으로서, 하드웨어/소프트웨어 통합 설계 분할 기법을 위한 프리미티브 인스트럭션의 디자인 방법을 제공하는 것이다.
본 발명은, 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션(Primitive Instruction) 디자인 방법에 관한 것으로서, (a) 비디오 코덱의 함수 구조에 대한 연산 트리 그래프를 작성하는 단계; (b) 프로파일링을 통하여 상기 연산 트리 그래프의 세부 노드를 완성하는 단계; (c) 완성된 연산 트리 그래프를 이용하여 프리미티브 인스트럭션을 정의할 목표 노드를 결정하는 단계; (d) 결정한 목표 노드 내에서 프리미티브 인스트럭션을 정의하는 단계; 및 (e) 정의된 프리미티브 인스트럭션이 미리 설정된 하드웨어/소프트웨어 통합 설계의 목표값을 만족하는 경우, 상기 프리미티브 인스트럭션을 프리미티브 인스트럭션 세트로 확정하는 단계;를 포함한다.
바람직하게는, 상기 (d) 단계 이후에, (f) 정의된 프리미티브 인스트럭션이 미리 설정된 하드웨어/소프트웨어 통합 설계의 목표값을 만족하지 않는 경우, 상기 (a) 단계로 절차를 이행하여 상기 (a) 단계 내지 상기 (e) 단계를 재차 수행하는 단계;를 더 포함한다.
또한 바람직하게는, 상기 (d) 단계는, (d1) 명령어 집합으로부터 제 1 기본 블록(Basic Block)들을 생성하며, 상기 제 1 기본 블록들이 폐 루프(Closed Loop Flow)를 형성하는 경우 상기 폐 루프에 포함되는 상기 제 1 기본 블록들을 통합하여 제 2 기본 블록을 생성하는 클러스터링(Clustering)을 수행하는 단계; 및 (d2) 생성된 상기 제 1 기본 블록들 또는 제 2 기본 블록들을 소정의 단위로 구분하는 리파인먼트(Refinement)를 수행하는 단계;를 포함하는 것을 특징으로 한다.
또한 바람직하게는, 상기 (c) 단계는, (c1) 요구되는 성능 향상 수준을 달성하기 위해 추가적으로 필요한 향상도를 예측하는 단계; (c2) 상기 추가적으로 필요한 향상도와, 상기 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도를 비교하여 노드 향상도를 예측하는 단계; 및 (c3) 목표 노드를 결정하기 위한 판별식을 정의하여 상기 판별식을 이용하여 계산한 결과 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 큰 경우, 상기 연산 트리 그래프의 모든 최하위 자식 노드에 대해 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 큰 조건을 만족하는 노드 중 가장 작은 향상도를 가지는 노드를 목표 노드로 결정하는 단계;를 포함하는 것을 특징으로 한다.
또한 바람직하게는, 상기 (c2) 단계 이후에, (c4) 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 크지 않은 경우, 상기 연산 트리 그래프의 모든 최하위 자식 노드에 대해 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 크지 않은 조건을 만족하는 노드 중 가장 높은 향상도를 가지는 노드를 목표 노드로 결정하는 단계;를 더 포함하는 것을 특징으로 한다.
또한 바람직하게는, 상기 (c1) 단계의 추가적으로 필요한 향상도는 다음의 수학식을 이용하여 예측하는 것을 특징으로 한다.
Figure 112008003532139-pat00001
(상기 수학식에서, Gest는 n배의 성능 향상을 달성하기 위해 추가적으로 필요한 향상도를 나타내며, T는 프리미티브 인스트럭션을 정의하기 전의 초기 전체 연산량을 나타내고, n'은 이전의 향상도로서 이전에 변화된 전체 연산량 T'를 이용하여
Figure 112008003532139-pat00002
으로 표현된다.)
또한 바람직하게는, 상기 (c2) 단계의 상기 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도는 다음의 수학식에 의해 계산하는 것을 특징으로 한다.
Figure 112008003532139-pat00003
(상기 수학식에서, GA는 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도를 나타내며, ACalls는 노드 A의 호출 횟수를 나타내고, ANC는 노드 A가 한번 호출될 때 노드 A를 포함한 모든 하위 노드의 연산량을 나타내며, AP는 설계하고자 하는 목표 수행 사이클을 나타낸다.)
그리고 바람직하게는, 다음의 수학식을 만족하는 경우 상기 (e) 단계의 목표값을 만족한다고 판단하는 것을 특징으로 한다.
Figure 112008003532139-pat00004
(상기 수학식에서, T는 프리미티브 인스트럭션을 정의하기 전의 초기 전체 연산량을 나타내며, GT는 n배의 성능 향상을 달성하기 위해 프리미티브 인스트럭션으로 변화된 모든 노드들의 전체 속도 향상 이득으로서
Figure 112008003532139-pat00005
이고, k는 프리미티브 인스트럭션으로 변화된 노드의 총 개수를 나타낸다.)
본 발명에 따르면, 다양한 환경에 응용할 수 있도록 성능 향상도가 종래의 소프트웨어에 비해 n배에 가까운 우수한 결과를 얻도록 하드웨어와 소프트웨어를 분할할 수 있는 효과가 있다.
본 발명에 따르면, 하드웨어/소프트웨어 분할 기법을 통해 비디오 코덱을 작 성함으로써 소프트웨어 최적화와 같은 별도의 과정 없이도 속도가 향상되는 효과가 있다.
본 발명에 따르면, 분할 기법을 통해 하드웨어 엔지니어가 하드웨어 블록의 크기와 속도를 쉽게 결정할 수 있는 효과가 있다.
본 발명에 따르면, 각 프리미티브 인스트럭션은 코덱을 가속화할 수 있는 라이브러리로 사용될 수 있는 효과가 있다.
본 발명의 실시를 위한 구체적인 내용을 설명하기에 앞서, 본 발명의 기술적 요지와 직접적 관련이 없는 구성에 대하여는 본 발명의 기술적 요지를 흩뜨리지 않는 범위 내에서 생략하였음을 유의하여야 할 것이다.
또한, 본 명세서 및 청구범위에 사용된 용어나 단어는 발명자가 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야 할 것이다.
일반적인 RISC(Reduced instruction set computer) 구조의 프로세서는 여러 명령어의 조합을 통해 하나의 프로그램을 실행한다. 이러한 명령어들은 짧은 사이클 동안 데이터 읽기/쓰기/덧셈 연산과 같은 기본적인 작업(basic work)을 수행하는데, 본 발명에서 이러한 명령어들은 하나의 명령으로 하나의 단일 데이터를 처리(SISD, Single Instruction stream Single Data stream)하기 때문에 스칼라 인스 트럭션(Scalar Instruction)이라고 지칭한다.
반면에 본 발명에서 제안하는 프리미티브 인스트럭션(Primitive Instruction)은 상술한 스칼라 인스트럭션의 조합으로 새롭게 정의되는 명령어로서, 하나의 명령으로 여러 개의 데이터를 처리(SIMD, Single Instruction stream Multiple Data stream)하는 벡터 연산을 수행한다.
일반적인 프로세서에서는 본 발명에서 제안하는 프리미티브 인스트럭션을 짧은 사이클 동안 수행(Execution)할 수 없기 때문에 특별히 구현된 하드웨어 블록이 요구된다.
본 발명에서, 프리미티브 인스트럭션으로 정의된 명령어 집합은 하드웨어 블록으로 분할되고, 프리미티브 인스트럭션을 어떻게 디자인하는가에 따라 하드웨어/소프트웨어 분할의 경계를 결정한다. 이에 의해, 다양한 환경에 적절히 대처할 수 있는 하드웨어/소프트웨어 분할 기법을 제공할 수 있다.
한편, 본 발명은 본 발명에 대응하는 기능을 수행하는 하드웨어 또는 장치를 통하여 컴퓨터상에서 구현될 수 있으며, 프로그램의 형태로 기록매체에 기록되어 구현될 수 있다.
이하, 본 발명의 바람직한 실시예에 따른 하드웨어/소프트웨어 통합설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법에 관하여 도 1을 참조하여 설명한다.
도 1은 본 발명의 바람직한 실시예에 따른 하드웨어/소프트웨어 통합설계 기 반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법에 관한 전체 흐름도이다.
먼저, 상기 도 1에 도시된 바와 같이, C 기반의 일반적인 소프트웨어 비디오 코덱은 함수 기반으로 설계되어 있기 때문에 연산 트리 그래프를 작성한다(S2).
다음으로, 프로파일링을 통하여 연산 트리 그래프의 세부 노드를 완성한다(S4).
다음으로, 완성된 연산 트리 그래프를 기반으로 프리미티브 인스트럭션을 정의할 목표 노드를 결정한다(S6).
다음으로, 결정한 목표 노드 내에서 클러스터링(Clustering)과 리파인먼트(Refinement) 작업을 통해 프리미티브 인스트럭션을 결정한다(S8).
다음으로, 상기 S8 단계에서 결정된 프리미티브 인스트럭션에 대해 비용 함수를 비교하여 미리 설정된 하드웨어/소프트웨어 통합 설계의 목표값을 만족하는지를 판단한다(S10).
마지막으로, 상기 S10 단계의 판단 결과, 목표값을 만족하는 경우 판단 대상이 된 프리미티브 인스트럭션들을 프리미티브 인스트럭션 세트(Primitive Instruction Set)라고 정의하고, 디자인 절차를 종료한다(S12).
상기 S10 단계의 판단 결과, 목표값을 만족하지 못하는 경우, 상기 S2 단계로 절차를 이행하여 프리미티브 인스트럭션 디자인을 재수행한다.
상기 S14 단계 이후, 상술한 S4 단계의 프로파일링과 S6 단계의 목표 노드 결정 과정을 통해 결정된 노드를 중심으로 재차 상기 S8 단계의 클러스터링과 리파 인먼트 과정을 거치게 된다.
만일 재차 결정된 목표 노드 내에 이전 단계에서 결정된 프리미티브 인스트럭션이 포함되어 있다면, 클러스터링과 리파인먼트 과정을 거쳐 새로운 스칼라 인스트럭션들과 함께 새로운 프리미티브 인스트럭션으로 재정의한다.
명령어의 재귀적 조합을 통해 더 큰 프리미티브 인스트럭션을 정의하는 클러스터링과 리파인먼트 과정은 더 많은 연산량을 더 신속하게 계산하는 하드웨어 블록을 생성하는 과정에 대응되기 때문에, 더 큰 범위에서 새롭게 정의된 프리미티브 인스트럭션에 의하여 이전의 단계보다 더 많은 연산량의 감소가 가능하다.
이하, 상기 S2 단계의 연산 트리 그래프 작성 및 상기 S4 단계의 프로파일링에 관하여 도 2를 참조하여 더욱 상세히 설명한다.
도 2는 소프트웨어 코덱 함수에서 연산 트리 구조로의 대응에 관한 모식도이다.
일반적인 소프트웨어 코덱은 상기 도 2에 도시된 바와 같이 순차적으로 상위 함수가 하위 함수를 호출하는 구조로 구성된다. 상기 도 2에서, Fij은 함수를 의미하며, i 및 j는 각각 함수의 레벨(수직적 위치)과 해당 레벨에서의 순서(수평적 위치)를 의미한다. 예를 들어, F11은 F21과 F22를 포함하는 상위 구조이며, F21은 시간상 F22를 앞선다. 직사각형 블록은 하위 함수를 포함하는 부모 함수를 의미하며, 타원 블록은 하위 함수를 갖지 않는 최하위 자식 함수를 의미한다.
도 2의 (a)와 같은 계층적 구조는 도 2의 (b)와 같은 트리 구조로 표현될 수 있다. 만일 도 2의 (a)의 F41과 같이 두 개 이상의 다른 함수가 동일한 하위 함수를 공유하는 경우, 하위 함수를 두 개로 분할하여 도 2의 (b)의 F41과 F44와 같이 다른 상위 함수의 자식 함수로 정의한다. 노드의 호출 횟수와 연산량을 분석하는 프로파일링 후, 임의의 함수 Fij는 도 2의 (b)에서와 같이 {Calls, Node_Complexity}를 원소로 하는 노드로 정의할 수 있다.
Calls는 노드가 전체 프로그램에서 몇 번 호출되었는가를 나타내는 척도(measure)이고, Node_Complexity는 노드가 한 번 호출될 때 해당 노드를 포함한 모든 하위 노드의 연산량을 의미한다. 특히, Node_Complexity는 해당 노드를 프리미티브 인스트럭션으로 정의한 후, 성능 향상의 정도를 예측하거나 하드웨어의 설계 비용을 나타내는 척도로 사용할 수 있다.
이하, 상기 S6 단계의 목표 노드 결정에 관하여 도 3을 참조하여 더욱 상세히 설명한다.
도 3은 목표 노드 결정에 관한 상세 흐름도이다.
하드웨어/소프트웨어 통합 설계에 의하여 원하는 성능 향상도를 정확하게 획득하기 위해서는 작성된 연산 트리 그래프에서 프리미티브 인스트럭션으로 정의할 노드를 적절하게 결정해야 한다. 즉, 프리미티브 인스트럭션으로 정의했을 때, 불필요한 하드웨어 비용을 지불하지 않기 위해서 향상도가 지나치게 크거나 작지 않도록 결정해야 한다.
따라서 상술한 프로파일링 후, 얻어지는 전체 연산량과 각 노드의 {Calls, Node_Complexity} 정보를 이용해 해당 노드 내에 프리미티브 인스트럭션이 정의되었을 때, 성능 향상의 정도를 예측하여 목표 노드를 결정한다.
먼저, 상기 도 3에 도시된 바와 같이, 다음의 [수학식 1]에 의해 현재의 상황을 기준으로 n배의 성능 향상을 달성하기 위해 추가적으로 필요한 향상도 Gest를 예측한다(S62).
Figure 112008003532139-pat00006
상기 [수학식 1]에서, T는 프리미티브 인스트럭션을 정의하기 전 소프트웨어의 초기 전체 연산량을 의미한다. 또한, n'은 이전 단계에서 달성한 성능 향상도로서, 이전 단계에서 프리미티브 인스트럭션을 정의함으로써 변화된 전체 연산량 T'를 이용하여 다음의 [수학식 2]와 같이 정의된다.
Figure 112008003532139-pat00007
다음으로, 추가적으로 필요한 향상도 Gest와, 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도를 비교하여 목표 노드를 결정하기 위한 노드 향상도를 예측한다(S64).
상술한 바와 같이, 연산 트리 그래프에서 Node_Complexity는 한 번 호출될 때 해당 노드를 포함한 모든 하위 노드의 연산량을 의미하기 때문에 해당 노드를 프리미티브 인스트럭션으로 정의할 때 Node_Complexity는 한 번의 호출 당 감소시킬 수 있는 최대 연산량을 의미하게 된다. 또한 Calls는 해당 노드가 전체 프로그램에서 호출된 횟수를 의미하기 때문에, Node_Complexity X Calls는 전체 프로그램에서 감소시킬 수 있는 최대 연산량을 의미하게 된다.
하드웨어 디자이너가 프리미티브 인스트럭션을 어떻게 설계하는가에 따라서 한 번 호출 시 예측 수행 사이클(Estimated Primitive Instruction Execution Cycles)을 정의할 수 있는데, 이를 P라고 정의한다. 이때, Calls X P 는 프리미티브 인스트럭션으로 변경하는 경우, 증가하는 전체 연산량에 해당한다.
따라서, 하나의 노드 A를 프리미티브 인스트럭션으로 변경하는 경우, 획득할 수 있는 노드 A의 성능 향상도 GA는 다음의 [수학식 3]과 같이 예측할 수 있다.
Figure 112008003532139-pat00008
상기 [수학식 3]에서, ACalls는 노드 A의 Calls를 나타내며, ANC는 노드 A의 Node_Complexity를 나타내고, AP는 노드 A를 프리미티브 인스트럭션으로 정의할 때, 설계하고자 하는 목표 수행 사이클을 나타낸다.
다음으로, 상기 [수학식 1]과 [수학식 3]을 이용하여 연산 트리 그래프의 후보 노드 중 목표 노드를 적절히 선택할 수 있도록 다음의 [수학식 4]와 같은 판별 식을 정의한다(S66).
Figure 112008003532139-pat00009
다음으로, 목표 노드의 향상도 GA가 추가적으로 필요한 향상도 Gest보다 큰지를 판단한다(S68).
마지막으로, 상기 S68 단계의 판단 결과, 상기 [수학식 4]에서의
Figure 112008003532139-pat00010
의 경우와 같이 목표 노드의 향상도 GA가 추가적으로 필요한 향상도 Gest보다 큰 경우 연산 트리 그래프의 자식 노드를 갖지 않는 모든 최하위 자식 노드에 대해서
Figure 112008003532139-pat00011
의 조건을 만족하는 노드 중 가장 작은 향상도를 갖는 노드를 목표 노드로 선택한다(S610).
상기 [수학식 4]에서의
Figure 112008003532139-pat00012
의 경우는 프리미티브 인스트럭션의 결정 후, n배의 성능 향상을 달성할 가능성이 높기 때문이다.
상기 S68 단계의 판단 결과, 상기 [수학식 4]에서의
Figure 112008003532139-pat00013
의 경우와 같이 목표 노드의 향상도 GA가 추가적으로 필요한 향상도 Gest보다 작거나 동일한 경우에는 연산 트리 그래프의 모든 최하위 노드에 대해서
Figure 112008003532139-pat00014
의 조건을 만족하는 노드 중 가장 높은 향상도를 갖는 노드를 목표 노드로 선택한다(S612).
상기 [수학식 4]에서의
Figure 112008003532139-pat00015
의 경우는 n 배의 성능 향상을 달성할 가능성이 거의 없기 때문이다. 판별 순서는 모든 최하위 노드에 대해서
Figure 112008003532139-pat00016
의 조건을 만족하는 노드가 존재하지 않으면
Figure 112008003532139-pat00017
의 조건으로 판별하는 순서를 취한다.
이하, 상기 S8 단계의 프리미티브 인스트럭션 결정 과정에 관하여 도 4를 참조하여 더욱 상세히 설명한다.
상기 S6 단계에 의해 결정된 목표 노드에 대한 프리미티브 인스트럭션 결정 과정은 크게 여러 명령어를 하나의 블록 단위로 생성하는 클러스터링 과정과 생성된 블록을 C 레벨에서 적당한 단위로 구분하기 위한 리파인먼트 과정의 두 과정으로 구성된다.
클러스터링 과정은 명령어 단위에서 호출 횟수가 동일한 명령어를 브랜치 단위로 분리해 기본 블록(Basic Block)을 생성하는 과정이다. 일반적으로 연산량 집약적(Computation-intensive)인 프로그램의 경우 특정 명령어들의 집합들이 반복적으로 수행되기 때문에 여러 개의 의미 있는 기본 블록들을 생성할 수 있다.
여러 명령어의 조합으로 이루어진 기본 블록은 레벨 0의 프리미티브 인스트럭션으로 정의될 수 있지만, 만일 도 4에 도시된 바와 같이 e 블록의 결과가 다시 b 블록에 영향을 주는 폐 루프(Closed Loop Flow)를 형성하게 되면, 상위 레벨에서 블록들을 묶어 새로운 기본 블록을 생성하여 레벨 1의 프리미티브 인스트럭션으로 정의한다.
그러나, 명령어를 수행하기 위해 초기 셋업 과정에 해당하는 기본 블록이 존재할 수 있으므로, 대응되는 C 코드를 살펴본 후, 리파인먼트(Refinement) 과정을 거쳐 최종적으로 프리미티브 인스트럭션을 결정한다. 도 4의 Level 1+ Refinement에 해당하는 블록들의 조합이 결정된 프리미티브 인스트럭션이다.
따라서 여러 개의 폐 루프가 생성되면 결정된 프리미티브 인스트럭션은 한 노드 내에서 여러 개가 가능하며, 상기 S10 단계의 비용 비교 과정 중에 목표값(제약조건)을 만족하지 못해 상기 도 2의 프리미티브 인스트럭션 디자인 루틴을 반복하게 되는 경우, 프리미티브 인스트럭션을 기본 블록으로 간주하고 클러스터링과 리파인먼트 과정을 다시 수행해 더 큰 단위로 프리미티브 인스트럭션을 재정의한다.
만일 결정된 목표 노드가 상기 [수학식 4]에서의
Figure 112008003532139-pat00018
의 경우에 해당하면, 노드 자체를 프리미티브 인스트럭션으로 정의하더라도 n배의 성능 향상을 달성할 수 없으므로, 클러스터링 과정에서 목표 노드 자체를 프리미티브 인스트럭션으로 정의한다.
결정된 프리미티브 인스트럭션은 소프트웨어 비디오 코덱에 여러 스칼라 인스트럭션의 조합으로 이루어진 특정 블록을 대체하는 새로운 명령어로 사용된다.
프리미티브 인스트럭션의 사용은 그것의 하드웨어의 설계에 따라 연산량이 달라지게 되지만, 범용 프로세서의 연산량보다는 작기 때문에 결과적으로 전체 연산량의 감소를 가져오게 된다. 위의 과정을 통해 결정된 프리미티브 인스트럭션은 소프트웨어의 블록을 대체하게 되고 목표값(제약조건)을 달성하기 위한 상기 S10 단계의 비용 비교 과정을 거쳐 최종적인 프리미티브 인스트럭션 세트를 얻게 된다.
이하, 상기 S10 단계 내지 S14 단계의 비용 비교 과정에 관하여 더욱 상세히 설명한다.
상기 S10 단계 내지 S14 단계의 비용 비교 과정은 기존 소프트웨어보다 n배 이상의 성능 향상을 만족하기 위해서 결정된 프리미티브 인스트럭션 세트가 적절히 결정되었나를 판별하는 과정으로, 판별 여부에 따른 반복 횟수에 따라 프리미티브 인스트럭션의 크기와 수행 사이클이 결정된다.
만일 소프트웨어의 초기 전체 연산량을 T라고 정의하면, 프리미티브 인스트럭션으로 변화된 모든 노드들의 속도 향상 이득을 합쳐 전체 이득 GT를 계산하여 다음의 [수학식 6]을 통해 비교한다. 프리미티브 인스트럭션으로 변화된 모든 노드들의 속도 향상 이득은 다음의 [수학식 5]와 같이 정의한다. [수학식 6]을 만족할 때, 프리미티브 인스트럭션으로 변화된 모든 노드들을 n배의 성능 향상을 위한 프리미티브 인스트럭션 세트로 정의하고 상기 도 3의 반복 과정을 종료한다.
Figure 112008003532139-pat00019
Figure 112008003532139-pat00020
상기 [수학식 5]에서, k는 프리미티브 인스트럭션으로 변화된 노드의 총 개수를 나타낸다.
추가적으로, 본 발명의 바람직한 실시예에 따른 프로파일링은 주로 소프트웨어의 최적화를 위해 사용되는 방법으로서, 많은 시간이 걸리는 핫 스팟(Hot Spot)을 찾아내기 위해 사용되는 방법 중 하나이다. 기존의 Vtune과 같은 프로파일러들은 명령어 기반으로 성능을 측정하기 때문에, 여러 개의 스칼라 인스트럭션의 조합으로 새롭게 정의되는 프리미티브 인스트럭션 명령어 단위는 측정이 어렵다. 예를 들어, 상기 도 4에서 노드 F41이 프리미티브 인스트럭션으로 정의되어 상위 노드 F31의 한 인스트럭션으로 고려되는 경우에는 전체 연산량을 측정할 수 없다. 따라서 프리미티브 인스트럭션 기반의 프로파일링 기법을 지원하도록 프로파일러를 설계하였다. 이러한 기법을 통해 연산 트리 그래프의 각 노드의 2 가지 원소 {Calls, Node_Complexity}를 구할 수 있다.
이상으로 본 발명의 기술적 사상을 예시하기 위한 바람직한 실시예와 관련하여 설명하고 도시하였지만, 본 발명은 이와 같이 도시되고 설명된 그대로의 구성 및 작용에만 국한되는 것이 아니며, 기술적 사상의 범주를 일탈함이 없이 본 발명에 대해 다수의 변경 및 수정이 가능함을 당업자들은 잘 이해할 수 있을 것이다. 따라서 그러한 모든 적절한 변경 및 수정과 균등물들도 본 발명의 범위에 속하는 것으로 간주되어야 할 것이다.
도 1은 본 발명의 바람직한 실시예에 따른 하드웨어/소프트웨어 통합설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법에 관한 전체 흐름도.
도 2는 소프트웨어 코덱 함수에서 연산 트리 구조로의 대응에 관한 모식도.
도 3은 목표 노드 결정에 관한 상세 흐름도.
도 4는 기본 블록 단위의 컨트롤 플로우에 관한 그래프.

Claims (8)

  1. 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션(Primitive Instruction) 디자인 방법에 있어서,
    (a) 비디오 코덱의 함수 구조에 대한 연산 트리 그래프를 작성하는 단계;
    (b) 프로파일링을 통하여 상기 연산 트리 그래프의 세부 노드를 완성하는 단계;
    (c) 완성된 연산 트리 그래프를 이용하여 프리미티브 인스트럭션을 정의할 목표 노드를 결정하는 단계;
    (d) 결정한 목표 노드 내에서 프리미티브 인스트럭션을 정의하는 단계; 및
    (e) 정의된 프리미티브 인스트럭션이 미리 설정된 하드웨어/소프트웨어 통합 설계의 목표값을 만족하는 경우, 상기 프리미티브 인스트럭션을 프리미티브 인스트럭션 세트로 확정하는 단계;를 포함하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 (d) 단계는,
    (d1) 명령어 집합으로부터 제 1 기본 블록(Basic Block)들을 생성하며, 상기 제 1 기본 블록들이 폐 루프(Closed Loop Flow)를 형성하는 경우 상기 폐 루프에 포함되는 상기 제 1 기본 블록들을 통합하여 제 2 기본 블록을 생성하는 클러스터링(Clustering)을 수행하는 단계; 및
    (d2) 생성된 상기 제 1 기본 블록들 또는 제 2 기본 블록들을 소정의 단위로 구분하는 리파인먼트(Refinement)를 수행하는 단계;를 포함하는 것을 특징으로 하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
  4. 제 1 항에 있어서,
    상기 (c) 단계는,
    (c1) 요구되는 성능 향상 수준을 달성하기 위해 추가적으로 필요한 향상도를 예측하는 단계;
    (c2) 상기 추가적으로 필요한 향상도와, 상기 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도를 비교하여 노드 향상도를 예측하는 단계; 및
    (c3) 목표 노드를 결정하기 위한 판별식을 정의하여 상기 판별식을 이용하여 계산한 결과 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 큰 경우, 상기 연산 트리 그래프의 모든 최하위 자식 노드에 대해 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 큰 조건을 만족하는 노드 중 가장 작은 향상도를 가지는 노드를 목표 노드로 결정하는 단계;를 포함하는 것을 특징으로 하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
  5. 제 4 항에 있어서,
    상기 (c2) 단계 이후에,
    (c4) 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 크지 않은 경우, 상기 연산 트리 그래프의 모든 최하위 자식 노드에 대해 목표 노드 향상도가 상기 추가적으로 필요한 향상도보다 크지 않은 조건을 만족하는 노드 중 가장 높은 향상도를 가지는 노드를 목표 노드로 결정하는 단계;를 더 포함하는 것을 특징으로 하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스 트럭션 디자인 방법.
  6. 제 4 항에 있어서,
    상기 (c1) 단계의 추가적으로 필요한 향상도는 다음의 수학식을 이용하여 예측하는 것을 특징으로 하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
    Figure 112008003532139-pat00021
    (상기 수학식에서, Gest는 n배의 성능 향상을 달성하기 위해 추가적으로 필요한 향상도를 나타내며, T는 프리미티브 인스트럭션을 정의하기 전의 초기 전체 연산량을 나타내고, n'은 이전의 향상도로서 이전에 변화된 전체 연산량 T'를 이용하여
    Figure 112008003532139-pat00022
    으로 표현된다.)
  7. 제 4 항에 있어서,
    상기 (c2) 단계의 상기 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도는 다음의 수학식에 의해 계산하는 것을 특징으로 하는 하드웨 어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
    Figure 112008003532139-pat00023
    (상기 수학식에서, GA는 프리미티브 인스트럭션으로 변경한 결과 획득할 수 있는 노드의 향상도를 나타내며, ACalls는 노드 A의 호출 횟수를 나타내고, ANC는 노드 A가 한번 호출될 때 노드 A를 포함한 모든 하위 노드의 연산량을 나타내며, AP는 설계하고자 하는 목표 수행 사이클을 나타낸다.)
  8. 제 1 항에 있어서,
    다음의 수학식을 만족하는 경우 상기 (e) 단계의 목표값을 만족한다고 판단하는 것을 특징으로 하는 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한 프리미티브 인스트럭션 디자인 방법.
    Figure 112008003532139-pat00024
    (상기 수학식에서, T는 프리미티브 인스트럭션을 정의하기 전의 초기 전체 연산량을 나타내며, GT는 n배의 성능 향상을 달성하기 위해 프리미티브 인스트럭션 으로 변화된 모든 노드들의 전체 속도 향상 이득으로서
    Figure 112008003532139-pat00025
    이고, k는 프리미티브 인스트럭션으로 변화된 노드의 총 개수를 나타낸다.)
KR1020080004733A 2008-01-16 2008-01-16 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법 KR100948097B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080004733A KR100948097B1 (ko) 2008-01-16 2008-01-16 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080004733A KR100948097B1 (ko) 2008-01-16 2008-01-16 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법

Publications (2)

Publication Number Publication Date
KR20090078893A KR20090078893A (ko) 2009-07-21
KR100948097B1 true KR100948097B1 (ko) 2010-03-16

Family

ID=41336841

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080004733A KR100948097B1 (ko) 2008-01-16 2008-01-16 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법

Country Status (1)

Country Link
KR (1) KR100948097B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116744000B (zh) * 2023-08-16 2023-10-13 北京麟卓信息科技有限公司 一种基于动态算法重构的视频编解码方式检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080022878A (ko) * 2006-09-08 2008-03-12 동부일렉트로닉스 주식회사 Jpeg2000 인코더를 설계하는 방법
KR20080042020A (ko) * 2006-11-08 2008-05-14 한국전자통신연구원 소프트웨어 및 하드웨어로 구현된 영상코덱의 통합시뮬레이션 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080022878A (ko) * 2006-09-08 2008-03-12 동부일렉트로닉스 주식회사 Jpeg2000 인코더를 설계하는 방법
KR20080042020A (ko) * 2006-11-08 2008-05-14 한국전자통신연구원 소프트웨어 및 하드웨어로 구현된 영상코덱의 통합시뮬레이션 방법

Also Published As

Publication number Publication date
KR20090078893A (ko) 2009-07-21

Similar Documents

Publication Publication Date Title
CN113703775B (zh) 一种编译方法、装置、设备及存储介质
Suzuki et al. Efficient software performance estimation methods for hardware/software codesign
JP5004965B2 (ja) 統計的タイミング解析におけるクリティカリティ予測のシステム及び方法
Sekanina et al. Automated search-based functional approximation for digital circuits
Casale-Brunet et al. Turnus: a unified dataflow design space exploration framework for heterogeneous parallel systems
Bezati et al. Synthesis and optimization of high-level stream programs
JP2005242569A (ja) データ処理装置設計方法、データ処理装置設計装置及びプログラム
KR101275727B1 (ko) 스테이트먼트를 재구성하는 방법 및 그 기능을 구비한컴퓨터 시스템
KR100948097B1 (ko) 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법
Biswas et al. ISEGEN: An iterative improvement-based ISE generation technique for fast customization of processors
JP2002108958A (ja) 回路設計システム、回路設計方法および回路設計プログラムを格納したコンピュータ読取り可能な記録媒体
Peixoto et al. Algorithm and architecture-level design space exploration using hierarchical data flows
Rashid et al. Visitor-based application analysis methodology for early design space exploration
US9600613B1 (en) Block-level code coverage in simulation of circuit designs
Widerspick et al. Latency measurements for an emulation platform on autonomous driving platform nvidia drive px2
Grun et al. System level memory size estimation
US20120226890A1 (en) Accelerator and data processing method
Hartleb Stochastic graph models for performance evaluation of parallel programs and the evaluation tool PEPP
Rabaey et al. Complexity estimation for real time application specific circuits
Goldbrunner et al. Memory access pattern profiling for streaming applications based on MATLAB models
Diguet et al. A framework for high level estimations of signal processing vlsi implementations
Qu et al. Estimating the utilization of embedded FPGA co-processor
CN108958793B (zh) 一种基于改进gn算法的程序控制流图划分方法
Pham et al. Machine learning approach to generate pareto front for list-scheduling algorithms
KR100924383B1 (ko) 하드웨어/소프트웨어 통합 설계 기반의 스케줄링 시스템 및방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee