KR102158877B1 - 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 - Google Patents
그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 Download PDFInfo
- Publication number
- KR102158877B1 KR102158877B1 KR1020180163404A KR20180163404A KR102158877B1 KR 102158877 B1 KR102158877 B1 KR 102158877B1 KR 1020180163404 A KR1020180163404 A KR 1020180163404A KR 20180163404 A KR20180163404 A KR 20180163404A KR 102158877 B1 KR102158877 B1 KR 102158877B1
- Authority
- KR
- South Korea
- Prior art keywords
- queue
- data
- buffer
- buffer address
- stored
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
본 발명은 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법에 관한 것으로, 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템은 버퍼, 데이터가 비어있는 버퍼주소가 저장된 제1 큐, 데이터가 존재하는 버퍼주소가 저장된 제2 큐, 상기 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 상기 제2 큐에 각각 저장하는 복수의 프로듀서(producer)를 포함하는 호스트, 상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 컨슈머(consumer)를 포함하는 그래픽 프로세싱 유닛(GPU)을 포함한다.
Description
본 발명은 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법에 관한 것으로, 더욱 상세하게는 Host와 GPU(Device)간 데이터 전송에서 최대 통신 대역폭을 모두 활용하여 데이터가 이동하는 속도를 개선시킬 수 있는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법에 관한 것이다.
그래픽 프로세서 유닛(Graphics Processor Unit, GPU)들의 프로세싱 파워(processing power)가 급속히 증가하고 있다. 프로세싱 파워에서의 증가는, 적어도 부분적으로는, GPU에 포함된 복수의 독립된 프로세싱 유닛들(예를 들어, SIMD 프로세서, ALU)로 인한 것이다. 그리고, GPU에서 작업을 프로세싱하기 위한 데이터들은 CPU에서 전달된다.
종래에는 CPU(Host)와 GPU(Device)간의 데이터를 전송하기 위해, 도 1에 도시된 바와 같이 Host에 Device가 Direct Memory Access(DMA)를 통해 직접 접근이 가능하도록 물리 메모리에 고정된 두 개의 버퍼를 생성해 Host가 버퍼에 데이터 채우고 Device가 버퍼에서 데이터를 가져와 비우는 Double Buffering 기법을 사용하였다.
그러나, 종래의 방법은 도 2에 도시된 바와 같이 Host가 버퍼에 데이터를 채우는 시간과 Device가 버퍼에서 데이터를 가져와 비우는 시간의 불균형으로 인해 비어있는 구간이 발생하고, 이로 인해 최대 통신 대역폭을 모두 사용하지 못하는 결과가 발생하였다.
이에, idle한 구간을 제거해 Host와 GPU(Device)간 데이터 전송에서 최대 통신 대역폭을 모두 활용하여 데이터가 이동하는 속도를 개선시킬 수 있는 기술 개발이 요구되고 있다.
이와 관련 선행기술로는 대한민국등록특허 제10-1639943호(발명의 명칭: 범용 그래픽 프로세서의 공유 메모리를 캐시로 동작시키기 위한 공유 메모리 제어 방법 및 이를 이용한 범용 그래픽 프로세서)가 있다.
본 발명의 목적은 Host와 GPU(Device)간 데이터 전송에서 최대 통신 대역폭을 모두 활용하여 데이터가 이동하는 속도를 개선시킬 수 있는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법을 제공하는 것이다.
본 발명이 해결하고자 하는 과제는 이상에서 언급한 과제(들)로 제한되지 않으며, 언급되지 않은 또 다른 과제(들)은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템은 버퍼, 데이터가 비어있는 버퍼주소가 저장된 제1 큐, 데이터가 존재하는 버퍼주소가 저장된 제2 큐, 상기 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 상기 제2 큐에 각각 저장하는 복수의 프로듀서(producer)를 포함하는 호스트, 상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 컨슈머(consumer)를 포함하는 그래픽 프로세싱 유닛(GPU)을 포함한다.
바람직하게는, 상기 제1 큐 및 제2 큐는 원형 큐(Circular Queue)일 수 있다.
바람직하게는, 상기 제1 큐 및 제2 큐는, 상기 프로듀서 개수의 2배에 해당하는 개수의 큐로 구성될 수 있다.
바람직하게는, 상기 GPU가 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 경우, 상기 제2 큐에 저장된 해당 버퍼주소는 제거될 수 있다.
바람직하게는, 상기 호스트는, 상기 버퍼를 초기화하고, 초기화된 버퍼의 주소를 상기 제1 큐에 저장한 후, 상기 GPU로의 데이터 전송이 시작된 경우 상기 복수의 프로듀서가 동작하여 멀티스레딩(Multithreading)을 수행할 수 있다.
바람직하게는, 상기 GPU는, 상기 제2 큐를 주기적으로 모니터링하여 상기 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 상기 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 상기 컨슈머가 동작할 수 있다.
본 발명의 다른 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템은 버퍼, 데이터가 비어있는 버퍼주소가 저장된 제1 큐, 데이터가 존재하는 버퍼주소가 저장된 제2 큐, 상기 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 상기 제2 큐에 각각 저장하는 복수의 프로듀서(producer)를 포함하는 호스트를 포함한다.
바람직하게는, 상기 제2 큐를 주기적으로 모니터링하여 상기 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 상기 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 컨슈머(consumer)를 포함하는 그래픽 프로세싱 유닛(GPU)을 더 포함할 수 있다.
본 발명의 또 다른 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법은, GPU 상에서 작업을 프로세싱하기 위해, 복수의 프로듀서(producer)를 포함하는 호스트가 GPU로 데이터를 전송하는 방법에 있어서, 상기 복수의 프로듀서 각각은, 데이터가 비어있는 버퍼주소가 저장된 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 제2 큐에 각각 저장하는 단계, 상기 GPU는 제2 큐를 주기적으로 모니터링하여 상기 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 상기 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 단계를 포함한다.
본 발명에 따르면, Host와 GPU(Device)간 데이터 전송에서 최대 통신 대역폭을 모두 활용하여 데이터가 이동하는 속도를 개선시킬 수 있다. 구체적으로, 비교적 큰 데이터를 전송하는 상황에서 최대 통신 대역폭에 가까운 속도에 도달이 가능해져 소요되는 시간을 대폭 줄일 수 있고 결과적으로 CPU-GPU 시스템에서 데이터 전송에 의한 시간 낭비를 감소시킬 수 있다.
한편, 본 발명의 효과는 이상에서 언급한 효과들로 제한되지 않으며, 이하에서 설명할 내용으로부터 통상의 기술자에게 자명한 범위 내에서 다양한 효과들이 포함될 수 있다.
도 1은 종래의 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 도면이다.
도 2는 종래의 호스트와 GPU간의 데이터 전송 시간을 설명하기 위한 도면이다.
도 3은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템을 도시한 블록도이다.
도 4는 본 발명의 일 실시예에 따른 원형 큐를 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 호스트와 GPU간의 데이터 전송을 위한 메모리 제어 방법을 설명하기 위한 도면이다.
도 6은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 예시도이다.
도 8은 본 발명의 일 실시예에 따른 시스템의 성능을 설명하기 위한 그래프이다.
도 2는 종래의 호스트와 GPU간의 데이터 전송 시간을 설명하기 위한 도면이다.
도 3은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템을 도시한 블록도이다.
도 4는 본 발명의 일 실시예에 따른 원형 큐를 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 호스트와 GPU간의 데이터 전송을 위한 메모리 제어 방법을 설명하기 위한 도면이다.
도 6은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 예시도이다.
도 8은 본 발명의 일 실시예에 따른 시스템의 성능을 설명하기 위한 그래프이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 실시 형태에 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수개의 관련된 기재된 항목들의 조합 또는 복수개의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수개의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
도 3은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템을 도시한 블록도, 도 4는 본 발명의 일 실시예에 따른 원형 큐를 설명하기 위한 도면, 도 5는 본 발명의 일 실시예에 따른 호스트와 GPU간의 데이터 전송을 위한 메모리 제어 방법을 설명하기 위한 도면이다.
도 3을 참조하면, 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템은 호스트(100), 그래픽 프로세싱 유닛(GPU; 200), 메모리(300) 및 상호접속 네트워크(400)를 포함한다. 본 발명에 따른 시스템은 도 1에 도시된 실시예에서 제시된 것에 추가하여 혹은 이와는 다른 소프트웨어, 하드웨어, 및 펌웨어 컴포넌트들을 포함할 수 있다.
호스트(100)는 작업(task)을 위한 데이터들을 GPU(200)에 제공한다.
호스트(100)는 CPU, 디지털 신호 프로세서(Digital Signal Processor, DSP), 애플리케이션 특정 집적 프로세서(Application Specific Integrated Processor, ASIC), 필드 프로그래밍가능 게이트 어레이(Field Programmable Gate Array, FPGA), 커스터마이징된 프로세서(customized processor) 등 프로그램들을 실행가능한 임의의 유형의 디바이스일 수 있다. 바람직하게는 호스트(100)는 CPU일 수 있다.
호스트(100)는 상호접속 네트워크(400)를 통해 GPU(200) 및 메모리(300)에 통신적으로 커플링된다.
호스트(100)는 복수의 프로듀서(producer)(110)를 포함한다.
호스트(100)가 버퍼(310)에 데이터를 채우는 프로듀서(110)는 GPU(200)가 버퍼(310)에서 데이터를 가져와 비우는 컨슈머(210) 보다 속도가 느리다. 이에, 본 발명은 프로듀서(100)의 비교적 느린 속도를 보완하기 위해 다수의 프로듀서(110)가 멀티스레딩(Multithreading)을 통해 동시적으로 동작하도록 설정하고, 하나의 컨슈머(210)가 적절하게 동작하도록 설정한 것이다. 이러한 기법은 Multithreaded Double Queuing 기법이라 칭할 수 있다.
각 프로듀서(110)는 GPU(200)에 전송할 데이터를 버퍼(310)에 저장하도록 호스트상에서 실행하는 소프트웨어 모듈일 수 있다.
호스트(100)는 데이터들을 GPU(200)에 전달할 목적으로, 메모리(300) 내의 버퍼(310)를 초기화하고, 초기화된 버퍼(310)의 주소를 제1 큐(320)에 저장한다. 이때, 초기화는 시스템 시동시 혹은 애플리케이션 시동시에 일어날 수 있다.
또한, 호스트(100)는 GPU(200)로의 데이터 전송이 시작된 경우 복수의 프로듀서(110)가 동작하여, 복수의 프로듀서(110) 각각은 제1 큐(320)에서 데이터가 비어있는 버퍼주소를 각각 추출하고, 추출된 각 버퍼주소에 데이터를 저장하며, 데이터가 저장된 버퍼주소를 제2 큐(330)에 각각 저장한다. 이처럼 복수의 프로듀서(110)는 Multithreading을 통해 동시적으로 동작한다.
GPU(200)는 호스트(100)로부터 전송된 데이터들을 실행하도록 구성된다.
GPU(200)는 시스템에 그래픽 가속 기능(graphics acceleration functionality) 및 다른 연산 기능(compute functionality)을 제공한다. GPU(200)는 산술 및 로직 유닛(Arithmetic and Logic Unit, ALU)들과 같은 프로세싱 요소들을 포함하는 단일 명령 다중 데이터(SIMD) 프로세서들과 같은 복수의 프로세서들을 포함할 수 있다. 복수의 SIMD 프로세서들을 가짐으로써, 일반적으로 GPU(200)는 예를 들어, 그래픽 프로세싱에서 공통적인 그러한 데이터 병렬 태스크들의 실행에 대해 이상적으로 적합하게 된다. 예를 들어, 이미지를 디스플레이 상에 렌더링(rendering)할 때, 동일한 혹은 실질적으로 동일한 명령들이 디스플레이 상에 렌더링 되는 각각의 픽셀에 관해 실행된다. GPU(200)는 또한, 그래픽 연산들과는 다른 태스크들(예를 들어, 데이터 스트림들의 병렬 실행으로부터 혜택을 받을 수 있는 다양한 컴퓨트 집중 태스크(compute intensive task)들과 같은 것)를 위해 사용될 수 있다.
GPU(200)는 버퍼(310)에 저장된 데이터를 가져와 비우는 컨슈머(consumer)(210)를 포함한다.
컨슈머(210)는 메모리(300)의 제2 큐(330)에서 데이터가 저장된 버퍼주소를 추출하고, 추출된 버퍼주소에서 데이터를 추출하며, 데이터 추출이 완료된 버퍼주소를 제1 큐(320)에 저장한다. 여기서, 데이터는 작업을 형성하는 데이터들일 수 있다.
GPU(200)는 버퍼(310)가 GPU(200)에 의해 프로세싱될 준비가 된 데이터를 갖는지 결정하기 위해, 메모리(300) 내의 제2 큐(330)에 업데이트된 버퍼주소가 있는지 주기적으로 모니터링할 수 있다. 제2 큐(330)에 업데이트된 버퍼주소가 검출되는 경우, GPU(200)는 제2 큐(330)에서 데이터가 저장된 버퍼주소를 추출하고, 추출된 버퍼주소에서 데이터를 추출하며, 데이터 추출이 완료된 버퍼주소를 제1 큐(320)에 저장한다.
또한, GPU(200)는 호스트(100)로부터 제2 큐(330)에 버퍼주소가 저장됨이 통지된 경우 제2 큐(330)에서 데이터가 저장된 버퍼주소를 추출하고, 추출된 버퍼주소에서 데이터를 추출하며, 데이터 추출이 완료된 버퍼주소를 제1 큐(320)에 저장할 수도 있다.
GPU(200)는 상호접속 네트워크(400)를 통해 호스트(100) 및 메모리(300)에 통신적으로 커플링된다.
메모리(300)는 호스트(100)와 GPU(200) 중 하나 또는 양자에 의한 사용을 위한 데이터를 저장하도록 구성된다. 메모리(300)는 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 판독 전용 메모리 (ROM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM(EEPROM), 플래시 메모리, 자기 데이터 저장 매체들 또는 광학 저장 매체들과 같은, 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들의 임의의 조합을 포함할 수도 있다. 메모리(300)는 상호접속 네트워크(400)를 통해 호스트(100) 및 GPU(200)에 통신적으로 커플링된다
메모리(300)는 호스트(100)로부터 전송된 데이터를 저장하는 버퍼(310)를 포함하고, 이러한 버퍼(310)를 통해 호스트(100)는 GPU(200)에 데이터를 전달한다. 버퍼(310)는 링 버퍼(ring buffer)로 구현될 수 있거나, 혹은 데이터들의 효율적인 큐잉에 적합한 다른 데이터 구조로서 구현될 수 있다. 호스트(100)로부터 GPU(200)로의 데이터들은 명령들 및 데이터를 포함할 수 있고, 명령들 및 데이터를 갖는 데이터 구조들은 호스트(100) 상에서 실행되는 프로듀서(110)에 의해 버퍼(310)에 입력된다.
이처럼 메모리(300)는 특정 순서로 데이터들을 저장하는 버퍼(310)를 포함한다. 버퍼(310)는 호스트(100)로부터 수신된 데이터들을 저장하고 취출하는 메모리(300)에 구현되는 데이터 구조일 수도 있다.
또한, 메모리(300)는 버퍼(310)를 관리하는 제1 큐(320)와 제2 큐(330)를 포함하고, 제1 큐(320)와 제2 큐(330)는 원형 큐(Circular Queue)일 수 있다. 원형 큐(Circular Queue)는 도 4에 도시된 바와 같이 처음과 끝을 연결한 구조로, 마지막 공간이 다음 큐의 시작점이 된다. 도 4에서 front는 첫 번째 데이터가 저장된 배열의 첨자고, rear는 새로운 데이터가 삽입될 배열의 첨자일 수 있다.
제1 큐(320)에는 데이터가 비어있는 버퍼주소가 저장되고, 제2 큐(330)에는 데이터가 존재하는 버퍼주소가 저장된다. 제1 큐(320)와 제2 큐(330)는 원형 큐이므로, GPU(200)에서 데이터 추출이 완료된 버퍼주소를 제1 큐(320)에 저장하는 경우, 제2 큐(330)에 저장된 해당 버퍼주소는 제거된다. 프로듀서(110)가 데이터가 저장된 버퍼주소를 제2 큐(330)에 저장하는 경우, 호스트(100)는 GPU(200)에게 버퍼(310)에 저장된 데이터를 프로세싱을 위해 이용가능함을 통지할 수 있다.
제1 큐 및 제2 큐(320, 330) 각각은 프로듀서 개수의 2배에 해당하는 개수의 큐를 가질 수 있다. 예컨대, 호스트(100)의 프로듀서(110)가 10개인 경우, 제1 큐(320)와 제2 큐(330) 각각은 20개의 큐를 가질 수 있다.
상호접속 네트워크(400)는 호스트(100), GPU(200) 및 메모리(300) 사이에 통신을 용이하게 하도록 구성된다. 상호접속 네트워크(400)는 시스템의 디바이스들 및 컴포넌트들에 대한 결합을 제공한다. 상호접속 네트워크(400)는 하나 또는 그 이상의 통신 버스들(예를 들어, 주변 컴포넌트 상호연결(Peripheral Component Interconnect, PCI), 고급 그래픽 포트(Advanced Graphics Port, AGP), 등)을 포함할 수 있다.
상기와 같이 구성된 시스템에서 호스트(100)와 GPU(200)간의 데이터 전송을 위한 메모리 제어 방법에 대해 도 5를 참조하여 설명하기로 한다.
먼저, CPU의 복수의 Producer가 버퍼에 데이터를 옮기는 로직에 대해 설명하기로 한다. Step 1에서 제1 Circular Queue에서 여러 개의 Producer가 버퍼 주소를 가져오고, Producer가 옮길 데이터를 제1 Circular Queue에서 가져온 버퍼 주소에 옮긴다. 그런 후, Step 2에서 Memory Copy가 끝난 버퍼 주소는 제2 Circular Queue에 저장한다. 예를 들어, Producer 0이 0번, Producer 1이 1번, Producer 2이 2번, Producer 3이 3번의 버퍼주소를 제1 원형 큐에서 가져온 경우, Producer 0은 0번 버퍼에 데이터를 저장, Producer 1은 1번 버퍼에 데이터를 저장, Producer 2는 2번 버퍼에 데이터를 저장, Producer 3은 3번 버퍼에 데이터를 저장한다. 이때, Producer 0, Producer 1, Producer 2, Producer 3은 동시에 버퍼에 데이터를 저장할 수 있다. 그런 후, Producer 0은 0번을 제2 원형 큐에 저장, Producer 1은 1번을 제2 원형 큐에 저장, Producer 2는 2번을 제2 원형 큐에 저장, Producer 3은 3번을 제2 원형 큐에 저장한다. 이때, Producer 0, Producer 1, Producer 2, Producer 3은 동시에 제2 원형 큐에 버퍼 주소를 저장할 수 있다.
다음으로, GPU에서 CPU 데이터를 가져오는 Consumer의 로직에 대해 설명하기로 한다. 여기서, Consumer는 제2 원형 큐에 버퍼주소의 기록이 감지된 경우 또는 CPU로부터 제2 원형 큐에 버퍼 주소의 기록이 통지된 경우, GPU에서 CPU 데이터를 가져오는 동작을 수행할 수 있다. Step 1에서 PCIe를 통해 제2 Circular Queue에 있는 버퍼 주소에서 데이터를 복사해 GPU로 옮긴다. Step 2에서 데이터 복사가 다 끝난 버퍼 주소는 제1 Circular Queue로 옮긴다. 이때, 데이터 복사가 다 끝난 버퍼 주소는 제2 원형 큐에서 삭제되어, 해당 큐는 빈 상태가 된다.
상기와 같이 구성된 시스템은 다수의 프로세싱 디바이스들 상에서 하나 이상의 소프트웨어 애플리케이션들을 프로세싱하도록 구성된다.
도 6은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 도면, 도 7은 본 발명의 일 실시예에 따른 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법을 설명하기 위한 예시도이다.
도 6을 참조하면, 호스트는 복수의 프로듀서 각각이 제1 Circular Queue에서 데이터가 비어있는 버퍼 주소를 추출한다(S610). 이때, 제1 원형 큐에는 데이터가 비어있는 버퍼 주소가 저장되어 있으므로, 각 프로듀서는 작업에 따른 스레드(thread)에 해당하는 데이터를 저장할 버퍼 주소를 획득한다.
단계 S610이 수행되면, 각 프로듀서는 옮길 데이터를 제1 Circular Queue에서 가져온 버퍼 주소에 옮기고(S620), 메모리 Copy가 끝난 버퍼 주소는 제2 Circular Queue에 저장한다(S630).
단계 S630이 수행되면, 각 프로듀서는 GPU에 전송할 데이터가 남아있는지를 판단한다(S640).
단계 S640의 판단결과 GPU에 전송할 데이터가 남아있으면, 각 프로듀서는 단계 S610을 수행한다.
한편, 호스트의 각 프로듀서가 S630을 수행하면, GPU는 제2 원형 큐에서 데이터가 저장된 버퍼주소를 획득하고(S650), 획득된 버퍼주소에서 데이터를 추출한다(S660). 이때, GPU는 제2 큐를 주기적으로 모니터링하여 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 추출된 버퍼주소에서 데이터를 추출할 수 있다. GPU가 데이터를 추출하면, 해당 버퍼는 빈 상태가 된다.
따라서, 단계 S660이 수행되면, GPU는 데이터 추출이 완료된 버퍼주소를 제1 큐에 저장한다(S670). 이때, 제2 큐에 저장된 해당 버퍼주소는 삭제된다.
단계 S670의 수행 후, GPU는 제2 원형 큐에 버퍼 주소가 남아있는지를 판단하여(S680), 남아 있는 경우 단계 S650을 수행한다.
상기 설명에서는 호스트와 GPU의 동작이 순차적인 것으로 기재되어 있으나, 호스트와 GPU의 동작은 동시에 수행될 수 있다.
이러한 동작에 대해 도 7을 참조하여 상세히 설명하기로 한다.
도 7은 프로듀서 3개(P0, P1, P2), 컨슈머 1개(C0), 버퍼 주소 6개(B0, B1, B2, B3, B4, B5), 데이터 12개(D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11)인 경우에 대해 설명하기로 한다. 이때, 프로듀서가 버퍼에 데이터를 저장하는 시간은 3시간이고, 컨슈머가 버퍼에서 데이터를 추출하는 시간은 1시간일 수 있다. UCQ(Used Circular Queue)는 데이터가 비어있는 버퍼 주소가 저장된 제1 원형 큐이고, UUCQ(Unused Circular Queue)는 데이터가 존재하는 버퍼 주소가 저장된 제2 원형 큐일 수 있다.
먼저, P0, P1, P2는 각각 UCQ에서 버퍼주소를 추출하고, 추출된 버퍼주소에 각각 데이터를 저장하며, UUCQ에 그 버퍼주소를 저장한다. 구체적으로, P0는 UCQ에서 B0를 추출하고, B0에 D0를 저장한 후, UUCQ에 B0를 저장, P1은 UCQ에서 B1을 추출하고, B1에 D1을 저장한 후, UUCQ에 B1을 저장, P2는 UCQ에서 B2를 추출하고, B2에 D2를 저장한 후, UUCQ에 B2를 저장한다. P0, P1, P2는 이러한 동작을 동시에 수행한다.
D0, D1, D2의 저장이 완료된 후, 나머지 데이터가 존재하므로, P0, P1, P2는 저장해야할 데이터가 소진될때까지 상기와 같은 동작을 수행한다. 따라서, P0, P1, P2는 D3, D4, D5를 버퍼에 저장하고, 컨슈머 C0는 버퍼에서 기 저장된 데이터(D0, D1, D2)를 추출한다.
즉, D0, D1, D2의 저장이 완료되면, P0는 UCQ에서 B3를 추출하고, B3에 D3를 저장한 후, UUCQ에 B3를 저장, P1은 UCQ에서 B4을 추출하고, B4에 D4을 저장한 후, UUCQ에 B4을 저장, P2는 UCQ에서 B5를 추출하고, B5에 D5를 저장한 후, UUCQ에 B5를 저장한다. 이처럼 P0, P1, P2가 D3, D4, D5를 저장하는 동안, C0는 기 저장된 D0, D1, D2를 추출한다. 구체적으로, C0는 UUCQ에서 B0를 추출하고, B0에서 D0를 추출하며, UCQ에 B0를 저장한 후, UUCQ에서 B1을 추출하고, B1에서 D1를 추출하며, UCQ에 B1를 저장한 후, UUCQ에서 B2를 추출하고, B2에서 D2를 추출하며, UCQ에 B2를 저장한다.
D3, D4, D5의 저장이 완료된 후, 나머지 데이터가 존재하므로, P0, P1, P2는 D6, D7, D8를 버퍼에 저장하고, 컨슈머 C0는 버퍼에서 기 저장된 데이터(D3, D4, D5)를 추출한다.
D6, D7, D8의 저장이 완료된 후, 나머지 데이터가 존재하므로, P0, P1, P2는 D9, D10, D11을 버퍼에 저장하고, 컨슈머 C0는 버퍼에서 기 저장된 데이터(D6, D7, D8)를 추출한다.
P0, P1, P2가 D9, D10, D11을 버퍼에 저장하면, 나머지 데이터가 존재하지 않으므로, P0, P1, P2는 데이터를 저장하는 동작을 종료하지만, 컨슈머 C0는 버퍼에서 기 저장된 데이터(D9, D10, D11)를 추출한다.
상기에서 설명된 예시에서 살펴본 바와 같이, 프로듀서와 컨슈머가 각 circular queue에서 버퍼 주소를 저장하고 추출하는 시간은 버퍼에 비해 매우 짧음을 확인할 수 있다.
도 8은 본 발명의 일 실시예에 따른 시스템의 성능을 설명하기 위한 그래프이다.
도 8은 NVIDIA GPU Titan V에서 Rodinia benchmark중 BFS와 Pathfinder에서 기존의 시스템에서 Inter Memory Transfer/GPU Kernel과 MTDQ(Multi-threaded Double Queuing)의 차이 그래프이다. 이를 통해 MTDQ기술을 가지고 GPU Driver에 탑재하면 2배 이상의 Memory transfer시간의 효율을 얻을 수 있음을 확인할 수 있다. 즉, 본 발명은 기존의 기법보다 비교적 큰 데이터를 전송하는 상황에서 최대 통신 대역폭에 가까운 속도에 도달이 가능해져 소요되는 시간을 대폭 줄일 수 있고 결과적으로 CPU-GPU 시스템에서 데이터 전송에 의한 시간 낭비가 감소시킬 수 있다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
100 : 호스트
110 : 프로듀서
200 : GPU
210 : 컨슈머
300 : 메모리
310 : 버퍼
320 : 제1 큐
330 : 제2 큐
400 : 상호접속 네트워크
110 : 프로듀서
200 : GPU
210 : 컨슈머
300 : 메모리
310 : 버퍼
320 : 제1 큐
330 : 제2 큐
400 : 상호접속 네트워크
Claims (9)
- 버퍼;
데이터가 비어있는 버퍼주소가 저장된 제1 큐;
데이터가 존재하는 버퍼주소가 저장된 제2 큐;
상기 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 상기 제2 큐에 각각 저장하는 복수의 프로듀서(producer)를 포함하는 호스트(HOST); 및
상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 컨슈머(consumer)를 포함하는 그래픽 프로세싱 유닛(GPU)
를 포함하고,
상기 제1 큐 및 제2 큐는, 상기 프로듀서 개수의 2배에 해당하는 개수의 큐로 구성되고,
상기 GPU는,
상기 제2 큐를 주기적으로 모니터링하여 상기 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 상기 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 상기 컨슈머가 동작하는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템. - 제1항에 있어서,
상기 제1 큐 및 제2 큐는 원형 큐(Circular Queue)인 것을 특징으로 하는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템. - 삭제
- 제1항에 있어서,
상기 GPU가 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 경우, 상기 제2 큐에 저장된 해당 버퍼주소는 제거되는 것을 특징으로 하는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템. - 제1항에 있어서,
상기 호스트는, 상기 버퍼를 초기화하고, 초기화된 버퍼의 주소를 상기 제1 큐에 저장한 후, 상기 GPU로의 데이터 전송이 시작된 경우 상기 복수의 프로듀서가 동작하여 멀티스레딩(Multithreading)을 수행하는 것을 특징으로 하는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템. - 삭제
- 삭제
- 삭제
- GPU 상에서 작업을 프로세싱하기 위해, 복수의 프로듀서(producer)를 포함하는 호스트가 GPU로 데이터를 전송하는 방법에 있어서,
상기 복수의 프로듀서 각각은, 데이터가 비어있는 버퍼주소가 저장된 제1 큐에서 데이터를 저장할 버퍼주소를 각각 추출하고, 상기 추출된 각 버퍼주소에 각각 데이터를 저장하며, 데이터가 저장된 버퍼주소를 제2 큐에 각각 저장하는 단계;
상기 GPU는 제2 큐를 주기적으로 모니터링하여 상기 제2 큐에 업데이트된 버퍼주소가 검출되는 경우 또는 상기 호스트로부터 제2 큐에 버퍼주소가 저장됨이 통지된 경우, 상기 제2 큐에서 데이터가 저장된 버퍼주소를 추출하고, 상기 추출된 버퍼주소에서 데이터를 추출하며, 상기 데이터 추출이 완료된 버퍼주소를 상기 제1 큐에 저장하는 단계
를 포함하고,
상기 제1 큐 및 제2 큐는, 상기 프로듀서 개수의 2배에 해당하는 개수의 큐로 구성되는 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020180163404A KR102158877B1 (ko) | 2018-12-17 | 2018-12-17 | 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020180163404A KR102158877B1 (ko) | 2018-12-17 | 2018-12-17 | 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200074707A KR20200074707A (ko) | 2020-06-25 |
KR102158877B1 true KR102158877B1 (ko) | 2020-09-23 |
Family
ID=71400453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180163404A KR102158877B1 (ko) | 2018-12-17 | 2018-12-17 | 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102158877B1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112988622B (zh) * | 2021-03-03 | 2024-07-26 | 广州安凯微电子股份有限公司 | 一种队列缓存方法及设备 |
KR20230034634A (ko) | 2021-09-03 | 2023-03-10 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그 동작 방법 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130014118A1 (en) * | 2011-07-06 | 2013-01-10 | Stephen Jones | Simultaneous submission to a multi-producer queue by multiple threads |
US20180088947A1 (en) | 2016-09-27 | 2018-03-29 | Cooper Technologies Company | Multi-producer single consumer queue systems and methods |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8868848B2 (en) * | 2009-12-21 | 2014-10-21 | Intel Corporation | Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform |
-
2018
- 2018-12-17 KR KR1020180163404A patent/KR102158877B1/ko active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130014118A1 (en) * | 2011-07-06 | 2013-01-10 | Stephen Jones | Simultaneous submission to a multi-producer queue by multiple threads |
US20180088947A1 (en) | 2016-09-27 | 2018-03-29 | Cooper Technologies Company | Multi-producer single consumer queue systems and methods |
Non-Patent Citations (2)
Title |
---|
Kerbl 등,"The Broker Queue: A Fast, Linearizable FIFO Queue for Fine-Granular Work Distribution on the GPU", Proceedings of the 2018 International Conference on Supercomputing, 2018.06.12-15. 1부.* |
Kumar 등, "Buffer aggregation: Addressing queuing subsystem bottlenecks at high speeds", 13th annual IEEE symposium on high performance interconnects. 2005. 1부.* |
Also Published As
Publication number | Publication date |
---|---|
KR20200074707A (ko) | 2020-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI326852B (en) | Synchronization methods and fence/wait synchronization component of gpu | |
US20180321946A1 (en) | Policies for shader resource allocation in a shader core | |
US8963933B2 (en) | Method for urgency-based preemption of a process | |
US9842083B2 (en) | Using completion queues for RDMA event detection | |
US9122522B2 (en) | Software mechanisms for managing task scheduling on an accelerated processing device (APD) | |
EP2275927A2 (en) | Processor and instruction control method | |
US8578069B2 (en) | Prefetching for a shared direct memory access (DMA) engine | |
TW201342240A (zh) | 解決執行緒發散的方法和系統 | |
KR102158877B1 (ko) | 그래픽 프로세싱 유닛 상에서 작업을 프로세싱하기 위한 시스템 및 방법 | |
US11467870B2 (en) | VMID as a GPU task container for virtualization | |
US8803891B2 (en) | Method for preempting graphics tasks to accommodate compute tasks in an accelerated processing device (APD) | |
US20210089306A1 (en) | Instruction processing method and apparatus | |
US20130145202A1 (en) | Handling Virtual-to-Physical Address Translation Failures | |
JP6250447B2 (ja) | 半導体装置及び命令読み出し制御方法 | |
CN110245024B (zh) | 静态存储块的动态分配系统及其方法 | |
US20120188259A1 (en) | Mechanisms for Enabling Task Scheduling | |
US20120194525A1 (en) | Managed Task Scheduling on a Graphics Processing Device (APD) | |
US10558489B2 (en) | Suspend and restore processor operations | |
US20130135327A1 (en) | Saving and Restoring Non-Shader State Using a Command Processor | |
US9075795B2 (en) | Interprocess communication | |
US7400326B1 (en) | System and method for delivering multiple data streams via multiple buses | |
US9329893B2 (en) | Method for resuming an APD wavefront in which a subset of elements have faulted | |
US10394574B2 (en) | Apparatuses for enqueuing kernels on a device-side | |
US20130141446A1 (en) | Method and Apparatus for Servicing Page Fault Exceptions | |
JP3989493B2 (ja) | キュー装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E601 | Decision to refuse application | ||
X091 | Application refused [patent] | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |