KR101956197B1 - 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치 - Google Patents

그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치 Download PDF

Info

Publication number
KR101956197B1
KR101956197B1 KR1020120078326A KR20120078326A KR101956197B1 KR 101956197 B1 KR101956197 B1 KR 101956197B1 KR 1020120078326 A KR1020120078326 A KR 1020120078326A KR 20120078326 A KR20120078326 A KR 20120078326A KR 101956197 B1 KR101956197 B1 KR 101956197B1
Authority
KR
South Korea
Prior art keywords
data
gpu
size
unit
texel
Prior art date
Application number
KR1020120078326A
Other languages
English (en)
Other versions
KR20140011671A (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 KR1020120078326A priority Critical patent/KR101956197B1/ko
Priority to US13/940,947 priority patent/US9355428B2/en
Priority to EP13176869.9A priority patent/EP2688037B1/en
Priority to PCT/KR2013/006416 priority patent/WO2014014282A1/en
Publication of KR20140011671A publication Critical patent/KR20140011671A/ko
Application granted granted Critical
Publication of KR101956197B1 publication Critical patent/KR101956197B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

본 발명은 그래픽 처리 유닛(GPU; Graphic Processing Unit)을 이용하는 데이터 처리 방법 및 장치에 관한 것으로, 본 발명의 일 실시 예에 따르는 GPU를 이용한 데이터 처리 방법은 연산 대상 데이터 및 연산 대상 데이터에 적용할 연산자 정보를 획득하는 단계, 상기 연산 대상 데이터를 GPU의 텍셀(Texel)의 채널(channel) 요소 크기 단위로 분할하는 분할 단계, 상기 분할된 데이터에 대해 연산을 수행하여 연산 결과를 반환하도록 상기 GPU를 제어하는 명령(instruction) 및 상기 분할된 데이터를 상기 GPU에 송신하는 단계 및 상기 GPU로부터 연산 결과값을 획득하는 단계를 포함할 수 있다. 본 발명의 일 실시 예에 따르면 연산 성능을 향상시킬 수 있는 GPU를 이용한 데이터 처리 장치 및 방법을 제공할 수 있는 효과가 있다.

Description

그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치{METHOD AND APPARATUS FOR DATA PROCESSING USING GRAPHIC PROCESSING UNIT}
본 발명은 데이터 처리 방법 및 장치에 관한 것으로 더욱 상세하게는 그래픽 처리 유닛(GPU; GRAPHIC PROCESSING UNIT)을 이용한 데이터 처리 방법 및 장치에 관한 것이다.
데이터 처리를 위하여 일반적으로 중앙 처리 유닛(CPU; Central Processing Unit)이 활용된다. 최근 CPU의 성능은 크게 향상되고, 특히 멀티미디어 및 신호처리 응용 프로그램의 효율적인 동작을 위해 단일 명령 복수 데이터(SIMD; Single Instruction Multiple Data) 아키텍처가 사용되고 있다. SIMD는 병렬 프로세싱의 한 종류로, 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식을 일컫는다.
그래픽 처리 유닛(GPU; GRAPHIC PROCESSING UNIT)은 일반적으로 그래픽스 처리를 위한 장치이다. 최근에는 범용 GPU(GPGPU; General-Purpose GPU)가 활용되고 있다. GPGPU는 복수 코어로 구성되어 병렬 프로그램에 적합하다. GPGPU는 현재 데스크탑 컴퓨터에서만 활용되고 있다. GPGPU 동작을 위해서는 프로그래머가 OpenCL(Open Computing Language)/CUDA™(Compute Unified Device Architecture)를 활용하여 프로그래밍하여야 한다.
GPGPU는 보통의 GPU에 비하여 고가이고 더 복잡하다. 복잡한 그래픽스 연산을 수행하지 않을 때에 보통의 GPU를 그래픽스 연산이 아닌 다른 연산을 위해 활용할 수 있다면 전자 장치의 성능 향상에 크게 기여할 것이다.
본 발명은 상술한 문제점을 해결하기 위하여 제안된 것으로 연산 성능을 향상시킬 수 있는 GPU를 이용한 데이터 처리 장치 및 방법을 제공하는데 그 목적이 있다.
상술한 과제를 달성하기 위하여, 본 발명의 일 실시 예에 따르는 GPU를 이용한 데이터 처리 방법은 연산 대상 데이터 및 연산 대상 데이터에 적용할 연산자 정보를 획득하는 단계, 상기 연산 대상 데이터를 GPU의 텍셀(Texel)의 채널(channel) 요소 크기 단위로 분할하는 분할 단계, 상기 분할된 데이터에 대해 연산을 수행하여 연산 결과를 반환하도록 상기 GPU를 제어하는 명령(instruction) 및 상기 분할된 데이터를 상기 GPU에 송신하는 단계 및 상기 GPU로부터 연산 결과값을 획득하는 단계를 포함할 수 있다.
상술한 과제를 달성하기 위하여, 본 발명의 일 실시 예에 따르는 GPU를 이용한 데이터 처리 장치는 연산 대상 데이터 및 연산 대상 데이터에 적용할 연산자 정보를 획득하고 상기 연산 대상 데이터를 GPU의 텍셀(Texel)의 채널(channel) 요소 크기 단위로 분할하는 데이터 핸들러, 상기 분할된 데이터에 대해 연산을 수행하여 연산 결과를 반환하도록 상기 GPU를 제어하는 명령(instruction) 및 상기 분할된 데이터를 상기 GPU에 송신하고, 상기 GPU로부터 연산 결과값을 획득하는 프레임 버퍼 관리자를 포함할 수 있다.
본 발명의 일 실시 예에 따르면 연산 성능을 향상시킬 수 있는 GPU를 이용한 데이터 처리 장치 및 방법을 제공할 수 있는 효과가 있다.
도 1은 본 발명의 일 실시 예에 따르는 데이터 처리 장치(100)의 블록구성도이다.
도 2는 본 발명의 일 실시 예에 따르는 데이터 처리 장치(100)의 데이터 처리 과정의 순서도이다.
도 3은 연산자가 행렬의 곱 또는 행렬의 합인 경우 결과값 데이터의 크기 결정 과정의 순서도이다.
도 4a 내지 도 4c는 본 발명의 일 실시 예에 따르는 데이터 분할 과정의 순서도이다.
도 5a는 4바이트 정수형 데이터의 분할을 나타낸 도면이다.
도 5b는 4바이트 부동소수점 실수의 바이트 분할 연산을 나타낸다.
도 6a 및 도 6b는 본 발명의 일 실시 예에 따르는 정수형 연산 대상 데이터 복원 과정의 순서도이다.
이하, 본 발명의 실시 예를 첨부된 도면을 참조하여 상세하게 설명한다.
실시 예를 설명함에 있어서 본 발명이 속하는 기술 분야에 익히 알려져 있고 본 발명과 직접적으로 관련이 없는 기술 내용에 대해서는 설명을 생략한다. 이는 불필요한 설명을 생략함으로써 본 발명의 요지를 흐리지 않고 더욱 명확히 전달하기 위함이다.
마찬가지 이유로 첨부 도면에 있어서 일부 구성요소는 과장되거나 생략되거나 개략적으로 도시되었다. 또한, 각 구성요소의 크기는 실제 크기를 전적으로 반영하는 것이 아니다. 각 도면에서 동일한 또는 대응하는 구성요소에는 동일한 참조 번호를 부여하였다.
이하, 본 발명의 실시 예들에 의하여 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치를 설명하기 위한 도면들을 참고하여 본 발명에 대해 설명하도록 한다.
도 1은 본 발명의 일 실시 예에 따르는 데이터 처리 장치(100)의 블록구성도이다.
도 1을 참조하면, 본 발명의 일 실시 예에 따르는 데이터 처리 장치(100)는 CPU(180), GSIMD(GPU SIMD) 유닛(110), 및 GPU(190)를 포함할 수 있다. 여기서는 GSIMD 유닛(110)이 CPU(180)와 독립된 것으로 표현됐으나, 실제로는 GSIMD 유닛(110)은 CPU(180) 상에서 실행되는 소프트웨어, 또는 CPU(180) 동작 중에 필요한 기능을 제공하는 라이브러리의 형태로 구현될 수 있다. 이하에서는 편의상 CPU(180)는 실제 CPU(180)의 구성 중 GSIMD 유닛(110)의 기능을 제외한 부분을 가리키는 것으로 정한다. 따라서, 이하 CPU(180)와 GSIMD 유닛(110)이 논리적으로 분리된 것으로 보고 설명한다. 다만 본원 발명의 권리범위가 이에 한정되지는 않는다.
CPU(180)는 데이터 처리 장치(100)의 전반적인 동작을 제어한다. 특히 CPU(180)는 연산 대상 데이터와 그 연산 대상 데이터에 적용할 연산자 정보를 획득하면, 그에 따라 연산을 수행하여 결과를 반환한다. CPU(180)의 동작은 운영 체제 또는 사용자 프로그램 기타 소프트웨어에 의하여 설정될 수 있다. 특히 본 발명의 일 실시 예에 따르면 CPU(180)는 GPU(190)를 이용하여 연산을 수행할 것이 정해진 연산에 대해서는 GSIMD 유닛(110) 및 GPU(190)를 이용하여 연산을 수행한다. 이 경우 CPU(180)는 연산 대상 데이터와 연산자 정보를 GSIMD 유닛(110)을 통해 변환하여 GPU(190)에 전달할 수 있다. 또한 CPU(180)는 GPU(190)로부터 GSIMD 유닛(110)을 통해 결과를 획득할 수 있다.
CPU(180)가 GSIMD 유닛(110)을 활용하도록 하기 위해서 프로그래머는 SIMD 명령어와 유사하거나 동일한 명령어를 활용할 수 있다. 이하에서 CPU(180)가 GSIMD 유닛(110)을 활용하도록 하기 위한 명령어 인터페이스를 GSIMD API라고 칭한다.
예를 들어 GSIMD API는 GSIMD_AXPY(X,Y,a,b,sizeX,sizeY) 함수를 포함할 수 있다. X는 하나 이상의 데이터를 포함하는 배열(또는 집합, 목록 기타 유사한 구조를 포함한다. 이하 같다.)이고 sizeX는 X에 포함된 데이터의 개수를 의미한다. Y는 하나 이상의 데이터를 포함하는 배열이고 sizeY는 Y에 포함된 데이터의 개수를 의미한다. sizeX 또는 sizeY가 0인 경우는 오류로 처리하거나, 널(null)을 반환할 수 있다. GSIMD_AXPY 함수를 호출하면, GSIMD 유닛(110)은 GPU(190)를 활용하여 X의 각 원소 및 Y의 각 원소에 대해 연산을 수행하여 결과를 반환한다. 예를 들어 X의 i번째 원소가 x_i 이고 Y의 i번째 원소가 y_i라면 i번째 결과값 z_i=(x_i*a+y_i+b)이다. GSIMD 유닛(110)은 결과값의 배열을 획득한 뒤 CPU(180)에 반환한다. 실제 연산은 GPU(190)에서 수행되며, GPU(190)의 복수의 쉐이더(shader)(194)에서 X, Y의 여러 원소에 대한 연산이 병렬적으로 수행될 수 있다. sizeX와 sizeY의 값이 서로 다른 경우 GSIMD 유닛(110)은 이를 오류로 처리하거나, sizeX와 sizeY 중 더 작은 값에 해당하는 개수의 데이터에 대해서만 연산을 수행하여 결과를 반환할 수 있다.
API는 예를 들어 정수/실수의 사칙연산, 복소수에 대한 사칙연산, 행렬(matrix)의 곱, 행렬의 트랜스포즈(transpose), 역행렬(inverse matrix) 연산, 벡터의 내적(inner product), 벡터의 외적(cross product) 기타 하나 이상의 데이터에 대한 연산에 대한 함수를 포함할 수 있다.
GSIMD 유닛(110)은 CPU(180)와 GPU(190)의 사이에서 인터페이스를 제공한다. GSIMD 유닛(110)은 연산 대상 데이터 및 연산 대상 데이터에 적용할 연산자 정보를 획득하면, 연산 대상 데이터를 분할 및/또는 변환하여 GPU(190)로 전달한다. 또한 GSIMD 유닛(110)은 연산자 정보를 기초로 GPU(190)가 어떠한 연산을 하고, 어떠한 방식으로 결과값을 반환하여야 하는지에 대한 명령(instruction)을 GPU(190)에 전달할 수 있다.
GSIMD 유닛(110)은 데이터 핸들러(112) 및 프레임버퍼 관리자(114)를 포함할 수 있다. 데이터 핸들러(112)는 연산 대상 데이터를 특정 크기로 분할하여 GPU(190)로전달한다. 또한 프레임버퍼 관리자(114)는 GPU(190)가 연산 결과를 반환할 프레임 버퍼의 크기 및/또는 위치를 결정하고 이를 GPU(190)에게 알려줄 수 있다. GSIMD 유닛(110)의 세부 구성은 실질적으로 하나의 모듈에 함께 구현될 수도 있다. 다만 설명의 편의를 위해 GSIMD 유닛(110)이 데이터 핸들러(112) 및 프레임버퍼 관리자(114)로 구성되는 것으로 가정한다.
GPU(190)는 GSIMD 유닛(110)으로부터 전달받은 분할된 연산 대상 데이터를 복원하고, 전달받은 명령에 따라 연산을 수행한 후 연산 결과를 반환한다.
GPU(190)는 수신부(192), 쉐이더(shader)(194) 및 프레임 버퍼(196)를 포함한다.
수신부(192)는 GSIMD 유닛(110)으로부터 분할된 연산 대상 데이터 및 수행할 명령을 수신한다. 쉐이더(194)는 수신한 (분할된) 연산 대상 데이터를 이용하여 수신할 명령을 수행하고 프레임 버퍼(196)에 결과값을 저장한다. GSIMD 유닛(110)은 명령을 통해 결과값을 반환할 프레임 버퍼(196) 상의 크기 및/또는 위치를 지정할 수 있다. GSIMD 유닛(110) 또는 CPU(180)는 프레임 버퍼(196) 지정된 위치에서 결과값을 반환받을 수 있다.
종래의 GPU는 그 자체로는 일반 데이터 연산, 예를 들어 행렬 곱, 행렬 합 연산이나, 정수의 곱셈, 실수의 덧셈 등의 연산을 수행하여 그 연산결과를 반환하는 구성요소가 아니다. 하지만 본 발명에 따르면, GSIMD 유닛(110)이 연산 대상 데이터를 그래픽 데이터 형식으로, 즉 텍셀에 저장되는 형식으로 변형하여 GPU(190)에게 전달한다. GPU(190)는 본래의 기능인 그래픽 처리 기능을 활용하여 일반 데이터 연산을 수행하고 이를 GSIMD 유닛(110)에게 반환한다. 보다 상세히 설명하면, GPU(190)는 그래픽 데이터 형식의 데이터를 원래의 연산 대상 데이터로 복원하여 일반 데이터 연산을 수행한 뒤 그 결과를 역시 그래픽 데이터 형태로, 즉 텍셀에 저장되는 형태로 변형하여 프레임 버퍼(196)를 통해 반환한다. 이러한 방식을 통해 GPU(190)가 본래 수행할 수 있는 그래픽 연산 이외에 일반 데이터 연산을 수행할 수 있다. 또한 CPU(180)가 별도의 연산을 수행하는 동안 GPU(190)가 동시에, 병렬적으로 다른 연산을 수행할 수 있어 데이터 연산의 성능을 극대화할 수 있다.
CPU(180), GSIMD 유닛(110), GPU(190)의 상세한 동작에 대해서는 도 2 내지 도 9를 참조하여 후술한다.
도 2는 본 발명의 일 실시 예에 따르는 데이터 처리 장치(100)의 데이터 처리 과정의 순서도이다.
단계 205에서 GSIMD 유닛(110)의 프레임 버퍼 관리자(114)는 CPU(180)로부터 연산자 정보 및 연산 대상 데이터의 크기(size) 정보를 획득한다. GPU(190)는 복수의 데이터를 병렬로 처리할 수 있고, GSIMD 유닛(110)도 복수의 데이터를 수신하여 GPU(190)에게 전달하여 처리할 수 있다. 연산자 정보는 연산 대상 데이터에 대해서 어떠한 연산을 수행해야 하는지에 대한 정보이다. 연산 대상 데이터의 크기 정보는 연산 대상 데이터의 개수 정보를 포함한다. 예를 들어 4바이트 정수 8개를 포함하는 X와 역시 4바이트 정수 8개를 포함하는 Y의 합을 계산하는 경우 개수 정보는 8이 된다. 실시 예에 따라서는 단위 데이터의 크기 정보가 더 포함될 수 있다. 즉, 단위가 되는 데이터가 4바이트 정수라면 단위 데이터의 크기 정보는 4가 된다. 단위가 되는 데이터가 1바이트 정수라면, 단위 데이터의 크기 정보는 1이 된다. 연산 대상 데이터가 행렬이라면 연산 대상 데이터의 크기 정보는 그 행렬의 행의 개수 정보 및 열의 개수 정보를 포함할 수 있다. 연산자가 행렬 곱이라면 행렬 곱의 대상이 되는 두 행렬에 대해 각각의 행의 개수 정보 및 열의 개수 정보가 연산 대상 데이터의 크기 정보로서 제공될 수 있다.
단계 210에서 프레임 버퍼 관리자(114)는 연산자 정보 및 데이터 크기 정보를 기초로 결과값을 반환받을 프레임 버퍼의 크기를 결정한다. 단위 데이터의 크기가 4바이트이고 결과값이 8개의 단위 데이터를 포함한다면, 32바이트에 해당하는 프레임 버퍼 공간이 결과값을 반환받을 프레임 버퍼 공간으로 할당된다. 프레임 버퍼의 크기는 결과값 반환을 위해 필요한 최소한의 크기로 결정됐을 때 가장 우수한 성능을 보인다. 또한 후술하는 바와 같이 1바이트, 또는 2바이트 크기의 데이터를 두 개 이상 묶어서 4바이트 공간의 텍셀에 저장하는 경우 역시 성능 향상을 기대할 수 있다.
연산 대상 데이터와 결과값 데이터의 크기가 같은 경우 연산 대상 데이터의 크기에 따라 결과값을 반환받을 프레임 버퍼 크기가 결정된다. 예를 들어 연산 대상 데이터 X가 4바이트 정수 8개이고, 연산 대상 데이터 Y가 4바이트 정수 8개, 연산자는 두 데이터 간의 합이라면, 결과값도 4바이트 정수 8개이다. 따라서 반환받을 프레임 버퍼 크기는 32바이트가 된다. 다만 행렬의 곱이나 벡터 내적 등에 대해서는 연산 대상 데이터의 크기와 결과값 데이터의 크기가 다른 경우이므로 별도의 처리가 필요하다. 연산자가 벡터 내적인 경우 결과값은 연산 데이터(벡터) 중 단위 데이터(벡터의 성분)의 크기와 같다. 벡터의 성분이 4바이트 정수라면 결과값은 4바이트를 차지한다.
도 3은 연산자가 행렬의 곱 또는 행렬의 합인 경우 결과값 데이터의 크기 결정 과정의 순서도이다.
단계 310에서 GSIMD 유닛(110)은 연산 대상 데이터, 즉 연산 대상 행렬(A 및 B)의 크기 정보를 획득한다. 본 실시 예에서 데이터 A는 x1개의 행과 y1개의 열을 가진다. 데이터 B는 x2개의 행과 x2개의 열을 가진다.
단계 320에서 GSIMD 유닛(110)은 연산자 정보가 어떠한 연산자를 지시하는지 판단한다. 연산자 정보가 행렬곱을 지시하는 경우 과정은 단계 330으로 진행한다. 단계 330에서 GSIMD 유닛(110)은 결과값 데이터가 x1개의 행과 y2개의 열을 가지는 것으로 판단한다. 연산자 정보가 행렬합을 지시하는 경우 과정은 단계 340으로 진행한다. 단계 340에서 GSIMD 유닛(110)은 결과값 데이터가 x1개의 행과 y1개의 열을 가지는 것으로 판단한다. 연산자 정보가 행렬곱을 지시하는 경우 y1은 x2와 같은 값을 가져야 하고 이를 만족하지 않을 경우 GSIMD 유닛(110)은 전달받은 연산자 정보 및 연산 대상 데이터가 오류를 포함하고 있음을 CPU(180)에게 알릴 수 있다. 또한 연산자 정보가 행렬합을 지시하는 경우 x1은 x2와 같은 값을 가지고 y1은 y2와 같은 값을 가져야 한다. 마찬가지로 이를 만족하지 않을 경우 GSIMD 유닛(110)은 전달받은 연산자 정보 및 연산 대상 데이터가 오류를 포함하고 있음을 CPU(180)에게 알릴 수 있다.
도 3에서는 행렬곱과 행렬합의 경우만을 설명했으나, 다른 연산자에 대해서도 유사한 판단이 수행될 수 있다.
도 2로 돌아와서, 단계 210에서 결과값 데이터를 반환할 프레임 버퍼의 크기를 결정할 때, 프레임 버퍼의 단위 구성요소인 텍셀(Texel)의 크기를 고려할 수 있다. 예를 들어 텍셀의 (최대) 크기가 4바이트이고, 연산 결과값의 행렬의 원소도 4바이트 정수라면, 결과값 데이터가 4x4 행렬일 때 16(=4x4)개의 텍셀이 결과값 데이터를 반환할 프레임 버퍼로 할당될 수 있다.
하지만 연산 결과값의 행렬의 원소가 2바이트 정수일 경우 두 가지 모드를 가정할 수 있다. 빠른 처리 모드에서는, GPU(190)는 하나의 텍셀(4바이트)에 두 개의 원소(2바이트)를 저장하여 반환한다. 즉 결과값 데이터가 4x4 행렬일 때 4바이트 텍셀 8개가 이용될 수 있다. 하지만 일반 처리 모드에서는 GPU(190)는 텍셀 크기가 2바이트인 유형의 텍셀을 이용하고 한 텍셀에 하나의 원소만을 저장하여 반환할 수 있다. 즉 결과값 데이터가 4x4 행렬일 때 2바이트 텍셀 16개가 이용될 수 있다. 빠른 처리 모드에서는 프레임 버퍼의 개수 자체가 줄어들어 성능 향상을 꾀할 수 있다.
단계 215에서 프레임 버퍼 관리자(214)는 결정된 프레임 버퍼의 크기를 포함하는 프레임 버퍼 생성 명령을 GPU(190)에 전달한다. GPU(190)는 단계 220에서 단계 215의 프레임 버퍼 생성 명령에 따라 결과값 프레임 버퍼를 생성한다. 결과값 프레임 버퍼의 위치 정보는 추후 GSIMD 유닛(110)이 결과값을 GPU(190)로부터 가져오기 전에, 또는 GSIMD 유닛(110)이 결과값을 GPU(190)로부터 가져오려고 할 때 GSIMD 유닛(110)에게 알려질 수 있다.
단계 225에서 CPU(180)는 연산 대상 데이터 및 연산 대상 데이터의 유형을 데이터 핸들러(112)에게 전달한다. 연산 대상 데이터의 유형은 연산 대상 데이터의 단위 데이터의 유형을 말한다. 즉, 연산 대상 데이터가 4바이트의 정수 행렬인 경우, 연산 대상 데이터의 유형은 4바이트 정수이다. 연산 대상 데이터의 유형은 예를 들어 정수(integer) 및 부동소수점(floating point) 실수(real number)를 포함할 수 있다. 그 외에 복소수 등 다른 유형의 단위 데이터가 활용될 수도 있다.
변형 예에 따르면, 단계 225에서 전달되는 정보/데이터와 단계 205에서 전달되는 정보/데이터는 하나의 단계에서 함께 전달될 수도 있다.
단계 230에서 데이터 핸들러는 데이터를 분할한다.
도 4a 내지 도 4c는 본 발명의 일 실시 예에 따르는 데이터 분할 과정의 순서도이다.
이하의 데이터 분할 과정 및 후술할 데이터 복원 과정에서 텍셀의 채널 요소 (R,G,B,A 등)의 크기가 1바이트이고, 연산 대상 데이터의 단위 데이터의 크기가 4, 2 또는 1바이트인 것으로 가정하였으나, 이는 예시적인 것에 불과하다. 텍셀의 채널 요소 (R,G,B,A 등)의 크기는 16비트 32비트 등 다른 값을 가질 수 있다. 또한 단위 데이터의 크기는 8, 16바이트 등 다른 값을 가질 수도 있다. 여기서는 텍셀의 채널 요소 (R,G,B,A 등)의 크기가 1바이트이고, 연산 대상 데이터의 단위 데이터의 크기가 4, 2 또는 1바이트인 경우만을 예시적으로 설명한다. 또한 텍셀의 어느 채널 요소가 데이터의 어느 부분에 대응되는가는 임의로 정해질 수 있다. 예를 들어 채널 요소 A가 MSB(Most Significant Bit)를 가지거나, 아니면 채널 요소 R이 MSB(Most Significant Bit)를 가질 수도 있다. 여기서는 예시적인 경우만을 설명한다.
단계 405에서 GSIMD 유닛(110)은 단위 데이터의 유형이 무엇인지 판단한다. 본 실시 예에는 단위 데이터가 정수인 경우와 부동 소수점 실수(float)인 경우만을 다룬다. 단위 데이터의 유형이 정수인 경우 과정은 단계 410으로 진행한다. 단위 데이터의 유형이 float인 경우 과정은 단계 450(도 4c)으로 진행한다.
단계 410에서, GSIMD 유닛(110)은 단위 데이터의 크기(size)가 4바이트인지 판단한다. 단위 데이터의 크기(size)가 4바이트인 경우 과정은 단계 412로 진행한다. 단계 412에서 GSIMD 유닛(110)은 단위 데이터의 크기(size)와 같은 저장용량을 가지는 GL_RGBA 유형의 텍스처 유형을 선택한다. GL_RGBA 유형의 텍셀은 각각 1바이트 크기의 네 개의 채널 요소 (R, G, B, A)를 가진다. 단계 414에서, GSIMD 유닛(110)은 입력 데이터 D1을 1바이트 단위로 분할한다.
도 5a는 4바이트 정수형 데이터의 분할을 나타낸 도면이다. 도 5a에 제시된 바와 같이 연산 대상 데이터를 단순히 바이트 단위로 4등분하여 X1, X2, X3, X4로 분할할 수 있다. 바이트 단위 연산이나 28, 216, 224으로 나누는 연산, 또는 28, 216, 224으로 나누었을 때의 나머지 연산(modula) 등을 활용하여 처리할 수도 있다.
단계 416에서 GSIMD 유닛(110)은 분할된 데이터 X1, X2, X3, X4를 각각 채널 요소 R, G, B, A에 대응시켜 저장한다.
단계 410에서 단위 데이터의 크기(size)가 4바이트가 아니라고 판단되는 경우 과정은 단계 420으로 진행한다.
단계 420에서 GSIMD 유닛(110)은 단위 데이터의 크기가 2바이트인지 판단한다. 단위 데이터의 크기가 2바이트인 경우 과정은 단계 422로 진행한다. 단위 데이터의 크기가 2바이트가 아닌 경우 과정은 도 4b의 단계 440으로 진행한다.
단계 422에서 GSIMD 유닛(110)은 설정된 처리 모드가 빠른 처리 모드인지 아니면 일반 처리 모드인지 판단한다. 처리 모드는 프로그래머가 설정하거나 기타 방식으로 설정될 수 있다. 다른 실시 예에 따르면 GSIMD 유닛(110)은 빠른 처리 모드로만 동작할 수 있다. 또 다른 실시 예에 따르면 GSIMD 유닛(110)은 일반 처리 모드로만 동작할 수도 있다. 여기서는 빠른 처리 모드 및 일반 처리 모드 중 어느 하나가 선택적으로 실행되는 경우를 설명한다.
빠른 처리 모드는 4바이트 크기의 텍셀을 사용하여 2바이트 또는 1바이트 등 작은 크기의 데이터 여러 개를 한꺼번에 저장하고 처리하는 모드이다. 일반 처리 모드는 이와 반대로 2바이트 또는 1바이트 크기의 텍셀을 사용하여 2바이트 또는 1바이트 등 작은 크기의 데이터를 하나씩 저장하고 처리하는 모드이다.
단계 422에서 빠른 처리모드가 설정된 경우 과정은 단계 424로 진행한다. 단계 424에서 GSIMD 유닛(110)은 4바이트 저장용량을 가지는 GL_RGBA 유형의 텍스처 유형을 선택한다. 단계 426에서 GSIMD 유닛(110)은 2바이트 크기의 단위 연산 대상 데이터 두 개(D1, D2)를 바이트 단위로 분할하여 X1, X2, X3, X4를 획득한다. 단계 428에서 GSIMD 유닛(110)은 분할된 데이터 X1, X2, X3, X4를 각각 채널 요소 R, G, B, A에 대응시켜 저장한다.
단계 422에서 일반 처리모드가 설정된 경우 과정은 단계 430으로 진행한다. 단계 430에서 GSIMD 유닛(110)은 연산 대상 데이터의 크기(2바이트)와 같은 저장용량을 가지는 GL_LUMINAANCE_ALPHA 유형의 텍스처 유형을 선택한다. GL_LUMINAANCE_ALPHA 유형의 텍셀은 1바이트 크기의 채널 요소 두 개 (B, A)를 가진다. 단계 432에서 GSIMD 유닛(110)은 연산 대상 데이터 D1을 1바이트 단위로 분할하여 분할된 데이터 X1, X2를 획득한다. 단계 434에서 GSIMD 유닛(110)은 분할된 데이터 X1, X2를 각각 채널 요소 B, A에 대응시켜 저장한다.
단계 420에서 단위 데이터의 크기가 2바이트가 아닌 경우 과정은 단계 440(도 4b)으로 진행한다. 이 경우 단위 데이터의 크기는 1바이트이다. 기타 크기의 데이터 크기에 대해서는 본 실시 예에서 다루지 않지만 적절한 방식으로 분할하여 마찬가지로 처리할 수 있다.
단계 440에서 GSIMD 유닛(110)은 처리 모드가 어떠한 모드인지 판단한다.
단계 440에서 처리 모드가 빠른 처리 모드인 경우 과정은 단계 442로 진행한다.
단계 442에서 GSIMD 유닛(110)은 4바이트 저장용량을 가지는 GL_RGBA 유형의 텍스처 유형을 선택한다. 단계 444에서 GSIMD 유닛(110)은 단위 연산 대상 데이터 네 개(D1, D2, D3, D4)를 각각 채널 요소 R, G, B, A에 대응시켜 저장한다.
단계 440에서 처리 모드가 일반 처리 모드인 경우 과정은 단계 446으로 진행한다.
단계 446에서 GSIMD 유닛(110)은 연산 대상 데이터의 크기(1바이트)와 같은 저장용량을 가지는 GL_ALPHA 유형의 텍스처 유형을 선택한다. GL_ALPHA 유형의 텍셀은 1바이트 크기의 채널 요소 하나(A)를 가진다. 단계 448에서 GSIMD 유닛(110)은 연산 대상 데이터 D1을 채널 요소 A에 대응시켜 저장한다.
단계 405에서 단위 데이터의 유형이 float인 경우 과정은 단계 450(도 4c)으로 진행한다.
단계 450에서 GSIMD 유닛(110)에서 바이트 단위 분할이 수행된다. 이 경우 정수형 데이터의 분할과 마찬가지로 단순히 바이트 분할 연산을 통해 분할이 처리될 수 있다. 도 5b는 4바이트 부동소수점 실수의 바이트 분할 연산을 나타낸다.
단계 456에서 단계 452 또는 454에서 분할된 데이터 X1, X2, X3 및 X4가 GL_RGBA 유형의 텍셀의 채널 요소 R, G, B, A에 할당된다.
도 2로 돌아와서, 단계 235에서 데이터 핸들러(112)는 사용할 텍스처 유형을 결정한다. 텍스터 유형의 결정은 도 4a 내지 도 4c를 참조하여 설명한 바와 같이 단위데이터의 크기 및 처리 모드에 따라 달라질 수 있다.
단계 240에서 데이터 핸들러(112)는 텍셀 생성 명령 및 분할된 데이터를 GPU(190)로 송신한다. 텍셀 생성 명령은 생성할 텍셀의 텍스처 유형, 개수 기타 필요한 정보를 포함할 수 있다. 텍셀 생성 명령 및 분할된 데이터를 수신한 GPU(190)는 단계 245에서 텍셀 명령에 따라 텍셀을 생성하고 생성된 텍셀에 수신한 분할 데이터를 저장한다. 도 5a 및 도 5b를 참조하여 설명한 바와 같이 1바이트 단위로 분할된 데이터는 텍셀의 채널 요소 (R,G,B,A 등)에 저장된다.
단계 250에서 데이터 핸들러(112)는 GPU(190)를 제어하기 위한 연산 명령을 생성한다. 연산 명령은 후술할 데이터 복원(262), 연산(265) 및 결과값 저장(267) 단계에 대한 명령을 포함할 수 있다. 연산 명령의 자세한 구성은 데이터 복원(262), 연산(265) 및 결과값 저장(267) 단계에 대한 설명에서 후술한다.
단계 255에서 데이터 핸들러(112)는 생성된 연산 명령을 GPU(190)로 송신한다.
이후 프레임 버퍼 관리자(114)는 Draw 명령을 GPU(190)로 송신한다. Draw 명령을 수신한 GPU(190)는 단계 255에서 수신한 연산 명령을 수행하기 시작한다. GPU(190)의 주요 연산은 쉐이더(194)에서 수행될 수 있다.
단계 262에서 GPU(190)는 데이터 복원을 수행한다. 단계 230 내지 단계 245에 대한 설명에서 상술한 바와 같이, 연산 대상 데이터는 텍셀의 채널 요소 크기 단위(1바이트)로 분할되어 전달된다. 따라서 실제 연산을 위해서는 텍셀의 채널 요소 크기 단위(1바이트)의 분할된 데이터를 원본 연산 대상 데이터 (4바이트 또는 2바이트)로 복원할 필요가 있다. 물론 원본 연산 대상 데이터가 1바이트 크기인 경우 복원이 불필요하고 텍셀의 채널 요소에 저장된 데이터를 그대로 활용할 수도 있다.
도 6a 및 도 6b는 본 발명의 일 실시 예에 따르는 정수형 연산 대상 데이터 복원 과정의 순서도이다.
단계 605에서, GPU(190)는 연산 대상 데이터의 분할 데이터가 저장된 텍셀의 텍스처 유형이 GL_RGBA(4바이트 크기)인지 판단한다. 텍셀의 텍스처 유형이 GL_RGBA인 경우 과정은 610으로 진행한다. 단계 610에서 텍셀의 채널 요소 R, G, B, A의 데이터가 X1, X2, X3, X4로 획득된다. 단계 612에서 GPU(190)는 빠른 처리 모드가 설정됐는지 판단한다. 빠른 처리 모드의 설정 여부는 GSIMD 유닛(110)으로부터 전달받은 연산 명령에 따라 달라질 수 있다. 빠른 처리 모드가 설정되지 않은 경우 GPU(190)는 단계 620에서 원본 연산 대상 데이터 D(4바이트)를 복원한다. 복원식은 D=X1*224+X2*216+X3*28+X4 이다. 부호(+/-)비트가 있는 경우 이를 고려하여 계산식이 수정될 수 있다. 실시 예에 따라서는 단순히 비트 단위 데이터를 서로 결합(concatenate)하는 것으로 복원이 처리될 수도 있다.
빠른 처리 모드가 설정된 경우 과정은 단계 614로 진행한다. 단계 614에서 GPU(190)는 단위 데이터의 크기를 판단한다. 단위 데이터의 크기는 여부는 GSIMD 유닛(110)으로부터 전달받은 연산 명령에 따라 달라질 수 있다. 단위 데이터의 크기가 2바이트인 경우 GPU(190)는 단계 618에서 원본 연산 대상 데이터 D1 및 D2를 복원한다. 복원식은 D1=X1*28+X2, D2=X3*28+X4 이다. 이렇게 하여 2바이트 연산 대상 데이터 D1 및 D2가 복원될 수 있다.
단위 데이터의 크기가 1바이트인 경우 GPU(190)는 단계 616에서 원본 연산 대상 데이터 D1, D2, D3 및 D4를 복원한다. 복원식은 D1=X1, D2=X2, D3=X3, D4=X4이다. 이렇게 하여 1바이트 연산 대상 데이터 D1, D2, D3 및 D4가 복원될 수 있다.
단계 605에서 텍셀의 텍스처 유형이 GL_RGBA가 아닌 경우 과정은 630(도 6b)으로 진행한다. 텍셀의 텍스처 유형이 GL_RGBA가 아닌 경우는 단위 데이터의 크기가 1바이트 또는 2바이트인 경우이다. 단계 630에서 GPU(190)는 텍셀의 텍스처 유형이 GL_LUMINANCE_ALPHA(2바이트)인지 판단한다. 텍셀의 텍스처 유형이 GL_LUMINANCE_ALPHA인 경우 과정은 단계 632로 진행한다. 단계 632에서 텍셀의 채널 요소 B, A로부터 X3, X4가 획득된다. 단계 634에서 GPU(190)는 X3, X4로부터 D를 복원한다. 복원식은 D=X3*28+X4 이다.
텍셀의 텍스처 유형이 GL_LUMINANCE_ALPHA이 아닌 경우 과정은 단계 636으로 진행한다. 이 경우는 텍셀의 텍스처 유형이 GL_ALPHA(1바이트)인 경우이다. 단계 636에서 GPU(190)는 텍셀의 채널 요소 A로부터 X4를 추출하고, 단계 638에서 X4를 데이터 D로 복원할 수 있다.
연산 대상 데이터의 단위 데이터가 정수형이 아닌 경우 도 6의 과정 대신 다른 분할 방식이 활용된다. GPU(190)는 텍셀의 채널 요소 R, G, B, A로부터 분할된 데이터 X1, X2, X3, X4를 획득할 수 있다.
X1의 일곱 번째 비트는 부호 비트가 되고 그에 따라 연산 대상 데이터의 부호(S)가 결정된다. X1의 0~6번째 비트 및 X2의 일곱번째 비트가 합쳐져서 지수부(E)가 될 수 있다. 그리고 X2의 0~6번째 비트 및 X3, X4의 데이터가 합쳐져서 가수부(M)가 될 수 있다. 연산 대상 데이터 D는 D=S(1.M*2E)와 같은 복원식에 의해 복원될 수 있다.
도 2로 돌아와서 단계 265에서 GPU(190)는 연산을 수행한다. 예를 들어 두 배열의 합을 구하는 경우 각 연산 대상 데이터에 대해 더하기 연산을 수행할 수 있다. 또는 행렬의 곱 연산을 수행하는 경우 그에 맞는 복잡한 연산이 수행된다. GSIMD 유닛(110)은 실제로 수행하려는 연산에 따라 적합한 연산 명령을 생성하여 GPU(190)에게 전달하고 GPU(190)는 이를 수행하여 처리할 수 있다.
단계 267에서 GPU(190)는 연산의 수행 결과를 프레임 버퍼에 저장한다. 결과를 저장할 프레임 버퍼의 위치나 크기는 단계 210 내지 220을 통해 결정된다. 이 때 프레임 버퍼에 저장하기 위해 데이터의 분할이 다시 수행될 수 있다. 정수 형식 데이터의 분할은 도 4a 내지 도 4c를 참조하여 상술한 방식과 유사하게 수행될 수 있다. 다만 부동소수점 소수의 경우 아래와 같은 방식으로 수행될 수 있다. 4바이트 부동소수점 실수는 1바이트의 부호(Sign), 8바이트의 지수부, 23바이트의 가수부를 가질 수 있다. 이 경우 X1에는 부호 비트(S) 및 지수부의 1~7번째 비트(E_7:E_1)가 할당된다. X2에는 지수부의 0번째 비트(E_0) 및 가수부의 16~22번째 비트(M_22:M_16)가 할당된다. X3에는 가수부의 8~15번째 비트(M_15:M_8)가 할당된다. X4에는 가수부의 0~7번째 비트(M_7:M_0)가 할당된다. 그리고 X1, X2, X3, X4는 결과 값을 반환하도록 할당된 버퍼 프레임의 R, G, B, A 채널 요소에 각각 저장될 수 있다.
단계 270에서 프레임 버퍼 관리자(114)는 결과값이 저장된 프레임 버퍼로부터 분할된 형태의 결과값을 가져온다. 단계 275에서 프레임 버퍼 관리자(114)는 분할된 형태의 결과값을 데이터 핸들러(112)에게 전달한다.
단계 280에서 테이터 핸들러(112)은 분할된 형태의 결과값을 결과 데이터로 복원한다. 데이터 복원의 방식은 도 6a 및 도 6b의 방식과 유사하다. 다만 모든 경우에 단순한 바이트 단위 데이터의 결합(concatenate)로 결합을 대체할 수 있다.
단계 285에서 데이터 핸들러(112)는 분할된 연산 대상 데이터를 저장하기 위한 텍셀을 소멸시키도록 GPU(190)에 요청한다. 단계 290에서 프레임 버퍼 관리자(114)는 결과값 반환을 위한 프레임 버퍼를 소멸시키도록 GPU(190)에 요청한다. 이러한 요청 과정은 해당 자원이 불필요하게 된 이후 언제라도 수행될 수 있다.
단계 295에서 프레임 버퍼 관리자(114)는 복원된 결과값을 CPU(180)에게 전달한다.
변형 예에 따르면 프레임 버퍼에 저장된 데이터는 CPU(190)에 전달되기 이전에 프론트 버퍼로 스왑되어 화면에 출력될 수 있다. 예를 들어 이미지 필터링 작업 등이 수행되는 경우 백그라운드 버퍼에서 작업을 수행하고 작입이 완료되면 이를 프론트 버퍼로 스왑하면 필터링 작업이 완료된 이미지가 화면에 표시될 수 있다.
또한 한 연산 결과가 다른 연산에 다시 사용될 경우 GPU(190)의 프레임 버퍼 내에서 데이터를 이동하거나 복사하여 활용할 수도 있다.
본 발명의 일 실시 예에 따르면 GPGPU가 아닌 일반 GPU만을 포함하는 시스템에서, 새로운 언어의 습득없이 SIMD 명령어와 유사한 간단한 API의 사용으로 쉽게 GPGPU를 사용할 수 있도록 하였다. 스마트폰에는 데이터 연산이 많은 애플리케이션의 동작이 많은데, GSIMD를 활용하면 쉽게 성능을 향상시킬 수 있다.
이 때, 처리 흐름도 도면들의 각 블록과 흐름도 도면들의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도 블록(들)에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 흐름도 블록(들)에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 흐름도 블록(들)에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실행 예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
이 때, 본 실시 예에서 사용되는 '~부'라는 용어는 소프트웨어 또는 FPGA또는 ASIC과 같은 하드웨어 구성요소를 의미하며, '~부'는 어떤 역할들을 수행한다. 그렇지만 '~부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '~부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 '~부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 '~부'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~부'들로 결합되거나 추가적인 구성요소들과 '~부'들로 더 분리될 수 있다. 뿐만 아니라, 구성요소들 및 '~부'들은 디바이스 또는 보안 멀티미디어카드 내의 하나 또는 그 이상의 CPU들을 재생시키도록 구현될 수도 있다.
본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시 예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구의 범위에 의하여 나타내어지며, 특허청구의 범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
한편, 본 명세서와 도면에는 본 발명의 바람직한 실시 예에 대하여 개시하였으며, 비록 특정 용어들이 사용되었으나, 이는 단지 본 발명의 기술 내용을 쉽게 설명하고 발명의 이해를 돕기 위한 일반적인 의미에서 사용된 것이지, 본 발명의 범위를 한정하고자 하는 것은 아니다. 여기에 개시된 실시 예 외에도 본 발명의 기술적 사상에 바탕을 둔 다른 변형 예들이 실시 가능하다는 것은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 자명한 것이다.

Claims (14)

  1. 그래픽 처리 유닛 단일 명령 복수 데이터(GRAPHIC PROCESSING UNIT Single Instruction Multiple Data, GSMD) 유닛, 중앙 처리 유닛(Central Processing Unit, CPU) 및 그래픽 처리 유닛(GPU; Graphic Processing Unit)을 갖는 전자장치에서 상기 GPU를 이용한 데이터 처리 방법에 있어서,
    상기 GSMD 유닛이 상기 CPU로부터 연산 대상 데이터 및 상기 연산 대상 데이터에 적용할 연산자 정보를 획득하는 단계;
    상기 GSMD 유닛이 상기 연산 대상 데이터를 상기 GPU의 텍셀(Texel)의 채널(channel) 요소 크기 단위로 분할하는 분할 단계;
    상기 GSMD 유닛이 상기 분할된 데이터에 대해 연산을 수행하여 연산 결과를 반환하도록 상기 GPU를 제어하는 명령(instruction) 및 상기 분할된 데이터를 상기 GPU에 송신하는 단계; 및
    상기 GSMD 유닛이 상기 GPU로부터 연산 결과값을 획득하는 단계;를 포함하는 데이터 처리 방법.
  2. 제1항에 있어서,
    상기 연산 대상 데이터는 행렬이고,
    상기 연산 대상 데이터의 행 개수, 열 개수 및 상기 연산 대상 데이터에 적용할 연산자의 종류에 따라 상기 연산 결과가 반환될 상기 GPU의 프레임 버퍼의 크기를 결정하는 단계를 더 포함하는 데이터 처리 방법.
  3. 제1항에 있어서,
    상기 연산 대상 데이터는 행렬이고, 상기 연산의 종류가 행렬 곱셈이면, 상기 연산 대상 데이터 중 첫 번째 연산 대상 데이터의 행 개수와 두 번째 연산 대상 데이터의 열 개수에 따라 상기 연산 결과가 반환될 상기 GPU의 프레임 버퍼의 크기를 결정하는 단계를 더 포함하는 데이터 처리 방법.
  4. 제1항에 있어서,
    상기 분할 단계는,
    상기 연산 대상 데이터의 크기가 상기 텍셀의 채널 요소의 크기의 2배 이하이면, 하나의 텍셀에 둘 이상의 연산 대상 데이터를 할당하는 단계를 포함하는 데이터 처리 방법.
  5. 제1항에 있어서,
    상기 분할 단계는,
    상기 연산 대상 데이터의 크기에 따라 상기 연산 대상 데이터를 저장할 텍스쳐유형을 선택하는 단계를 포함하는 데이터 처리 방법.
  6. 제1항에 있어서,
    상기 분할 단계는,
    상기 연산 대상 데이터의 크기가 상기 텍셀의 채널 요소의 크기의 2배 이하이면, 빠른 처리 모드가 선택됐는지 판단하는 단계;
    상기 빠른 처리 모드가 선택됐으면, 하나의 텍셀에 둘 이상의 연산 대상 데이터를 할당하는 단계; 및
    상기 빠른 처리 모드가 선택되지 않았으면, 상기 연산 대상 데이터의 크기에 따라 상기 연산 대상 데이터를 저장할 텍스쳐 유형을 선택하는 단계를 포함하는 데이터 처리 방법.
  7. 제1항에 있어서,
    상기 명령은,
    상기 분할된 데이터를 원본 연산 대상 데이터로 복원하고, 상기 복원된 연산 대상 데이터에 대해 연산을 수행하고 연산 결과를 상기 GPU의 프레임 버퍼에 저장하도록 상기 GPU를 제어하는 명령을 포함하는 데이터 처리 방법.
  8. 그래픽 처리 유닛(GPU; Graphic Processing Unit)과 중앙 처리 유닛(Central Processing Unit, CPU)를 포함하는 전자장치에서, 상기 GPU를 이하여 데이터를 처리하기 위한 장치에 있어서,
    상기 GPU로부터 연산 대상 데이터 및 연산 대상 데이터에 적용할 연산자 정보를 획득하고 상기 연산 대상 데이터를 상기 GPU의 텍셀(Texel)의 채널(channel) 요소 크기 단위로 분할하는 데이터 핸들러;
    상기 분할된 데이터에 대해 연산을 수행하여 연산 결과를 반환하도록 상기 GPU를 제어하는 명령(instruction) 및 상기 분할된 데이터를 상기 GPU에 송신하고, 상기 GPU로부터 연산 결과값을 획득하는 프레임 버퍼 관리자;를 포함하는 데이터 처리 장치.
  9. 제8항에 있어서,
    상기 연산 대상 데이터는 행렬이고,
    상기 프레임 버퍼 관리자는 상기 연산 대상 데이터의 행 개수, 열 개수 및 상기 연산 대상 데이터에 적용할 연산자의 종류에 따라 상기 연산 결과가 반환될 상기 GPU의 프레임 버퍼의 크기를 결정하는 것을 특징으로 하는 데이터 처리 장치.
  10. 제8항에 있어서,
    상기 프레임 버퍼 관리자는, 상기 연산 대상 데이터는 행렬이고, 상기 연산의 종류가 행렬 곱셈이면, 상기 연산 대상 데이터 중 첫 번째 연산 대상 데이터의 행 개수와 두 번째 연산 대상 데이터의 열 개수에 따라 상기 연산 결과가 반환될 상기 GPU의 프레임 버퍼의 크기를 결정하는 것을 특징으로 하는 데이터 처리 장치.
  11. 제8항에 있어서,
    상기 데이터 핸들러는, 상기 연산 대상 데이터의 크기가 상기 텍셀의 채널 요소의 크기의 2배 이하이면, 하나의 텍셀에 둘 이상의 연산 대상 데이터를 할당하는 것을 특징으로 하는 데이터 처리 장치.
  12. 제8항에 있어서,
    상기 데이터 핸들러는, 상기 연산 대상 데이터의 크기에 따라 상기 연산 대상 데이터를 저장할 텍스쳐유형을 선택하는 것을 특징으로 하는 데이터 처리 장치.
  13. 제8항에 있어서,
    상기 데이터 핸들러는, 상기 연산 대상 데이터의 크기가 상기 텍셀의 채널 요소의 크기의 2배 이하이면, 빠른 처리 모드가 선택됐는지 판단하고, 상기 빠른 처리 모드가 선택됐으면, 하나의 텍셀에 둘 이상의 연산 대상 데이터를 할당하고, 상기 빠른 처리 모드가 선택되지 않았으면, 상기 연산 대상 데이터의 크기에 따라 상기 연산 대상 데이터를 저장할 텍스쳐 유형을 선택하는 것을 특징으로 하는 데이터 처리 장치.
  14. 제8항에 있어서,
    상기 명령은,
    상기 분할된 데이터를 원본 연산 대상 데이터로 복원하고, 상기 복원된 연산 대상 데이터에 대해 연산을 수행하고 연산 결과를 상기 GPU의 프레임 버퍼에 저장하도록 상기 GPU를 제어하는 명령을 포함하는 데이터 처리 장치.
KR1020120078326A 2012-07-18 2012-07-18 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치 KR101956197B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020120078326A KR101956197B1 (ko) 2012-07-18 2012-07-18 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치
US13/940,947 US9355428B2 (en) 2012-07-18 2013-07-12 Method and apparatus for data processing using graphic processing unit
EP13176869.9A EP2688037B1 (en) 2012-07-18 2013-07-17 Method and apparatus for data processing using graphic processing unit
PCT/KR2013/006416 WO2014014282A1 (en) 2012-07-18 2013-07-18 Method and apparatus for data processing using graphic processing unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120078326A KR101956197B1 (ko) 2012-07-18 2012-07-18 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20140011671A KR20140011671A (ko) 2014-01-29
KR101956197B1 true KR101956197B1 (ko) 2019-03-08

Family

ID=48832770

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120078326A KR101956197B1 (ko) 2012-07-18 2012-07-18 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치

Country Status (4)

Country Link
US (1) US9355428B2 (ko)
EP (1) EP2688037B1 (ko)
KR (1) KR101956197B1 (ko)
WO (1) WO2014014282A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102114245B1 (ko) * 2014-04-10 2020-06-05 삼성전자 주식회사 그래픽스 상태 관리 장치 및 방법
US10013735B2 (en) * 2015-01-28 2018-07-03 Qualcomm Incorporated Graphics processing unit with bayer mapping
KR102505279B1 (ko) * 2015-07-24 2023-03-02 삼성전자주식회사 복수의 cpu 및 복수의 gpu를 지원하는 컴퓨팅 환경에서의 연산 방법
KR102402672B1 (ko) 2015-09-01 2022-05-26 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 연산들을 처리하는 방법
JP6330093B1 (ja) * 2017-08-21 2018-05-23 ミライアプリ株式会社 動作判定プログラム、動作判定装置、動作判定用画像生成プログラム、動作判定用画像生成装置
CN107844245A (zh) * 2017-11-20 2018-03-27 珠海市魅族科技有限公司 计算处理方法、装置、终端设备及计算机可读存储介质
CN107957975B (zh) * 2017-12-15 2021-01-05 安徽寒武纪信息科技有限公司 一种计算方法及相关产品
KR102111766B1 (ko) 2018-08-29 2020-05-15 한국과학기술원 적응 제어 알고리즘을 위한 중앙처리장치-병렬처리장치 구조 기반의 데이터 처리 장치 및 그 방법
US11954826B2 (en) * 2021-07-21 2024-04-09 Synaptics Incorporated Lossless representation of high dynamic range (HDR) images for neural network inferencing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050197977A1 (en) * 2003-12-09 2005-09-08 Microsoft Corporation Optimizing performance of a graphics processing unit for efficient execution of general matrix operations
US20080094407A1 (en) 2006-06-20 2008-04-24 Via Technologies, Inc. Systems and Methods for Storing Texture Map Data

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080068389A1 (en) 2003-11-19 2008-03-20 Reuven Bakalash Multi-mode parallel graphics rendering system (MMPGRS) embodied within a host computing system and employing the profiling of scenes in graphics-based applications
US7755631B1 (en) 2006-10-24 2010-07-13 Nvidia Corporation Transposition structures and methods to accommodate parallel processing in a graphics processing unit (“GPU”)
US7950003B1 (en) 2006-12-07 2011-05-24 Sony Computer Entertainment Inc. Heads-up-display software development tool for analyzing and optimizing computer software
US20110242115A1 (en) 2010-03-30 2011-10-06 You-Ming Tsao Method for performing image signal processing with aid of a graphics processing unit, and associated apparatus

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050197977A1 (en) * 2003-12-09 2005-09-08 Microsoft Corporation Optimizing performance of a graphics processing unit for efficient execution of general matrix operations
US20080094407A1 (en) 2006-06-20 2008-04-24 Via Technologies, Inc. Systems and Methods for Storing Texture Map Data

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
David Tarditi 외 2명. 'Accelerator: Using Data Parallelism ~'. International Conference on Architectural Support for Programming Languages and Operating Systems, 2006.10., pp.325-335.
Ian Buck 외 6명. 'Brook for GPUs: stream computing on graphics hardware'. ACM Transactions on Graphics, 2004.8., pp.777-786.

Also Published As

Publication number Publication date
KR20140011671A (ko) 2014-01-29
WO2014014282A1 (en) 2014-01-23
EP2688037A1 (en) 2014-01-22
US9355428B2 (en) 2016-05-31
EP2688037B1 (en) 2017-10-11
US20140022268A1 (en) 2014-01-23

Similar Documents

Publication Publication Date Title
KR101956197B1 (ko) 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치
US11630800B2 (en) Programmable vision accelerator
US9576340B2 (en) Render-assisted compression for remote graphics
CN110262907B (zh) 用于统一应用编程接口和模型的系统和方法
JP5956770B2 (ja) タイルベースのグラフィックスシステム及びこのようなシステムの動作方法
US9293109B2 (en) Technique for storing shared vertices
CN107038742B (zh) 屏幕空间管线中的多通道渲染
US20120050303A1 (en) Lossless frame buffer color compression
US9418616B2 (en) Technique for storing shared vertices
KR102459322B1 (ko) 자동으로 컴파일되는 컴퓨트 셰이더를 사용하는 프리미티브 컬링
JP6375102B2 (ja) 動的データ構成のための方法及び装置
CN111279384B (zh) 图形流水线中的索引的压缩和解压缩
KR20160032936A (ko) 렌더링 데이터의 압축을 해제하는 장치, 방법 및 기록매체
US11263018B2 (en) Vector processor and control method therefor
JP2023525725A (ja) データ圧縮の方法及び装置
US20200264873A1 (en) Scalar unit with high performance in crypto operation
EP2671149A2 (en) Stream compaction for rasterization
US20130342549A1 (en) Apparatus and method for processing rendering data
GB2506727A (en) Server-rendering of graphics for remote client
US10187663B2 (en) Technique for performing variable width data compression using a palette of encodings
KR102248846B1 (ko) 데이터를 병렬 처리하는 방법 및 이를 위한 장치
US11630667B2 (en) Dedicated vector sub-processor system
US11037329B2 (en) Encoding positional coordinates based on multiple channel color values
US9892541B2 (en) Methods for a programmable primitive setup in a 3D graphics pipeline and apparatuses using the same
TW202340947A (zh) 用於處置儲存在陣列儲存器中之資料元素之技術

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