KR102356705B1 - 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법 - Google Patents

커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법 Download PDF

Info

Publication number
KR102356705B1
KR102356705B1 KR1020150084344A KR20150084344A KR102356705B1 KR 102356705 B1 KR102356705 B1 KR 102356705B1 KR 1020150084344 A KR1020150084344 A KR 1020150084344A KR 20150084344 A KR20150084344 A KR 20150084344A KR 102356705 B1 KR102356705 B1 KR 102356705B1
Authority
KR
South Korea
Prior art keywords
kernel
kernels
fused
interleaved
consumer
Prior art date
Application number
KR1020150084344A
Other languages
English (en)
Other versions
KR20160109992A (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 삼성전자주식회사
Publication of KR20160109992A publication Critical patent/KR20160109992A/ko
Application granted granted Critical
Publication of KR102356705B1 publication Critical patent/KR102356705B1/ko

Links

Images

Classifications

    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/70Circuitry for compensating brightness variation in the scene
    • H04N23/741Circuitry for compensating brightness variation in the scene by increasing the dynamic range of the image compared to the dynamic range of the electronic image sensors

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

그래픽 어플리케이션 또는 이미지 처리 어플리케이션과 같은 처리에 있어서 서로 다른 단계를 가지는 파이프라인 어플리케이션에서, 하나의 연산 커널이 다른 하나에 종속될 수 있다. 개별적인 커널들에 연관되는 데이터는 기록되거나 읽힐 필요가 있다. 커널을 퓨징하고, 작업 그룹을 리사이징하고 커널을 인터리빙하는 것 중 적어도 하나를 이용하여 외부 메모리에 커널 데이터를 기록하고 읽을 필요가 최소화가 되도록 하는 기술에 관한 것이다.

Description

커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법{AUTOMATED COMPUTED KERNEL FUSION, RESIZING, AND INTERLEAVE}
본 발명은 그래픽 처리 파이프라인 및 이미지 처리 파이프라인 등과 같은 파이프라인 어플리케이션에서 커널(Kernel)을 연산하는 방법에 관한 것이다. 보다 구체적으로는 본 발명은 커널 연산을 활용하는 파이프라인 어플리케이션에서 오프 칩(off-ship) 메모리 자원에 접속하는 요구를 최소화하는 기술과 관련되어 있다.
몇몇의 커널 연산을 실행하는 파이프라인 처리를 정의하기 위하여, 그래픽 처리 어플리케이션 및 이미지 처리 어플리케이션이 일반적으로 사용되고 있다. 본 개시에서 커널 연산 각각은 전형적으로 쓰레드(thread)의 배열에 적용되는 어플리케이션일 수 있다.
OpenCLTM 언어에서 커널(Kernel)은 프로그램 내에 선언된 기능이다. 작업 그룹(work group)은 단일 처리부에서 실행되는 작업 항목(work item)들의 결합체이다. 작업 그룹 내의 상기 작업 항목들은 동일한 커널에서 실행되고, 메모리 자원을 공유하고, 논리적으로 동시에 실행될 수 있다.
파이프라인(pipeline)은 수반되는 이미지 처리의 첫 단계를 포함하고, 결과 이미지를 다음 처리 단계에 반영할 수 있다. 하나의 커널 연산이 다음 컴퓨터 커널이 동작하기 이전에 전체 데이터 세트를 처리하도록 하는 기록되는 것은 어플리케이션에서 일반적이다. 즉, 제1 커널은 이미지 처리의 첫번째 단계를 수행하고, 제2 커널은 이미지 처리의 두번째 단계를 수행한다. 그러나, 이러한 경우는 전체 데이터 세트 크기가 일반적으로 온-칩 캐시(on-chip cache) 또는 로컬 메모리에 저장되기에는 상당히 크기 때문에 외부 메모리로의 접속이 요구된다. 전형적인 카메라 이미지 또는 복호화된 비디오 프레임과 같은 큰 용량의 데이터 세트를 위하여, 외부 메모리(예, 외부 동적 랜덤 액세스 메모리, DRAM)로부터 수행되는 커널 각각에 대한 모든 데이터를 읽고 쓰는 것을 의미한다. 그러나 외부 메모리로부터 커널 각각에 대한 모든 데이터를 읽고 쓰는 것은 전력을 소비하고 외부 메모리에 데이터 트래픽과 같은 불이익을 초래할 수 있다.
오프-칩(off-chip) 메모리에 접속하는 커널 연산에 대한 요구를 줄이기 위한 장치, 시스템 및 방법을 개시한다. 본 발명의 실시예들은 하나 이상의 연산 커널을 퓨징(fusing)하고, 연산 커널을 인터리빙(interleaving)하고, 커널과 연관된 작업 그룹을 재정의하는 방법을 포함한다.
일 실시예에 따른 연산 커널을 활용하는 파이프라인 처리를 수행하는 방법은, 복수의 프로세서들, 온-칩 메모리을 포함하는 처리부에서 처리 단계를 수행하기 위하여, 커맨드 큐(command queue)에서 생산자 커널 및 소비자 커널 간의 종속성을 식별하는 외부 메모리로의 접속을 포함한다. 디스패치된 콜의 인터리빙된 세트는 온-칩 메모리 내에 유지되는 중간 데이터 결과인 커맨드 큐 내의 독립 커널 중 적어도 하나 이상의 세트를 위하여 생성된다.
일 실시예에 따른 커널 연산을 활용하는 파이프라인 처리를 수행하는 방법은, 복수의 프로세서들, 온-칩 메모리, 외부 메모리를 포함한다. 상기 방법은 생산자(producer) 커널들 및 소비자(consumer) 커널들 간의 종속성을 식별하는 단계를 포함할 수 있다. 커널 쌍이 인터리빙되거나 퓨징될 수 있는지의 결정을 수행할 수 있다. 적어도 2 이상의 커널들이 퓨징된 커널로 대체되고, 상기 퓨징된 커널이 디스패치되면 퓨징은 수행될 수 있다. 인터리빙이 수행되고, 디스패치 콜의 인터리빙된 세트가 적어도 하나 이상의 독립 커널 세트를 위해서 디스패치되면 중간(intermediate) 데이터 결과는 온-칩 메모리에서 유지된다. 일 실시예에 따른 커널 종속 그래프는 생산자 커널 및 소비자 커널 간의 관계를 정의함으로써 생성된다. 일 실시예에 따른 작업 그룹은 적어도 2 이상의 커널들의 입력 및 출력을 매칭시키기 위해서 재정의된다.
일 실시예에 따른 시스템은 복수의 프로세서 및 온-칩 메모리를 포함하는 그래픽 처리부를 포함한다. 드라이버 및 컴파일러는 생산자 커널 및 그래픽 어플리케이션과 연관된 소비자 커널 간의 종속성을 식별하기 위해서 적용될 수 있고, 커널 쌍이 인터리빙되거나 퓨징되는 경우에 적어도 2 이상의 커널을 퓨징된 커널로 대체하고 퓨징된 커널을 디스패치하며, 온-칩 메모리에 유지되는 중간 데이터 결과의 적어도 하나 이상의 독립 커널을 위해서 디스패치 콜들의 인터리빙된 세트를 생성할 수 있다. 일 실시예에 따른 시스템은 종속적 커널의 입력 및 출력을 매칭시키기 위한 적어도 2 이상의 커널들과 연관된 작업 그룹들을 재정의하고, 온-칩 메모리 내에 중간 데이터 결과를 유지하기 위해서 설정될 수 있다.
본 발명의 일 실시예에 따른 연산 커널을 이용하는 파이프라인 처리를 수행하는 방법에 있어서, 커맨드 큐(command queue)에서 생산자 커널 및 소비자 커널 간의 종속성을 식별하는 단계; 및 상기 커맨드 큐 내의 상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하는 단계로서, 중간 데이터 결과는 온-칩 메모리 상에 유지되는 단계;를 포함하고, 상기 단계들을 처리하는 처리부는 복수의 프로세서, 온-칩 메모리 및 외부 메모리로의 접속을 포함할 수 있다.
바람직하게는, 상기 종속성을 식별하는 단계는, 커널 세트가 생산자-소비자 관계에 있는지 여부를 결정하는 단계를 포함할 수 있다.
바람직하게는, 상기 종속성을 식별하는 단계는, 후보 커널들의 입력 및 출력 주소의 종속성을 분석하는 단계를 포함할 수 있다.
보다 바람직하게는, 상기 종속성을 식별하는 단계는, 생산자 커널들 및 소비자 커널들 간의 관계를 정의하는 커널 종속성 그래프를 생성하는 단계를 포함할 수 있다.
바람직하게는, 종속적 커널들의 입력들 및 출력들을 매칭시키기 위해서, 적어도 2 이상의 커널들과 연관된 작업 그룹들을 재정의하는 단계를 더 포함할 수 있다.
보다 바람직하게는, 상기 재정의하는 단계는, 상기 온-칩 메모리 내에 중간 데이터 결과를 유지하기 위해서 선택될 수 있다.
보다 바람직하게는, 상기 온-칩 메모리 내의 중간 데이터 결과를 유지하기 위해서 조작 순서를 선택할 수 있다.
바람직하게는, 이미지는 인접한 스트립들로 구분되고, 각각의 스트립은 서로 다른 프로세서에 할당되며, 상기 방법은, 인접한 작업 그룹에 대한 데이터 재사용을 동기화하는 단계를 더 포함할 수 있다.
바람직하게는, 퓨징될 수 있는 커널들을 식별하는 단계; 및 퓨징된 커널들에 대한 디스패치 콜을 생성하는 단계를 더 포함할 수 있다.
바람직하게는, 코드 명령을 스캐닝하는 단계; 접속 패턴 및 범위 정보를 분석하는 단계; 및 인터리빙 또는 퓨징의 후보인 커널들을 태깅하는 단계를 더 포함할 수 있다.
본 발명의 또다른 일 실시예에 따른 연산 커널을 이용하는 파이프라인 처리를 수행하는 방법에 있어서, 커맨드 큐(command queue)에서 생산자 커널 및 소비자 커널 간의 종속성을 식별하는 단계; 커널 쌍이 인터리빙(interleaving) 또는 퓨징(fusing)될 수 있는지를 결정하는 단계; 적어도 2 이상의 커널들을 퓨징된 커널로 대체하고, 퓨징된 커널을 디스패치(dispatch)하는 단계; 및 상기 커맨드 큐 내의 상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하는 단계로서, 중간 데이터 결과는 온-칩 메모리 상에 유지되는 단계;를 포함하고, 상기 단계들을 처리하는 처리부는 복수의 프로세서, 온-칩 메모리 및 외부 메모리로의 접속을 포함할 수 있다.
바람직하게는, 상기 종속성을 식별하는 단계는, 생산자 커널들 및 소비자 커널들 간의 관계를 정의하는 커널 종속성 그래프를 생성하는 단계를 포함할 수 있다.
바람직하게는, 종속적 커널들의 입력들 및 출력들을 매칭시키기 위해서, 적어도 2 이상의 커널들과 연관된 작업 그룹들을 재정의하는 단계를 더 포함할 수 있다.
보다 바람직하게는, 상기 재정의하는 단계는, 상기 온-칩 메모리 내에 중간 데이터 결과를 유지하기 위해서 선택될 수 있다.
보다 바람직하게는, 상기 온-칩 메모리 내의 중간 데이터 결과를 유지하기 위해서 조작 순서를 선택하는 단계를 더 포함할 수 있다.
바람직하게는, 이미지는 인접한 스트립들로 구분되고, 각각의 스트립은 서로 다른 프로세서에 할당되고, 상기 방법은, 인접한 작업 그룹에 대한 데이터 재사용을 동기화하는 단계를 더 포함할 수 있다.
본 발명의 또다른 일 실시예에 따른 복수의 프로세서 및 온-칩 메모리를 포함하는 그래픽 처리부; 및 드라이버 및 컴파일러를 포함하고, 상기 드라이버 및 상기 컴파일러는, 그래픽 어플리케이션과 연관되는 생산자 커널 및 소비자 커널 간의 종속성을 식별하고, 커널 쌍들이 인터리빙(interleaving) 또는 퓨징(fusing)될 수 있는지 결정하고, 적어도 2 이상의 커널을 퓨징된 커널로 대체하고, 퓨징된 커널을 디스패치(dispatch)하고, 상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하고 중간 데이터 결과는 온-칩 메모리 상에 유지되는 시스템일 수 있다.
바람직하게는, 적어도 2 이상의 커널들에 연관된 작업 그룹들을 종속적 커널들의 입력 및 출력을 매칭시키고 온-칩 메모리 내에 중간 데이터 결과를 유지하기 위해서 재정의하도록 설정될 수 있다.
도 1은 본 발명의 일 실시예에 따른 파이프라인 어플리케이션을 위한 시스템 환경을 도시한다.
도 2는 본 발명의 일 실시예에 따른 퓨징되거나 또는 인터리빙될 수 있는 후보인 커널 분석을 생성하는데 지원되는 컴파일러를 위한 방법을 도시한다.
도 3은 본 발명의 일 실시예에 따른 커널을 퓨징 또는 인터리빙하기 위한 드라이버를 이용하는 방법을 도시한다.
도 4는 본 발명의 일 실시예에 따른 커널을 퓨징 또는 인터리빙하는 것을 지원하기 위한 방향성 비사이클 그래프(Directed Acyclic Graph; DAG)를 이용하는 드라이버의 일 측면을 도시한다.
도 5는 본 발명의 일 실시예에 따른 명령을 실행하는 하드웨어를 도시한다.
도 6은 본 발명의 일 실시예에 따른 가우시안 블러 처리를 도시한다.
도 7 및 도 8은 본 발명의 일 실시예에 따른 필터링 처리에서 데이터 블록들을 조작(traversal)하는 예를 도시한다.
도 9는 본 발명의 일 실시예에 따른 퓨징 및 인터리빙을 수반하는 전형적인 가우시안 필터링을 비교한다.
이하 첨부된 도면을 참조하면서 본 발명을 한정하지 아니하고 오로지 예시를 위한 실시예에 의해 본 발명을 상세히 설명하기로 한다. 본 발명의 하기 실시예는 본 발명을 구체화하기 위한 것일 뿐 본 발명의 권리 범위를 제한하거나 한정하는 것이 아님은 물론이다. 본 발명의 상세한 설명 및 실시예로부터 본 발명이 속하는 기술분야의 전문가가 용이하게 유추할 수 있는 것은 본 발명의 권리범위에 속하는 것으로 해석된다.
본 실시예들은 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법 및 이를 위한 장치 관한 것으로서 이하의 실시예들이 속하는 기술 분야에서 통상의 지식을 가진 자에게 널리 알려져 있는 사항들에 관해서는 자세한 설명을 생략한다.
본 발명에서 개시되는 용어들에 대하여 설명하기로 한다.
커널(Kernel)은 시스템의 초기화 및 인터럽트를 처리하기 위한 특별한 프로세스들과 프로세스 기법을 구현하기 위한 기본적인 모니터로 구성되며, 프로세스들 사이의 환경 교환과 새 프로세스를 생성해 내는 모듈을 포함할 수 있다.
또한 커널은 운영 체제의 핵심 부분으로, 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히, 프로세스의 처리를 할당하는 스케쥴링을 수행한다.
퓨징(fusing)은 플래폼(platform)에 어떠한 소프트웨어를 결합시키는 동작을 의미한다.
인터리빙(interleaving)은 캐시(cache)와 같이 대부분의 컴퓨터 프로그램이 순차적으로 주소를 참조한다는 사실을 이용한 것으로, 순차적인 주소들이 순차적 메모리 보드에 할당됨으로써 CPU가 한 워드(word)를 가져와서 조작하는 동안에 그 보드의 메모리 사이클이 끝날 때까지 기다릴 필요없이 다음 워드를 가져올 수 있게 한다.
커맨드 큐(command queue)는 내장 메모리의 성능을 극대화하기 위해서 여러 입출력 데이터를 한번에 처리하는 기술이다.
디스패치(dispatch)는 프로세스의 전환을 의미하며, 수많은 프로세스들이 한정된 수의 CPU를 동시에 이용하기 위해 프로세스 스케쥴러는 최적의 프로세스에 CPU의 실행 권한을 준다. 가장 적절한 프로세스에 실행 권한을 주기 위해서, 원래 CPU 상에서 동작하고 있던 프로그램을 중단하고 새로운 프로세스를 실행하게 되며, 이러한 처리를 프로세스 전환 또는 프로세스 디스패치라고 한다.
쓰레드(thread)는 운영체제 등이 여러 프로세스를 동시에 처리하듯 독립적으로 실행되는 세부 실행단위를 말한다. 한 블록 안의 쓰레드들은 워프(warp)라고 하는 단위로 세분화 될 수 있으며, 하나의 워프는 동시에 스케쥴링 되는 쓰레드들의 하나의 그룹에 해당된다.
슬라이딩 윈도우(sliding window)는 설정된 윈도우 크기만큼 확인 크기없이 데이터 흐름을 동적으로 조절하는 제어 기법을 말한다. 슬라이딩 윈도우 기법을 이용하여 여유 버퍼 공간을 반영하여 효율적인 자원 활용이 가능하다.
도 1은 본 발명의 일 실시예에 따른 파이프라인 어플리케이션을 위한 시스템 환경을 도시한다.
도 1은 본 발명의 일 실시예에 따른 칩(100) 상의 시스템의 일 예를 도시한다. 일 실시예에 따른 칩(100) 상의 시스템은 제어부(102) 및 각각의 처리 요소(processing element)가 프로세서 및 연관된 하드웨어 요소를 포함하는 처리 요소 세트(105)를 포함한다. 일 실시예에 따른 처리 요소 각각의 쌍은 공유 메모리(Shared Memory; SM)를 포함하고, 각각의 프로세서는 로컬 L1(level-1) 캐시에 접속한다. 처리 요소(105)는 동시에 동작하고, 처리 요소(105)의 총 개수는 처리 요구량에 기초하여 선택될 수 있다. 공유 메모리 및 L1 캐시는 로컬 메모리에 프로세서 쌍을 제공한다. 일 실시예에 따른 상위 레벨 캐시 메모리(예. Level-2, L2)는 프로세서들 간에 공유된다. DRAM 메모리와 같은 외부(오프-칩) 메모리(150)에 추가적인 접속(access)이 지원될 수 있다. 다른 고정 기능 및 프로그램부(130)는 완전한 그래픽 처리부(GPU) 또는 이미지 프로세서를 형성하기 위해 칩 상에 포함될 수 있다.
파이프라인 처리는 커널 연산과 연관된 다른 처리 단계를 포함할 수 있다. 본 발명의 실시예들은 외부 메모리에 접속하기 위한 커널에 대한 요구를 줄이는 기술의 하나 이상의 세트를 포함할 수 있다. 소프트웨어 지원은 커널을 퓨징하고, 작업 그룹을 리사이징하고, 커널을 인터리빙하기 위해 제공된다. 일 실시예에 따른 소프트웨어 지원은 드라이버(120) 및 컴파일러(125)를 포함한다.
도 2는 본 발명의 일 실시예에 따른 결합되거나 또는 인터리빙될 수 있는 후보인 커널 분석을 생성하는데 지원이 되는 컴파일러를 위한 방법을 도시한다.
도 2는 본 발명의 일 실시예에 따른 컴파일러에서 발생되는 동작들을 도시하는 순서도이다. 일 실시예에 따른 컴파일러는 인터리빙 또는 다른 커널들과 퓨징하기 위한 후보가 있는지를 결정하기 위해 커널의 주소-전용(address-only) 버전을 분석한다. 컴파일러는 커널들을 분석하기 위해서 커널들의 지시를 스캔하고(205), 인터리빙 또는 퓨징할 후보가 있는지 여부를 카테고리화한다. 일 실시예에 따른 확인 절차는 인정되지 않은 경우를 위하여 수행된다(210). 예를 들어, 입력 및 출력 주소와 연관되어 있지 않은 모든 지시 및 생성은 분석에 제한되지 않는다. 추가적인 불필요한 코드들은 제거된다. 분석은 인정되지 않은 경우에 대해서 실행되지 않을 수 있다.
인정되지 않는 경우가 없는 경우(214), 조건 세트는 결과 코드에서 확인된다. 모든 조건을 만족하는 경우, 커널은 인터리빙/퓨징 후보로서 카테고리화된다. 일 실시예에 따른 메모리 참조 지시는 표시되고, 작업 그룹 차원은 결정된다(225). 입력 및 출력은 분석된다(230). 예를 들어 입력 및 출력 주소가 로컬 ID 또는 그룹 ID에 종속적인지 여부가 확인될 수 있다. 작업 항목 간의 접속 패턴이 분석된다(235). 작업 항목 내의 접속 패턴 및 범위가 분석된다(240). 커널은 인터리빙 또는 퓨전 후보로서 태그되고, 접속 패턴 및 범위 정보는 저장된다. 일 실시예에 따른 확인은 하나의 처리에서 커널에 의해 수행되는 모든 쓰레드를 위해서 동일하지 않은 컴파일 시간에 알려지지 않은 변수에 종속적이지 않는지를 결정하는 확인일 수 있다. 커널의 주소-전용 버전에 차단되지 않음을 확인할 수 있다. 주소가 제한된 범위로 한정되는지 확인은 쓰레드의 2차원 배열을 위해 캐시 내에 데이터가 유지되기 위해서 정의될 수 있다. 제한된 범위는 연속된 범위일 필요가 없다. 예를 들어, 제한된 범위는 몇몇의 불연속적 범위일 수 있다.
도 3은 본 발명의 일 실시예에 따른 커널을 퓨징 또는 인터리빙하기 위한 드라이버를 이용하는 방법을 도시한다.
도 3은 본 발명의 일 실시예에 따라 드라이버에서 발생하는 동작을 도시하는 순서도이다. 커맨드 큐(command queue)는 인큐(enqueue)된 커널 쌍을 위해서 검색될 수 있고, 커널 쌍은 퓨징 또는 인터리빙되었는지 여부를 결정할 수 있다. 일 실시예에 따른 초기 확인은 커널 쌍이 생산자-소비자 관계를 가지는지 여부를 결정하기 위해 수행될 수 있다(310). 생산자-소비자 관계가 있는 경우, 컴파일러 분석이 확인된다(320). 이러한 확인은 커널 쌍이 퓨징될 수 있는지 여부를 확인할 수 있다(330). 커널 쌍이 퓨징될 수 있는 경우, 커널 쌍은 퓨징된 단일 커널로 대체되고, 퓨징된 단일 커널은 디스패치된다. 커널 쌍이 퓨징될 수 없는 경우, 커널 쌍이 인터리빙될 수 있는지 여부를 확인할 수 있다(350). 퓨징된 커널은 특별하게 종속적인 커널에 의해서 퓨징될 수 있다. 커널 퓨징 처리는 칩 상의 중간 데이터를 유지하는 것을 지원하는데 최적화될 수 있고, 바람직하게는 프로세서 로컬 메모리(예, L1 캐시 또는 공유 메모리) 내에서 처리될 수 있다. 일 실시예에 따른 2 이상의 생산자 및 소비자 커널의 단일 커널로의 퓨징은 중간 데이터가 프로세서 로컬 메모리(공유 메모리, 레지스터 또는 L1 캐시) 또는 다른 경우의 L2 캐시의 프로세서를 통해 통과하기 위해서 선택될 수 있다. 일 실시예에 따라서 프로세서 로컬 메모리 내의 중간 데이터를 유지하기 위해서 이미지(타일)의 작은 부분들은 퓨징된 버전의 모든 처리 단계를 수행할 수 있다.
일 실시예에 따른 드라이버는 커널 연산과 관련된 방향성 비사이클 그래프(directed acyclic graph; DAG)를 연산할 수 있다. 방향성 비사이클 그래프는 커널 간에 종속성을 포함하는 커널 간의 생산자-소비자 관계를 설명한다. 종속성은 커널 B에 종속적인 커널 A와 같이 두 커널 간의 간단한 방향 종속성일 수 있다. 보다 일반적으로 방향성 비사이클 그래프는 2 이상의 커널들 간의 복잡한 종속 관계를 포함할 수도 있다. 일 실시예에 따른 커널 종속성 그래프는 일련의 커널 연산 간에 생산자/소비자 관계를 정의하도록 구성될 수 있다. 종속적 커널은 매칭될 수 있다. 일 실시예에 따른 방향성 비사이클 그래프는 커널의 집합의 입력 및 출력을 위해 사용되는 버퍼를 검사함으로써 구성될 수 있다. 일 실시예에 따른 생산자 커널은 이미지의 출력 버퍼에 기록할 수 있다. 소비자 커널은 서로 다른 생산자 커널에 의해서 생성된 복수의 이미지 각각으로부터 읽음에도 불구하고, 동일한 버퍼로부터 읽을 수 있다. 다른 커널의 출력을 읽거나 다른 커널에 의해 읽혀진 출력을 기록하는 커널들은 방향성 비사이클 그래프에 포함될 수 있다. 일 실시예에 따라 버퍼들의 매칭에 관련되는 OpenCLTM 언어 내의 표면 기본 주소들을 매칭함으로써 결정될 수 있다.
일 실시예에 따른 드라이버는 인터리빙된 방식 내의 방향성 비사이클 그래프 내의 커널의 전체 또는 부분을 처리하기 위하여 타일 세트를 디스패치한다. 일련의 커널 동작에서, 일부 데이터는 최종 결과를 생성하기 위한 종속적 그래프 내에서 다른 커널에 의해 사용되는 데이터 내의 중간 데이터이다. 일 실시예에 따른 타일 전송의 인터리빙은, 읽을 다음 디스패치를 위한 프로세서 로컬 메모리 내의 중간 데이터를 생산하기 위해서 선택된다. 즉, 인터리빙은 칩 상에 유지되는 중간 데이터를 위하여 선택될 수 있다. 일련의 커널로부터의 최종 결과(예, 최종 이미지)는 외부 메모리에 기록될 수 있다.
일 실시예에 따른 드라이버는 방향성 비사이클 그래프의 선택된 에지를 위하여 작업 그룹 차원을 매치 노드로 재정의한다. 노드 쌍을 위하여, 드라이버는 작업 그룹 차원을 재정의하고, 소비자 커널의 입력은 L1 캐시 또는 공유 메모리 내에 저장되는 작업(예, 32 쓰레드의 워프(warp))의 적어도 하나의 단위를 처리하기 위해 요구되는 중간 데이터의 일 지점의 슬라이딩 윈도우(sliding window)이다. 생산자 커널의 차원은 소비자 커널의 차원에 매칭될 수 있다.
일 실시예에 따른 드라이버는 종속 체인(chain) 내의 제1 커널을 위한 입력 데이터를 조작(traversal)하여 최적화되는 작업 그룹의 크기를 선택한다. 조작은 슬라이딩 윈도우의 형태일 수 있다. 작업 그룹은 입력 이미지의 영역을 가능한 한 크게 커버하기 위해 크기 조절될 수 있다. 이로 인하여 작업 그룹 각각의 출력은 L1 캐시, 공유 메모리 또는 L2 캐시와 같은 온-칩 메모리에 적합할 수 있다. 이러한 경우, 지연을 보상하기 위한 충분한 워프를 선택할 수 있다. 2 이상의 종속적 커널과 같은 보다 복잡한 종속성에 대해서, 작업 그룹은 작업 그룹 차원을 재정의함으로써 출력 및 입력 영역에 대하여 매칭될 수 있다.
일 실시예에서, 작업 그룹 크기 및 인터리빙은 가능한 한 L1 캐시 및 공유 메모리의 프로세서 로컬 메모리 내의 커널 A에 의해서 생성되는 중간 데이터를 보호하기 위해 선택된다. 커널 B는 바람직하게게 특정 프로세서들에 작업 그룹을 할당하는 것을 요구하는 프로세서 로컬 메모리로부터 데이터를 읽는다. 특정 프로세서들에 작업 그룹을 할당하는 것은 프로세서 로컬 데이터의 중간 데이터의 재사용을 극대화한다. 추가적으로 큰 디스패치를 많은 부분으로 분리하는 것은, 보다 작은 디스패치 각각이 다른 소비자 커널의 작은 디스패치에 의해서 읽히는 중간 데이터를 남기기 위하여 프로세서당 하나의 작업 그룹에서 실행되기 위해서 선택될 수 있다.
일 실시예에 따른 드라이버는 작업 그룹 차원을 재정의 및 크기 조절할 수 있고, 소비자 커널의 작업 그룹에 요구되는 입력을 생산자 커널의 하나의 작업 그룹의 출력과 매칭시킬 수 있다. 일 실시예에 따라 처리 순서가 프로세서 로컬 메모리를 이용하는 생산자 커널 및 소비자 커널 간에 중간 데이터를 효과적으로 통과시키기 위한 정도를 제어될 수 있다. 도시된 바와 같이, 단일 픽셀을 처리하는 쓰레드를 가지는 것보다, 2차원 영역의 N번째 픽셀 모두를 처리하는 쓰레드 및 큰 영역을 처리하는 작업 그룹 전체 ? 예를 들어, M 폭의 칼럼 ? 제어된 순서 내의 단일 프로세서 상에서 및 프로세서의 로컬 메모리 내의 모든 중간 데이터를 유지하기 위한. 추가적으로, 다른 선택은 작업을 원활한 작업량 균형을 위해서 가용할 수 있는 모든 프로세서에 작업을 충분하게 세분하는 것이다.
일 실시예에 따른 드라이버는 방향성 비사이클 그래프의 선택된 에지를 위하여 작업 그룹을 매치 노드에 재정의한다. 노드 쌍을 위하여 드라이버는 작업 그룹 차원을 재정의하고, 소비자 커널의 입력은 L1 캐시 또는 공유 메모리에 적합한 적어도 하나의 워프(warp)를 처리하기 위해 요구되는 중간 데이터에서 일 지점의 슬라이딩 윈도우이다. 생산자 커널의 차원은 소비자 커널의 차원과 매칭된다. 소비자 커널을 위한 작업 그룹은 출력의 2차원 슬라이스(slice)를 생성하기 위해 정의된다. 일 실시예에 따른 코드는 슬라이스 내의 데이터를 제어 조작하기 위해서 슬라이스 내의 N번째 데이터 모두를 통해서 논리적으로 순환되도록 수정된다. 일 실시예에 다른 초기 슬라이스 차원은 하나의 워프 폭(예를 들어, 일 실시예에서 32 픽셀)이고, 1/M의 칼럼 높이를 가진다. 상기 M은 이미지를 모든 프로세서에 충분히 세분하기 위해서 선택된다.
일 실시예에 따른 슬라이스 윈도우의 조작은 하나가 아닌 복수의 입력을 처리하기 위한 커널을 수정함으로써 달성된다. 하나의 입력을 다음으로 이동시키는 것은 제어된 방식에서 이미지의 입력 데이터 상에 윈도우을 이동시키는 효과를 가진다. 예를 들어, 조작 방식으로 각 쓰레드 처리가 8행으로부터 1 픽셀을 처리할 수 있다. 쓰레드 0은 입력 이미지의 수직 열을 (0,0), (8,0), (16,0)으로 처리할 수 있다. 픽셀을 처리하는 소프트웨어 제어는 특정 프로세서 및 정확한 처리 순서로 배정되는 것을 제공한다.
일 실시예에 따른 이미지는 이미지의 서로 다른 부분에서 동시에 동작하는 서로 다른 프로세서에 할당되고, 줄(또는 열)로 구분될 수 있다. 간혹 근접한 줄(또는 열)은 경계에서 입력 데이터를 공유할 수 있다. 인접한 프로세서에서 실행되는 인접한 작업 그룹 간의 로컬 동기화는 인접한 프로세서들을 동기화하도록 제공될 수 있고, 하나의 프로세서가 공유 데이터를 읽는 경우, 다른 프로세서들은 캐시에 있는 동안 그 뒤에 그것을 이용할 수 있다. 일 실시예에 따른 작업 그룹은 메모리 내에 “위치” 변수로 남아 있고, 위치가 일부 임계 값에 도달하기 전까지 효과적으로 처리부를 구동 중지(stalling)할 수 있는 인접한 작업 그룹에 의해서 검사될 수 있다. 추가적으로 하드웨어 지원이 제공될 수 있고, 작업의 개별 단위를 선택된 횟수의 순환 또는 이벤트가 발생하기까지 휴면 상태로 놓을 수 있다.
도 4는 본 발명의 일 실시예에 따른 커널을 퓨징 또는 인터리빙하는 것을 지원하기 위한 DAG를 이용하는 드라이버의 일 측면을 도시한다.
도 4는 본 발명의 일 실시예에 따른 방향성 비사이클 그래프의 이용의 추가적인 상세 부분을 도시하는 순서도이다. 블록 450에서, 드라이버는 인터리빙 후보인 방향성 비사이클 그래프(410)를 생성하기 위해서 독립 커널 연산을 검출한다. 블록 415에서, 프로세서는 방향성 비사이클 그래프 에지의 다음 노드 쌍을 검사하기 위해서 이동한다. 블록 420에서, 커널 쌍이 인터리빙 또는 퓨징되었는지 여부의 결정이 수행된다. 커널 쌍이 인터리빙 또는 퓨징되지 않은 경우, 방향성 비사이클 그래프 에지는 폐기된다(425). 커널 쌍이 인터리빙 또는 퓨징되는 경우, 커널 쌍은 인티리빙 또는 퓨징하기 위한 커널 쌍의 목록을 생성하기 위해서(440), 인터리빙 또는 퓨징을 위한 커널 쌍의 후보 리스트에 추가된다(430). 방향성 비사이클 그래프 에지의 노드 쌍을 검사하는 초기 생성은 모든 방향성 비사이클 그래프 에지가 검사될 때까지 계속된다(435). 퓨징될 수 있는 커널 세트는 그룹화되고(450), 2 이상의 서로 관계된 쌍을 포함할 수 있다. 일 실시예에 따른 커널 세트는 2 이상의 생산자 및 소비자 커널을 포함하고, 로컬 메모리 프로세서(공유 메모리, 레지스터 또는 L1 캐시) 또는 일부 경우 L2 캐시를 통해서 통과하는 중간 데이터가 있는 단일 커널로 퓨징된다.
일 실시예에서 추가 최적화는 커널의 인터리빙 쌍들의 세트가, 인터리빙된 세트의 중간 데이터가 온-칩 메모리의 성능을 최적화하기 위해 선택적으로 수행될 수 있다. 일 실시예에서 이러한 최적화는 작업 그룹을 리사이징하고, 자르고, 및/또는 인터리빙 커널의 세트로 세분화하는 것을 포함할 수 있고(455), 인터리빙된 세트 각각에 대한 중간 데이터는 온-칩 메모리에 적합하고, 입력은 출력과 매칭될 수 있다. 대조적으로, 최적화가 수행되지 않으면, 인터리빙된 커널에 대한 중간 데이터는 오프-칩 메모리로의 접속을 요구할 수 있다. 퓨징된 커널의 세트들은 재컴파일된다(460). 하드웨어 명령 스트림은 선택된 세트의 커널 연산의 실행을 인터리빙하기 위해서 생성된다(465). 명령 스트림은 실행을 위해서 GPU 하드웨어에 디스패치된다(470).
일 실시예에 따른 커널들은 L1 캐시 또는 공유 메모리에 있는 중간 데이터의 타일 기초 처리의 적어도 2 이상의 단계에서 수행되기 위해서 디스패치 콜의 적어도 2회차 이상을 가지는 디스패치 콜의 인터리빙 세트를 통해서 인터리빙될 수 있다. 예를 들어, 가장 간단한 경우로 제1 디스패치 콜은 타일들의 제1 세트 상에서의 처리의 제1 단계를 수행하기 위한 모든 프로세서들 상에서 작업 그룹들을 시작한다. 차후의 디스패치는 같은 타일들 상에서의 처리의 다른 단계들에서 수행된다. 중간 데이터는 L1 캐시 또는 공유 메모리를 통해서 지나간다. 일 실시예에 따른 하드웨어는 특정 작업 그룹들을 특정 공유 메모리 또는 L1 캐시를 이용하는 특정 프로세서들에게 할당한다. 이러한 인터리빙은 단일 생산자-소비자 종속성뿐만 아니라 많은 일반적인 경우로 확장될 수 있다.
작업은 몇몇의 다른 방식으로 인터리빙 방식으로 디스패치 될 수 있다. 하나의 방식은 인터리빙 효과를 위해서 퓨징된 생산자 및 소비자 타일을 포함하는 것이다. 다른 방식은 생산자 커널의 N개의 타일들의 디스패치를 하고 나서, 소비자 커널의 M개의 타일들을 디스패치한다. 이러한 예에서, 소비자 커널의 입력 데이터는 생산자 커널의 이전 디스패치에 의해서 생산된 것일 수 있고, 이러한 데이터의 대부분 또는 전부는 프로세서 로컬 메모리 내에 있다. 커널들의 디스패치는 동일한 프로세서로 매핑될 수 있다.
복수의 커널들의 디스패치에 대한 인터리빙은 생산자 커널의 데이터가 L1 캐시 또는 공유 메모리에 남겨지고, 소비자 커널에 의해서 다음 디스패치에서 읽히기 위해서 수행될 수 있다. 일 실시예로, 하나의 작업 그룹은 프로세서 별로 시작된다. 중간 결과는 공유 메모리, L1 캐시 또는 L2 캐시에 남겨진다. 차후의 제2 커널의 시작은 공유 메모리 또는 캐시로부터 입력 데이터를 읽는다. 모든 작업 그룹은 인터리빙 순서로 반복된다. 예를 들어, 16개의 프로세서들과 공유 메모리 및 L1 캐시가 있는 상황을 고려해보자. 커널 A의 제1 디스패치에서 16개의 작업 그룹이 공유 메모리 또는 L1 캐시에 부합되는 출력을 개시된다. 커널 B의 제2 디스패치는 공유 메모리 또는 L1 캐시로부터의 입력이 있는 16개의 작업 그룹들을 개시한다. 이러한 처리과정은 계속될 수 있고, 예를 들어, 커널 B의 출력을 커널 C에 반영시킬 수 있다. 일 실시예에 따른 하드웨어 지원은 특정 작업 그룹들의 특정 처리 요소들로의 할당을 지원하는데에 제공된다. 즉, 하드웨어는 소비자 작업 그룹을 생산자 커널 출력에 매칭되어 생산되는 특정 프로세서에게 디스패치를 지원한다. 이러한 방식의 데이터는 프로세서 로컬 메모리를 통해서 처리된다.
도 5는 본 발명의 일 실시예에 따른 명령을 실행하는 하드웨어를 도시한다.
도 5는 본 발명의 일 실시예에 따른 하드웨어 실행의 일 측면을 도시한다. 모든 명령들이 처리되었는지 여부를 결정할 수 있다(505). 모든 명령들이 처리된 경우, 명령들은 분석되고(510), 인터리빙된 연산 디스패치 명령 또는 단일한 퓨징 또는 퓨징되지 않은 연산 디스패치 명령의 다음 세트의 시작을 포함한다. 인터리빙된 디스패치들의 세트인지 여부 결정이 블록 515에서 수행된다. 인터리빙된 디스패치들의 세트가 아닌 경우, 단일 디스패치는 모든 연산 유닛들 상의 모든 작업 그룹들을 실행시키도록 수행될 수 있다. 명령들이 인터리빙된 디스패치들의 세트인 경우, 인터리빙된 커널 세트는 처리된다(530). 하나의 작업 그룹은 각 연산 유닛에 대하여 제1 생산자 커널로부터 디스패치된다. 결과는 커널에 의해서 온-칩 메모리 상에 기록되고 다음 커널의 입력으로서 읽혀진다. 하나의 작업 그룹은 인터리빙된 커널들의 생산자/소비자 세트 내의 제2 커널로부터 각 연산 유닛으로 디스패치된다(535). 이전 커널의 출력은 입력으로 읽힌다. 하나의 작업 그룹은 인터리빙된 커널들의 생산자/소비자 세트 내의 마지막 커널로부터 각 연산 유닛으로 디스패치된다(540). 이전 커널의 출력은 입력으로 읽힌다. 출력은 캐시에서 기록된다. 인터리빙 세트 내의 모든 작업 그룹들이 실행되었는지 여부의 확인이 이루어진다(545).
일 실시예에 따른 하드웨어는 처리 요소의 작업 그룹 지시된 할당을 지원한다. 이것은 필요한 입력 데이터를 가지는 프로세서에 인터리빙된 디스패치 내의 작업 그룹들이 매칭이 가능하게 한다. 일 실시예에 따른 하드웨어는 전역(global) 차단을 지원한다. 인접한 작업 그룹간에 공유된 데이터의 재-패치(re-fetch)를 최소화하기 위해서, 광범위한 차단은 완화된 동기화 내의 작업 그룹 처리를 유지시킨다. 이러한 방식으로 동시에 실행되는 하나 이상의 다른 작업 그룹들을 위해 요구되는 입력 데이터 내의 하나의 작업 그룹이 도입되는 경우, 모든 작업 그룹이 소비될 때까지 데이터는 캐시에 유지될 수 있다. 대신에, 세마포어(semaphore) 또는 신호들은 데이터가 다른 작업 그룹에 의해서 겹쳐 쓰여지는 경우, 지시에 이용될 수 있다.
도 6은 본 발명의 일 실시예에 따른 가우시안 블러 처리를 도시한다.
도 6은 본 발명의 일 실시예에 따른 가우시안 블러(Gaussian Blur) 처리의 일 예를 도시한다. 일 실시예에서 이미지(605)는 칼럼 형태의 세로줄(610)로 구분되고, 세로줄은 이미지의 다른 부분과 동시에 동작되는 다른 프로세서들에 할당된다. 작업 그룹들은 각 칼럼 또는 부분 칼럼에 할당된다. 각 작업 그룹은 슬라이딩 윈도우의 방식으로 아래로 이동한다. 작업 그룹 내의 각 쓰레드는 N개의 픽셀들을 입력 데이터가 한번에 읽히도록 칼럼 방향의 이동을 제어하도록 처리된다. 확대된 화면(630)은 적용될 수평 필터 1 및 수직 필터 2를 가지는 개별 스트립의 확대된 화면을 도시한다. 예를 들어, 수평 필터 1은 N개의 행을 위해서 수행되고, 수직 필터 2는 수직으로 필터링 되는 행을 생성하기 위해서 칼럼의 폭을 가로질러 수행된다. 각각 새롭게 수평으로 필터링된 줄에 대해서, 수직 필터는 이후에 적용된다. 작업 그룹들은 필터링된 이미지(650)를 생성하기 위해서 이용되는 필터링된 스트립(640) 내의 결과를 위해서 개별 스트립의 위에서 아래로 필터링을 수행하도록 칼럼의 아래로 이동한다.
인접한 스트립들은 그들의 경계에서 입력 데이터를 공유할 수 있다. 입력 데이터는 인접한 스트립들(610)의 작업 그룹 간에 공유된다. 화살표(615)는 인접한 스트립의 작업 그룹 간에 제공된 동기화를 도시한다. 타원 박스(620)는 스트립 간에 경계에 가까운 영역 내의 작업 그룹 간에 입력 데이터가 공유되는 영역을 도시한다. 결론적으로, 하나의 프로세서가 공유 데이터를 읽고, 다른 인접한 프로세서가 데이터가 온-칩 캐시에 있는 동안 다음 동일 데이터를 이용할 수 있는 경우, 인접한 프로세서들의 완화된 동기화 내에서 잠재적으로 효율 향상이 있다. 일 실시예에서 광범위한 동기화 메커니즘은 언제 프로세서들이 깨어서 계속되는지 알기 위해 세마포어를 폴링(polling)하는 것을 제공한다.
슬라이딩 윈도우의 데이터의 순회는 다양한 방식들로 수행될 수 있다. 일 실시예에서 커널들은 단지 하나가 아닌 복수의 입력들을 처리하기 위해서 수정된다. 하나의 입력을 다음으로 이동하는 것은 제한된 방식에서 입력 데이터 상의 윈도우를 이동하는 효과를 가진다. 도시되는 일 예로서, 순회 기법은 각 쓰레드가 모든 8개의 행으로부터 1개의 픽셀을 처리하는 것을 가정한다. 따라서 쓰레드 0은 픽셀 (0,0), (8,0), (16,0)을 입력 이미지의 수직 스트립으로 아래로 내리는 처리를 할 수 있다. 이러한 방법은 어떻게 픽셀 처리가 프로세서에 할당되는지 또는 처리된 정확한 순서의 소프트웨어로의 제어를 제공한다.
일반적인 경우, 최적화된 조작 방법은 프로세서 요소들의 개수; 공유 메모리 및 레벨1 및 레벨 2 캐시 메모리를 포함하는 온-칩 메모리의 크기; 이미지 폭, 이미지 높이 및 이미지 픽셀당 바이트(byte); 입력 필터의 폭 및 높이와 같은 변수들에 기초할 수 있다. 일반화된 조작 방법은 하나 또는 둘의 종속 커널들을 가지는 경우; 국부적인 영역에서 읽고, 해당 영역을 위해서 변형된 이미지를 생성하는 경우; 및 한번에 각 출력 픽셀을 기록하는 경우;에 이미지 처리의 특정 카테고리의 일반화된 조작를 위해서 생성될 수 있다.
16개의 프로세서들이 있는 예를 가정해보자. 이미지는 1280 픽셀 x 720 픽셀이며, 픽셀당 16 byte를 가진다. 2 처리 요소의 각 세트는 32KB의 공유 메모리 및 32KB의 L1 캐시를 가진다. 하나의 경우는, 720 픽셀의 높이 및 80 픽셀의 폭을 가지는 16개의 칼럼으로 세분하는 것이다. 작업 그룹은 256개의 요소를 가지고, 각 요소는 1800 픽셀들로 구성되어 있다(80 x 720 / 32). 수평적으로 이미지의 16 x 2 영역 상에서, 그리고 수직적으로 2 x 16 에서, 8개의 워프는 16 x 16 블록을 처리하는 경우에, 워프는 동작한다.
일 실시예에서 80 픽셀의 칼럼의 처리는 16개의 픽셀을 왼쪽으로, 80 픽셀(6 * 16 픽셀)을 칼럼의 왼쪽 가장자리로 이동시킨다. 필터는 행당 5 블록씩, 16 높이를 가지는 행에서 수행된다. 일 실시예에서 수평 필터링은 필터링을 수행하는 행 내의 왼쪽 대부분 블록을 이용하고, 그리고 제외시킨다(즉, 16 x 16 블록이 행 내의 왼쪽 대부분을 수평적으로 필터링하는데 이용된다).
도 7 및 도 8은 본 발명의 일 실시예에 따른 필터링 처리에서 데이터 블록들을 조작하는 예를 도시한다.
도 7은 블록들 1 내지 21에 해당되는 데이터의 16 x 16 블록들을 도시한다. 굵은 검은색 외곽을 가지는 블록들(블록번호 1, 7, 8, 14, 15 및 21)은 입력 데이터의 16 x 16 블록들이다. 중간 부분은 수평적으로 필터링된 데이터의 16 x 16 블록들이다(블록번호 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20). 필터는 왼쪽부터 수직적으로 수행되고, 5개의 16 x 16 데이터 블록을 생성하고, L2 캐시 메모리에 블록들을 기록한다. 필터링된 픽셀들의 각 16 x 16 블록과 함께 아래 줄에서 새로운 16 x 16 입력 블록 내에서 이동(load)이 수행될 수 있다.
도 8은 본 발명의 일 실시예에 따른 블록들의 처리의 변화를 도시한다. 블록들 1, 2, 3, 4, 5, 6, 8 및 15에 대한 이중선은 데이터가 더 이상 16 x 16 블록일 필요가 없다는 것을 의미한다. 블록들 2, 3, 4, 5, 6, 9, 10, 11, 12 및 13은 수직적으로 필터링되고, 수평적으로 필터링된다. 칼럼 내에서 7 개의 16 x 16 블록들의 2 줄에 대하여 저장부를 가질 필요가 있다. 한 타임에 필요한 최대 저장부는 15개의 16 x 16 블록들이다. 입력 16 x 16 블록들의 새로운 행은 입력되고, 수평 필터링은 가운데 5 블록들에서 수행되고, 상기의 행에서의 블록들에 대한 수직적인 필터링이 수반되고, 이로 인해, 상기의 행이 밀려난다. 전체 칼럼이 처리되기까지 반복된다. 칼럼의 경계에서 16 x 16 블록들이 재-패치되는 것을 피하기 위해서, 작업 그룹들은 전역 차단을 통해 정확히 같은 방식으로 유지되어야 한다.
도 9는 본 발명의 일 실시예에 따른 퓨징 및 인터리빙을 수반하는 전형적인 가우시안 필터링을 비교한다.
도 9는 가우시안 블러 기법의 비교를 도시한다. 도시된 바와 같이, 처리(905)에서 전형적으로 가우시안 블러 처리는 이미지의 모든 쓰레드 또는 1280 x 720 쓰레드에서 동작되고, 외부 메모리(DRAM)에 중간 데이터를 기록(907)할 것을 요구한다. 대조적으로, 적은 수의 쓰레드는 작업 그룹들의 인터리빙된 처리에서, 16 x 16 쓰레드 같이, 프로세서 로컬 메모리(예, 공유 메모리)에 중간 데이터를 기록하기 위해서(912) 인터리빙된다. 유사하게 일 실시예에서 퓨징된 커널 처리(915)는 프로세서 로컬 메모리에 중간 데이터를 기록하고(914), 외부 메모리에 중간 데이터를 기록할 필요를 제거한다.
본 발명의 일 어플리케이션은 전력 소모가 고려되는 모바일 기기 내에 있다. 관련 커널들의 세트에 대한 데이터 트래픽을 줄임으로써 요구되는 에너지를 줄인다. 더구나, 일부 어플리케이션에서 커널들의 조합이 데이터 연동되고, 특정 커널이 데이터 연동되는 경우 성능 향상이 이루어진다. 세립 방법의 데이터 연동 커널들에서 연산을 혼합하기 위해 작업을 재-스케쥴링함으로써 데이터 트래픽을 줄이고, 전체 작업 로드에 대한 로드 균형이 잡힘으로써, 성능이 향상된다.
본 발명이 특정 실시예들과 연계되어 설명되지만, 설명된 실시예로 본 발명을 제한하려는 의도가 아님을 주의할 필요가 있다. 반대로, 첨부되는 청구항에 따라서 정의되는 발명의 범위를, 본 발명을 대체되거나, 수정되거나 균등 범위까지 포괄하는 것으로 이해함이 바람직하다. 본 발명은 구체적인 상세의 일부 또는 전체를 제외하고 실행될 수 있다. 추가적으로 본 발명에 대해서 불필요하게 애매모호해지는 것을 피하기 위해서 잘 알려진 기술에 대해서는 설명하지 않을 수 있다. 본 발명에 따르면, 요소, 처리 단계 및/또는 데이터 구조는 시스템, 프로그래밍 언어, 연산 플랫폼, 컴퓨터 프로그램 및/또는 일반적인 기계에서 다양한 타입을 이용하여 실행될 수 있다. 추가적으로 해당 기술 분야에 널리 쓰이는 기술로 하드웨어 기기, 필드 프로그래머블 게이트 어래이(FPGAs), 어플리케이션 특정 내장 회로(ASICs) 등은 상기 기재된 발명의 개념의 범위를 벗어나지 않는 범위에서 이용될 수 있다. 본 발명은 또한 메모리 기기와 같은 컴퓨터 기록 매체에 저장된 컴퓨터 명령의 세트로서 명백하게 포함될 수 있다.
100: 칩
150: 오프-칩 외장 메모리

Claims (18)

  1. 연산 커널을 이용하는 파이프라인 처리를 수행하는 방법에 있어서,
    커맨드 큐(command queue)에서 생산자 커널 및 소비자 커널 간의 종속성을 식별하는 단계; 및
    상기 커맨드 큐 내의 상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하는 단계로서, 중간 데이터 결과는 온-칩 메모리 상에 유지되는 단계;
    를 포함하고, 상기 단계들을 처리하는 처리부는 복수의 프로세서, 온-칩 메모리 및 외부 메모리로의 접속을 포함하는, 방법.
  2. 제1항에 있어서,
    상기 종속성을 식별하는 단계는,
    커널 세트가 생산자-소비자 관계에 있는지 여부를 결정하는 단계를 포함하는, 방법.
  3. 제1항에 있어서,
    상기 종속성을 식별하는 단계는,
    후보 커널들의 입력 및 출력 주소의 종속성을 분석하는 단계를 포함하는, 방법.
  4. 제3항에 있어서,
    상기 종속성을 식별하는 단계는,
    생산자 커널들 및 소비자 커널들 간의 관계를 정의하는 커널 종속성 그래프를 생성하는 단계를 포함하는, 방법.
  5. 제1항에 있어서,
    종속적 커널들의 입력들 및 출력들을 매칭시키기 위해서, 적어도 2 이상의 커널들과 연관된 작업 그룹들을 재정의하는 단계를 더 포함하는, 방법.
  6. 제1항에 있어서,
    이미지는 인접한 스트립들로 구분되고, 각각의 스트립은 서로 다른 프로세서에 할당되며,
    상기 방법은,
    인접한 작업 그룹에 대한 데이터 재사용을 동기화하는 단계를 더 포함하는, 방법.
  7. 제1항에 있어서,
    퓨징될 수 있는 커널들을 식별하는 단계; 및
    퓨징된 커널들에 대한 디스패치 콜을 생성하는 단계를 더 포함하는, 방법.
  8. 제1항에 있어서,
    코드 명령을 스캐닝하는 단계;
    접속 패턴 및 범위 정보를 분석하는 단계; 및
    인터리빙 또는 퓨징의 후보인 커널들을 태깅하는 단계를 더 포함하는, 방법.
  9. 연산 커널을 이용하는 파이프라인 처리를 수행하는 방법에 있어서,
    커맨드 큐(command queue)에서 생산자 커널 및 소비자 커널 간의 종속성을 식별하는 단계;
    커널 쌍이 인터리빙(interleaving) 또는 퓨징(fusing)될 수 있는지를 결정하는 단계;
    적어도 2 이상의 커널들을 퓨징된 커널로 대체하고, 퓨징된 커널을 디스패치(dispatch)하는 단계; 및
    상기 커맨드 큐 내의 상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하는 단계로서, 중간 데이터 결과는 온-칩 메모리 상에 유지되는 단계;
    를 포함하고, 상기 단계들을 처리하는 처리부는 복수의 프로세서, 온-칩 메모리 및 외부 메모리로의 접속을 포함하는, 방법.
  10. 복수의 프로세서 및 온-칩 메모리를 포함하는 그래픽 처리부; 및
    드라이버 및 컴파일러를 포함하고,
    상기 드라이버 및 상기 컴파일러는,
    그래픽 어플리케이션과 연관되는 생산자 커널 및 소비자 커널 간의 종속성을 식별하고,
    커널 쌍들이 인터리빙(interleaving) 또는 퓨징(fusing)될 수 있는지 결정하고,
    적어도 2 이상의 커널을 퓨징된 커널로 대체하고, 퓨징된 커널을 디스패치(dispatch)하고,
    상호 종속적인 커널들의 적어도 한 세트 이상을 위한 디스패치 콜의 인터리빙 세트를 생성하고 중간 데이터 결과는 온-칩 메모리 상에 유지되는, 시스템.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
KR1020150084344A 2015-03-12 2015-06-15 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법 KR102356705B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/656,074 US9652817B2 (en) 2015-03-12 2015-03-12 Automated compute kernel fusion, resizing, and interleave
US14/656,074 2015-03-12

Publications (2)

Publication Number Publication Date
KR20160109992A KR20160109992A (ko) 2016-09-21
KR102356705B1 true KR102356705B1 (ko) 2022-01-27

Family

ID=56888114

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150084344A KR102356705B1 (ko) 2015-03-12 2015-06-15 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법

Country Status (2)

Country Link
US (1) US9652817B2 (ko)
KR (1) KR102356705B1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9891955B2 (en) * 2015-12-22 2018-02-13 Nxp Usa, Inc. Heterogenous multicore processor configuration framework
JP6632709B2 (ja) * 2016-03-24 2020-01-22 富士ゼロックス株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
WO2017163591A1 (ja) * 2016-03-24 2017-09-28 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
US10795725B2 (en) * 2016-03-24 2020-10-06 Fuji Xerox Co., Ltd. Image processing device, image processing method, and non-transitory computer readable medium for image processing
CN108780565B (zh) * 2016-03-24 2022-08-02 富士胶片株式会社 图像处理装置、图像处理方法及存储介质
US10235735B2 (en) * 2017-04-10 2019-03-19 Intel Corporation Graphics processor with tiled compute kernels
US11163546B2 (en) * 2017-11-07 2021-11-02 Intel Corporation Method and apparatus for supporting programmatic control of a compiler for generating high-performance spatial hardware
US10740659B2 (en) 2017-12-14 2020-08-11 International Business Machines Corporation Fusing sparse kernels to approximate a full kernel of a convolutional neural network
US11636327B2 (en) * 2017-12-29 2023-04-25 Intel Corporation Machine learning sparse computation mechanism for arbitrary neural networks, arithmetic compute microarchitecture, and sparsity for training mechanism
US10475152B1 (en) * 2018-02-14 2019-11-12 Apple Inc. Dependency handling for set-aside of compute control stream commands
US11144368B2 (en) * 2019-06-18 2021-10-12 Qualcomm Incorproated Providing self-resetting multi-producer multi-consumer semaphores in distributed processor-based systems
CN114125299B (zh) * 2021-11-26 2023-10-10 凌云光技术股份有限公司 一种工业相机及其控制方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2398412B (en) 2001-10-12 2005-02-09 Pts Corp Processors and Compiling methods for Processors
US6950210B2 (en) * 2001-11-21 2005-09-27 Matsushita Electric Industrial Co., Ltd. Method and apparatus for adaptively binarizing color document images
US7721069B2 (en) 2004-07-13 2010-05-18 3Plus1 Technology, Inc Low power, high performance, heterogeneous, scalable processor architecture
US7624257B2 (en) * 2005-11-30 2009-11-24 International Business Machines Corporation Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads
US7949186B2 (en) * 2006-03-15 2011-05-24 Massachusetts Institute Of Technology Pyramid match kernel and related techniques
GB2443277B (en) 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US7876957B2 (en) * 2007-05-31 2011-01-25 Aptina Imaging Corporation Methods and apparatuses that reduce noise in image signals
US8572595B1 (en) 2008-02-08 2013-10-29 Reservoir Labs, Inc. Methods and apparatus for aggressive scheduling in source code compilation
US9032377B2 (en) 2008-07-10 2015-05-12 Rocketick Technologies Ltd. Efficient parallel computation of dependency problems
WO2010033622A2 (en) 2008-09-17 2010-03-25 Reservoir Labs, Inc. Methods and apparatus for joint parallelism and locality optimization in source code compilation
US8271996B1 (en) 2008-09-29 2012-09-18 Emc Corporation Event queues
US8758271B2 (en) * 2009-09-01 2014-06-24 Massachusetts Institute Of Technology Nonlinear system identification techniques and devices for discovering dynamic and static tissue properties
WO2011028716A1 (en) * 2009-09-01 2011-03-10 Massachusetts Institute Of Technology Nonlinear system identification technique for testing the efficacy of skin care products
US8782645B2 (en) 2011-05-11 2014-07-15 Advanced Micro Devices, Inc. Automatic load balancing for heterogeneous cores
US8990827B2 (en) 2011-10-11 2015-03-24 Nec Laboratories America, Inc. Optimizing data warehousing applications for GPUs using dynamic stream scheduling and dispatch of fused and split kernels
US8752036B2 (en) 2011-10-31 2014-06-10 Oracle International Corporation Throughput-aware software pipelining for highly multi-threaded systems
US20130155077A1 (en) * 2011-12-14 2013-06-20 Advanced Micro Devices, Inc. Policies for Shader Resource Allocation in a Shader Core
US10235220B2 (en) * 2012-01-23 2019-03-19 Advanced Micro Devices, Inc. Multithreaded computing
US9256915B2 (en) 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US9430807B2 (en) 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US9830163B2 (en) 2012-06-08 2017-11-28 Advanced Micro Devices, Inc. Control flow in a heterogeneous computer system
US9892707B2 (en) 2013-03-14 2018-02-13 Displaylink (Uk) Limited Decompressing stored display data every frame refresh

Also Published As

Publication number Publication date
KR20160109992A (ko) 2016-09-21
US9652817B2 (en) 2017-05-16
US20160267622A1 (en) 2016-09-15

Similar Documents

Publication Publication Date Title
KR102356705B1 (ko) 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법
US11442795B2 (en) Convergence among concurrently executing threads
US10089775B2 (en) Automated graphics and compute tile interleave
JP5752853B2 (ja) グラフィックス処理ユニットにおけるメモリの共有
Das et al. Compiling for stream processing
US8434074B2 (en) Register allocation with SIMD architecture using write masks
US8607246B2 (en) Multiprocessor circuit using run-time task scheduling
Ramirez et al. The SARC architecture
US20130091507A1 (en) Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels
US20140165049A1 (en) Compiler-controlled region scheduling for simd execution of threads
US20110099550A1 (en) Analysis and visualization of concurrent thread execution on processor cores.
KR20120054027A (ko) 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법
KR20150067722A (ko) 멀티 스레드 데이터 처리장치에서의 스레드 스케줄링 구성
US10268519B2 (en) Scheduling method and processing device for thread groups execution in a computing system
US10403025B2 (en) Automated graphics and compute tile interleave
US11934867B2 (en) Techniques for divergent thread group execution scheduling
JP6820428B2 (ja) マルチコア画像プロセッサ上のアプリケーションソフトウェアの構成
KR20160001662A (ko) 그래픽 시스템에서 포워드 레이트 프리딕티브 렌더링
KR20150101870A (ko) 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
Goossens Dataflow management, dynamic load balancing, and concurrent processing for real‐time embedded vision applications using Quasar
Amert et al. CUPiD RT: Detecting improper GPU usage in real-time applications
Maghazeh et al. Cache-aware kernel tiling: An approach for system-level performance optimization of GPU-based applications
Bharmal Real-time gpu scheduling with preemption support for autonomous mobile robots
US7523264B1 (en) Apparatus, system, and method for dependent computations of streaming multiprocessors
CN111381887B (zh) 在mvp处理器中进行图像运动补偿的方法、装置及处理器

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant