KR100793210B1 - Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법 - Google Patents

Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법 Download PDF

Info

Publication number
KR100793210B1
KR100793210B1 KR1020060049317A KR20060049317A KR100793210B1 KR 100793210 B1 KR100793210 B1 KR 100793210B1 KR 1020060049317 A KR1020060049317 A KR 1020060049317A KR 20060049317 A KR20060049317 A KR 20060049317A KR 100793210 B1 KR100793210 B1 KR 100793210B1
Authority
KR
South Korea
Prior art keywords
memory
space
source code
decoder
memory space
Prior art date
Application number
KR1020060049317A
Other languages
English (en)
Other versions
KR20070115217A (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 KR1020060049317A priority Critical patent/KR100793210B1/ko
Publication of KR20070115217A publication Critical patent/KR20070115217A/ko
Application granted granted Critical
Publication of KR100793210B1 publication Critical patent/KR100793210B1/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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 발명의 영상압축기술의 하나인 H.264 디코더의 ARM 프로세서에서의 동작에 관한 것으로, 모바일 환경에 주로 사용되는 ARM 프로세서를 기반으로 C 언어로 구현된 H.264 디코더의 메모리 접근 횟수를 줄이는 프로그램 기법을 통해 메모리 접근에 소요되는 시간을 줄임으로써 보다 나은 성능의 H.264 디코더의 구현이 가능하도록 한 프로그램 기법에 관한 것이다.
H.264 디코더, ARM 프로세서

Description

ARM 프로세서에서의 메모리 접근 횟수를 줄인 디코더 구현방법{Decoder obtaining method reduced approaching number to memory in Advanced RISC Machines}
도 1은 종래의 JM(Joint Model) 8.5 버전의 소스코드인 동적 메모리 할당 시 소스 이미지를 가져오는 과정에서의 데이터 구조.
도 2는 본 발명에 따른 중간 버퍼가 생략된 데이터 처리 구조를 나타낸 도면.
도 3은 종래의 JM 8.5 버전의 소스코드인 동적 메모리 할당 방법을 나타낸 도면.
도 4는 본 발명에 따른 동적 메모리 할당 방법을 나타낸 도면.
도 5a 및 도 5b는 본 발명의 ARM 프로세서에서의 메모리 접근 횟수를 줄인 프로그램 기법을 나타낸 소스코드.
본 발명은 영상압축기술의 하나인 디코더의 ARM(Advanced RISC Machines) 프로세서의 동작에 관한 것으로써, 특히 많은 시간을 소요하는 메모리 접근 횟수를 줄임으로써 성능이 향상된 디코더를 구현할 수 있도록 한 방법에 관한 것이다.
C 언어로 작성된 프로그램 실행에 있어 대부분의 시간은 메모리와 데이터를 주고받는 과정에서 소요된다. 따라서 보다 나은 성능을 구현하기 위해서는 메모리 접근 횟수를 줄일 필요가 있다.
도 1에 도시한 바와 같이 디코더의 동작 과정은, 인코딩된 영상이 한 블록을 통과할 때마다 해당 블록에서의 처리에 의해 다음 블록에서 사용될 형태로 변환되고 마지막 과정을 거치면 인코딩 되기 전의 본래 영상으로 변환된다. 이 같이 각 블록의 통과시 변환된 영상은 일시적으로 메모리에 저장되었다가 사용되는데 이 과정에서 메모리 접근 동작이 필수적으로 발생되어야 하는 바, 메모리 접근 횟수가 많아질수록 장시간이 소요된다는 문제점이 있다.
현재 사용되고 있는 H.264는 ISO (국제 표준화기구)산하 MPEG (Moving Pictures Experts Groups)과 ITU (국제통신연맹)산하 VCEG이 영상압축방식을 공동 개발한 방식으로 현재 H.264 디코더 표준모델 프로그램은 JM(Joint Model)이라 하여 10.2 버전까지 나와 있다.
그러나 JM 프로그램은 비쥬얼 스튜디오 기반으로 개발되었으며 C 언어로 되어 있으므로 기본적인 JM 프로그램의 메모리 사용은 각 함수마다 자신의 작업공간을 메모리에 확보한 다음 해당 기능을 수행하게 된다.
이러한 각 함수에서의 작업공간 확보는 동적 메모리 할당을 사용하는데, 동 적 메모리 할당이란 작업에 필요한 만큼의 공간을 확보한 다음 다시 필요가 없어지면 확보한 메모리 공간을 반환하는 방식을 뜻한다. 이러한 방식은 물리적으로 동일 메모리 공간을 여러 함수에서 다른 변수들에 할당하여 효율적으로 사용할 수 있다는 점과, 동일 이름의 변수라 할지라도 매번 다른 크기로 할당할 수 있다는 장점이 있으나, 메모리 공간을 확보하기 위해 별도의 함수를 사용하기 때문에 추가적인 시간이 필요하다는 단점이 있다.
따라서, 본 발명은 상기와 같은 디코더 프로그램 동작과정에서 야기되는 문제점을 해결하기 위한 것으로서, 본 발명의 목적은 모바일 환경에 주로 사용되는 ARM 프로세서를 기반으로 C 언어로 구현된 H.264 디코더의 메모리 접근 횟수를 줄이는 프로그램 기법을 통해 메모리 접근에 소요되는 시간을 줄임으로써 보다 향상된 성능의 H.264 디코더를 구현할 수 있는 방법을 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 ARM 프로세서에서의 메모리 접근 횟수를 줄인 디코더 구현방법은 영상 압축 기술 중에 하나인 H.264 디코더의 ARM(Advanced RISC Machines) 프로세서 기반에서의 동작에 있어서, 동적 메모리 할당을 통해 할당될 메모리 공간을 미리 선언한 후, 미리 선언해 놓은 메모리 공간의 시작 주소값으로 이후에 사용될 포인터 변수의 주소값을 초기화시켜 메모리 접근 횟수를 줄이는 제1단계; 상기 메모리 접근 횟수를 줄이는 프로그램 기법에서 동적 메모리 할당을 이용하여 생성되는 메모리 공간 변수를 정적인 메모리 공간으로 변환하는 제2단계; 매 프레임 디코딩 시작시 소스 이미지를 가져오는 과정에서 중복 데이터 공간을 없애는 제3단계; 및 참조 프레임이 꽉 찼을 경우 참조 프레임 중 가장 오래된 데이터 공간을 해제하고 새로운 공간을 할당하는 과정을 생략하는 제4단계로 이루어진 것을 특징으로 한다.
이하, 본 발명의 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
본 발명은 H.264 디코더의 메모리 접근 횟수를 줄이는 프로그램 기법을 통해 메모리 접근에 소요되는 시간을 줄임으로써 보다 향상된 성능의 H.264 디코더를 구현하도록, 동적 메모리 할당과 같은 기능을 수행하기 위해 크게 변수의 선언과 주소값의 초기화로 각각 나뉘어 구성된다. 이에 대해 설명하기 위해 동적 메모리 할당 방식의 기존 소스코드(원본 JM 8.5 소스코드)와 부분별로 각각 비교하여 설명하면 다음과 같다.
[소스코드 1]
Figure 112006038802157-pat00001
상기 소스코드 1은 원본 JM 8.5 버전의 일부로써, 이를 살펴보면 input 이라는 포인터 변수를 선언한 다음 calloc 함수를 통해 sizeof(struct inp_par)만큼의 메모리 공간을 할당받은 것을 알 수 있다. 여기서 calloc 함수는 메모리에 주어진 인자만큼 크기의 공간을 할당하는 동시에 그 영역의 값을 모두 '0'으로 초기화한다. 따라서, 주어진 인자(변수크기)의 값이 크면 클수록 함수를 실행하는데 걸리는 시간은 길어지게 된다. 상기 calloc 함수는 할당받은 메모리의 시작주소를 리턴하게 되는데 이 주소값이 input의 주소가 된다. 즉, 동적 메모리 할당은 메모리 공간의 선언과 주소값의 초기화가 동시에 이루어진다.
[소스코드 2]
Figure 112006038802157-pat00002
본 발명의 상기 소스코드 2는 상술한 JM 8.5 버전의 원본 소스코드를 메모리 접근 횟수를 줄이는 프로그램 기법을 이용하여 수정한 것으로서, 수정된 소스코드 2를 살펴보면 동적 메모리 할당을 통해 할당될 메모리 공간을 미리 선언한 후, 미리 선언해 놓은 메모리 공간의 시작 주소값으로 이후에 사용될 포인터 변수의 주소값을 초기화시킨다. 이는 결과적으로 동적할당과 같은 기능을 수행하지만 calloc 함수에 소요되는 시간이 필요하지 않으므로 디코딩 성능 개선이 가능하다.
하지만 때에 따라 메모리 공간을 선언할 필요가 없는 부분이 있는데, 이러한 소스코드를 살펴보면 다음과 같다.
[소스코드 3]
Figure 112006038802157-pat00003
상기 소스코드 3은 원본 JM 8.5 버전 중 한 프레임의 디코딩을 시작할 때마다 디코딩에 필요한 소스 이미지를 가져오는 역할을 하는 부분의 일부이다.
원본 JM 8.5의 일부분인 상기 소스코드 3은 우선, nalucommon.c에서 n->buf 라는 메모리 공간을 할당하게 되는데 이것은 annexb.c에서의 nalu->buf에 해당한다. 따라서 상기 소스코드 3을 살펴보면 annexb.c에서 Buf 라는 메모리 공간을 할당한 다음 처리에 필요한 데이터를 저장하고, nalu->buf 공간에 nalu->len 길이만큼의 데이터를 복사하게 된다. 결과적으로 nalu->buf에 있는 데이터와 Buf에 있는 데이터의 내용은 동일하게 되고, 이 데이터는 원본 이미지(즉 264 파일)의 데이터 중 일부와 동일하다. 이러한 과정은 도 1에 도시되어 있으며, 이런 처리방식은 동일 데이터를 처리하기 위해 여러 공간을 사용하게 되므로 공간적으로나 시간적으로 낭비가 된다.
[소스코드 4]
Figure 112006038802157-pat00004
본 발명의 상기 소스코드 4는 상기 소스코드 3을 메모리 접근 횟수를 줄이는 프로그램 기법을 이용하여 수정한 것으로써, 우선적으로 원본 소스코드 3에 있던 nalu->buf와 Buf에 대한 메모리 공간의 할당을 하지 않는다. 대신 원본 이미지 데이터에서 필요한 부분의 주소값을 사용하여 변수를 초기화하여 메모리 공간을 할당하기 위해 소요되는 시간을 제거함으로써 디코더의 성능을 향상시킨다. 상기 소스코드 4에서 image_ptr은 원본 이미지 데이터의 포인터로써 원본 이미지의 주소값을 가지고 nalu->buf의 주소값을 원본 데이터 중 필요한 부분의 시작주소로 초기화시킨다.
즉, nalu->buf나 Buf와 같은 메모리 공간이 필요치 않을 뿐 아니라, 메모리 공간 할당을 위한 시간이 소요되지 않으므로 보다 뛰어난 성능의 디코더 구현이 가능하다. 이는 도 2에 도시한 바와 같다.
또한, 원본 JM 8.5 소스코드에서는 새로운 프레임을 디코딩하기 위해 dec_picture라는 이름의 변수로 새로운 공간에 메모리 할당을 한다. 이것은 나중에 참조 프레임 형태로 메모리에 저장되는데 이 메모리의 공간이 너무 클 경우 메모리 공간상에 임시적으로 저장되는 데이터(참조 프레임)의 크기가 너무 커지기 때문에 가능한 이 크기를 줄일 필요가 있다.
상기 공간은 소스코드 5와 같이 dpb(dpb:Docoded Picture Buffer).size라는 공간에 정의되며, 크기는 인코딩 시의 LevelIDC 값에 의해 결정이 되는데 이때 사용되는 함수가 getDpbSize()함수이다.
[소스코드 5]
Figure 112006038802157-pat00005
상기 getDpbSize()함수의 경우 기본적인 인코딩 파라미터를 사용할 경우 QCIF 크기의 영상을 디코딩할 때 16의 크기를 가진다. 본 발명은 이 값을 임의적으로 최소값을 가지도록 10으로 설정해서 메모리 공간 사용을 최대한 줄이도록 한다.
[소스코드 6]
Figure 112006038802157-pat00006
상기 소스코드 6은 JM 코드로써, dpb.size 변수에 미리 선언해 두었던 DpbSize 값을 대입함으로써 10으로 설정을 한다. 이는 영상 이미지의 크기에 상관없이 참조 프레임의 개수를 최소값인 10으로 설정함으로서 메모리 공간 사용을 최소로 한다.
상기 소스코드 6의 수정은 다음의 소스코드 수정을 위해서는 반드시 선행되어야 하는 과정이다.
[소스코드 7]
Figure 112006038802157-pat00007
상기 소스코드 7은 JM 8.5 원본 소스코드로 이차원 배열 공간을 할당하는 기능을 하는 함수이다. 상기 함수는 한 프레임을 디코딩 하는 동안 여러 번 호출되므로 동적 메모리 할당 시에 소요되는 시간이 많다. 이 함수를 메모리 접근을 줄이는 프로그램 기법을 통해 수정하면 다음과 같다.
[소스코드 8]
Figure 112006038802157-pat00008
본 발명의 상기 소스코드 8의 기본적인 구조는 원본 소스코드 7과 다소 비슷하나 이는 상기 소스코드 6을 통해 메모리 공간을 선언해 주어야만 가능한 것이다. 이를 위해 global_part.c라는 파일에 계산된 크기의 메모리 공간을 할당하고 할당된 공간의 시작 주소를 정의된 포인터의 주소값에 대입하여 초기화시킨다. 상기 미리 선언할 메모리 공간의 크기를 계산하는 방법은 소스코드 9를 통해 가능하다.
[소스코드 9]
Figure 112006038802157-pat00009
상기 소스코드 9는 참조 프레임에 포함되는 데이터이므로 참조 프레임의 크기보다 크게(+1) 선언하는 [DpbSize+1]과, 한 프레임을 디코딩하는 동안 호출된 최대 횟수인 [15] 및 , 호출 시 동적 할당에 의해 생성될 메모리 공간 크기 중 최대크기인 [144*176]으로 구성된다.
상기 소스코드 9를 참조하면 소스코드 8의 상기 함수가 한 프레임을 디코딩 하는 동안 여러 번 호출이 되는데 호출이 될 때마다 매번 다른 공간을 할당해 주어야 한다는 점을 알 수 있다. 이러한 부분을 위해 추가된 부분이 num_2D 라는 변수로 함수가 호출될 때마다 값이 1씩 증가하게 되며 한 프레임의 디코딩이 완료되면 다시 '0'으로 초기화된다.
즉, 생성된 공간이 참조 프레임에 포함되는 데이터이기 때문에 참조 프레임의 수 이상의 메모리 공간을 가지고 있어야 했지만 참조 프레임에 포함되지 않는 데이터들은 프레임이 바뀌더라도 다른 공간을 유지할 필요가 없기 때문에 변수 선언 시 프레임에 대해 고려할 필요가 없다. 따라서 이런 변수들은 소스코드 9에서 [DpbSize+1]을 제외한 [15][144*176]만을 가지는 형태가 된다.
또한, 도 3에 도시한 바와 같이 상기 소스코드 7의 JM 8.5 원본 소스코드에서 참조 프레임이 꽉 차면 그 중 가장 오래된 프레임을 삭제하고 가장 최근의 프레임을 다시 참조 프레임에 포함시키는데 이 과정에서 동적 메모리 할당의 경우 가장 오래된 데이터 공간의 할당을 해체한 후, 할당이 해제된 공간은 다른 변수들에게 재할당 될 수 있으므로 메모리 사용의 효율 면에서는 상당히 좋다고 볼 수 있으나, 이는 해제하고 재할당하는 과정에서 많은 시간이 소요되기 때문에 그로 인해 전체 성능에는 좋지 않은 영향을 끼친다.
이러한 문제점을 해결하고자 소스코드 8에 나타난 바와 같이 frame_number%(DpbSize+1) 라는 형태로 구현함으로써 참조 프레임이 꽉 차도 여분의 공간(+1)을 사용하여 디코딩 된 데이터를 저장하게 되고, 또한 그 다음 프레임을 디코딩할 경우에는 처음에 사용했던 그 공간을 다시 사용함으로써 메모리 공간을 해제하고 재할당하는 과정을 생략하는 방식으로 이는 도 4에 도시한 바와 같다.
상기 다시 사용되는 메모리 공간은 이미 참조 프레임이 포함되지 않는 데이터이므로 중복해서 사용해도 무방하다.
상술한 프로그램 기법을 통해 이루어진 ARM 프로세서에서의 메모리 접근 횟수를 줄이는 프로그램은 도 5a와 도 5b에 나타낸 소스코드와 같다.
본 발명은 특정한 실시예를 들어 설명하였으나, 본 발명은 이에 한정하는 것은 아니며, 본 발명의 기술적사상의 범주내에서는 수정 및 변형 실기가 가능함은 물론이다.
상술한 바와 같이 본 발명에 의한 ARM 프로세서에서의 메모리 접근 횟수를 줄인 디코더 구현방법은 소스코드의 수정만을 통해 부가적인 하드웨어의 추가 없이 동작 성능 향상이 가능하며, 특히 모바일 환경에서 주로 사용되는 QCIF(Qu Arter CIF : Common Intermediate Format) 영상에 대해서는 보다 향상된 성능의 디코더를 구현할 수 있다.

Claims (2)

  1. 영상 압축 기술 중에 하나인 H.264 디코더의 ARM(Advanced RISC Machines) 프로세서 기반에서의 동작에 있어서,
    동적 메모리 할당을 통해 할당될 메모리 공간을 미리 선언한 후, 미리 선언해 놓은 메모리 공간의 시작 주소값으로 이후에 사용될 포인터 변수의 주소값을 초기화시켜 메모리 접근 횟수를 줄이는 제1단계;
    상기 메모리 접근 횟수를 줄이는 프로그램 기법에서 동적 메모리 할당을 이용하여 생성되는 메모리 공간 변수를 정적인 메모리 공간으로 변환하는 제2단계;
    매 프레임 디코딩 시작시 소스 이미지를 가져오는 과정에서 중복 데이터 공간을 없애는 제3단계; 및
    참조 프레임이 꽉 찼을 경우 참조 프레임 중 가장 오래된 데이터 공간을 해제하고 새로운 공간을 할당하는 과정을 생략하는 제4단계로 이루어진 것을 특징으로 하는 ARM 프로세서에서의 메모리 접근 횟수를 줄인 디코더 구현방법.
  2. 삭제
KR1020060049317A 2006-06-01 2006-06-01 Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법 KR100793210B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020060049317A KR100793210B1 (ko) 2006-06-01 2006-06-01 Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060049317A KR100793210B1 (ko) 2006-06-01 2006-06-01 Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법

Publications (2)

Publication Number Publication Date
KR20070115217A KR20070115217A (ko) 2007-12-05
KR100793210B1 true KR100793210B1 (ko) 2008-01-10

Family

ID=39141711

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060049317A KR100793210B1 (ko) 2006-06-01 2006-06-01 Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법

Country Status (1)

Country Link
KR (1) KR100793210B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101949123B1 (ko) 2012-02-27 2019-02-18 삼성전자주식회사 데이터 복호화 장치 및 방법
CN110035292A (zh) * 2019-03-18 2019-07-19 佛山市顺德区中山大学研究院 一种低片上内存的视频参考帧读写方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020021081A (ko) * 1999-02-05 2002-03-18 추후기재 구성가능한 프로세서를 설계하기 위한 프로세서 자동 생성시스템 및 방법
KR20060055521A (ko) * 2003-07-23 2006-05-23 핑 캉 흐슝 디지털 미디어 카트리지 시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020021081A (ko) * 1999-02-05 2002-03-18 추후기재 구성가능한 프로세서를 설계하기 위한 프로세서 자동 생성시스템 및 방법
KR20060055521A (ko) * 2003-07-23 2006-05-23 핑 캉 흐슝 디지털 미디어 카트리지 시스템 및 방법

Also Published As

Publication number Publication date
KR20070115217A (ko) 2007-12-05

Similar Documents

Publication Publication Date Title
JP7191240B2 (ja) ビデオストリーム復号方法、装置、端末機器およびプログラム
US20110113220A1 (en) Multiprocessor
US8532196B2 (en) Decoding device, recording medium, and decoding method for coded data
CN113727114B (zh) 一种可转码的视频解码方法
Lund et al. Execution of dataflow process networks on OpenCL platforms
Juurlink et al. Scalable parallel programming applied to H. 264/AVC decoding
CN113874916A (zh) Ai辅助的可编程硬件视频编解码器
KR100793210B1 (ko) Arm 프로세서에서의 메모리 접근 횟수를 줄인 디코더구현방법
US10757430B2 (en) Method of operating decoder using multiple channels to reduce memory usage and method of operating application processor including the decoder
CN106358042B (zh) 使用视频图像的帧间预测的并行解码器
US6665340B1 (en) Moving picture encoding/decoding system, moving picture encoding/decoding apparatus, moving picture encoding/decoding method, and recording medium
TWI601075B (zh) 移動補償影像處理裝置與影像處理方法
US10440359B2 (en) Hybrid video encoder apparatus and methods
Desnos et al. Distributed memory allocation technique for synchronous dataflow graphs
JP2004062220A (ja) 情報処理装置、情報処理方法、およびプログラム変換装置
CN114374848B (zh) 一种视频编码优化方法和系统
Barbosa et al. Parallelizing MPEG video encoding using multiprocessors
Azevedo et al. A highly scalable parallel implementation of H. 264
Soderquist et al. Memory traffic and data cache behavior of an MPEG-2 software decoder
JP2010073210A (ja) 画像処理装置
Chavarrias et al. An automatic tool for the static distribution of actors in RVC-CAL based multicore designs
Kenter et al. Designing digital video systems: Modeling and scheduling
AU2013248237A1 (en) Image scaling process and apparatus
US11729395B2 (en) Methods and devices for extracting motion vector data from compressed video data
Lehtoranta et al. Real-time H. 263 encoding of QCIF-images on TMS320C6201 fixed point DSP

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
FPAY Annual fee payment

Payment date: 20110104

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee