KR20240092523A - 병렬 처리 디바이스 및 그 동작 방법 - Google Patents

병렬 처리 디바이스 및 그 동작 방법 Download PDF

Info

Publication number
KR20240092523A
KR20240092523A KR1020230028398A KR20230028398A KR20240092523A KR 20240092523 A KR20240092523 A KR 20240092523A KR 1020230028398 A KR1020230028398 A KR 1020230028398A KR 20230028398 A KR20230028398 A KR 20230028398A KR 20240092523 A KR20240092523 A KR 20240092523A
Authority
KR
South Korea
Prior art keywords
instance
execution
processor
kernel
group
Prior art date
Application number
KR1020230028398A
Other languages
English (en)
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 US18/361,561 priority Critical patent/US20240202004A1/en
Publication of KR20240092523A publication Critical patent/KR20240092523A/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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

Abstract

본 발명의 일부 실시예에 따른 병렬 처리 디바이스는, 하나 이상의 그룹 프로세서를 포함하는 병렬 처리 디바이스로서, 상기 그룹 프로세서는, 미리 정의된 병렬 프로그램 모델 기반의 커널(Kernel)에 대한 커널 실행 인스턴스를 처리하는 복수의 인스턴스 프로세서를 포함하고, 상기 인스턴스 프로세서는, 상기 인스턴스 프로세서가 속한 그룹 프로세서의 식별자 및 상기 인스턴스 프로세서의 식별자를 포함하는 컨텍스트 참조 정보가 저장된 레지스터를 포함하며, 상기 인스턴스 프로세서는, 커널의 실행을 위해 메모리에 저장된 실행 컨텍스트 데이터를 상기 컨텍스트 참조 정보를 이용하여 리드(Read)하는 방식으로 커널을 실행하는 것을 특징으로 한다.

Description

병렬 처리 디바이스 및 그 동작 방법{PARALLEL PROCESSING DEVICE AND OPERATING METHOD THEREOF}
본 발명은 병렬 처리 디바이스 및 그 동작 방법에 관한 것으로서, 보다 상세하게는 OpenCL 기반으로 병렬 처리를 수행하는 병렬 처리 디바이스 및 그 동작 방법에 관한 것이다.
최근 인공지능 및 HPC(High Performance Computing) 분야 등에서 GPU 등과 같이 병렬 처리 컴퓨팅 유닛(병렬 처리 디바이스)을 이용하여 성능 향상을 도모하고 있다.
도 1은 상용 GPU 구조의 예시를 개괄적으로 도시하고 있다. 도 1에 예시된 상용 GPU는 SIMT Core로 명명되는 프로세서들이 병렬 프로세서 코어로서 사용되고 있으며, OpenCL 또는 CUDA 프로그래밍 모델 기반의 프로그램을 병렬로 실행하도록 구성되어 있다. 또한, 복수의 SIMT Core는 SIMT Core Cluster를 구성한다.
도 1에 예시된 GPU와 같이 널리 활용되는 상용 병렬 처리 디바이스는 OpenCL 모델과 같은 개방형 범용 병렬 프로그래밍 모델과 호환되도록 구성되어 있으며, OpenCL 모델은 표준과 API 등이 공개되어 있어 신규 기술을 개발할 때 활용이 가능하다. 그러나, 프로그램을 실행하기 위한 병렬 프로세서 코어 기술이 공개되어 있지 않으며, 이에 따라 신규 기술을 개발하는데 있어 걸림돌로 작용되고 있다.
본 발명의 배경기술은 대한민국 공개특허공보 제10-2017-0096103호(2017.08.23. 공개)에 개시되어 있다.
OpenCL 모델을 기반으로 하는 병렬 처리 디바이스를 개발하기 위해서는 종래의 SIMT Core에 해당하는 프로세서 코어 기술을 확보할 필요가 있다. 본 발명에서는 RISC-V 코어를 병렬 처리 디바이스를 구성하는 프로세서 코어로 활용하기 위해 필요한 실행 컨텍스트 데이터의 구조와 그 전달 방식, 그리고 실행 컨텍스트 데이터의 구조를 기반으로 하는 커널의 실행 방법을 제시한다.
본 발명의 일부 실시예에 따른 병렬 처리 디바이스는, 하나 이상의 그룹 프로세서를 포함하는 병렬 처리 디바이스로서, 상기 그룹 프로세서는, 미리 정의된 병렬 프로그램 모델 기반의 커널(Kernel)에 대한 커널 실행 인스턴스를 처리하는 복수의 인스턴스 프로세서를 포함하고, 상기 인스턴스 프로세서는, 상기 인스턴스 프로세서가 속한 그룹 프로세서의 식별자 및 상기 인스턴스 프로세서의 식별자를 포함하는 컨텍스트 참조 정보가 저장된 레지스터를 포함하며, 상기 인스턴스 프로세서는, 커널의 실행을 위해 메모리에 저장된 실행 컨텍스트 데이터를 상기 컨텍스트 참조 정보를 이용하여 리드(Read)하는 방식으로 커널을 실행하는 것을 특징으로 한다.
본 발명의 일부 실시예에서 상기 커널 실행 인스턴스의 복수의 집합은 커널 실행 그룹으로 정의되고, 상기 실행 컨텍스트 데이터는, 상기 인스턴스 프로세서와 상기 병렬 프로그램 모델 간의 호환을 위한 제1 데이터와, 커널의 실행에 요구되는 매개변수 전달을 위한 제2 데이터를 포함하는 것을 특징으로 한다.
본 발명의 일부 실시예에서 상기 실행 컨텍스트 데이터는, 상기 제1 및 제2 데이터가 상기 커널 실행 그룹 및 상기 커널 실행 인스턴스 별로 구조화된 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터로 구성되는 것을 특징으로 한다.
본 발명의 일부 실시예에서 특정 그룹 프로세서를 기준으로, 상기 그룹 컨텍스트 데이터는 상기 특정 그룹 프로세서에 대하여 하나 생성되고, 상기 인스턴스 컨텍스트 데이터는 상기 특정 그룹 프로세서에 포함되는 인스턴스 프로세서의 수만큼 복수 개 생성되되, 상기 하나의 그룹 컨텍스트 데이터와 상기 복수 개의 인스턴스 컨텍스트 데이터는 하나의 실행 컨텍스트 데이터 서브셋(subset)을 구성하는 것을 특징으로 한다.
본 발명의 일부 실시예에서 상기 실행 컨텍스트 데이터 서브셋은 상기 그룹 프로세서의 수만큼 생성되는 것을 특징으로 한다.
본 발명의 일부 실시예에서 특정 그룹 프로세서를 기준으로, 상기 그룹 컨텍스트 데이터는 상기 특정 그룹 프로세서에 포함된 모든 인스턴스 프로세서가 공유하는 데이터이고, 상기 인스턴스 컨텍스트 데이터는 각 인스턴스 프로세서가 독립적으로 사용하는 데이터인 것을 특징으로 한다.
본 발명의 일부 실시예에서 상기 레지스터에는, 상기 메모리의 주소값을 할당하기 위한 주소 영역이 정의되어 있으며, 상기 메모리에 상기 커널의 실행을 위한 명령어가 저장되는 제1 주소값과, 상기 메모리에 상기 실행 컨텍스트 데이터가 저장되는 제2 주소값이 상기 레지스터의 주소 영역에 저장되도록 구성되는 것을 특징으로 한다.
본 발명의 일부 실시예에서 특정 인스턴스 프로세서를 기준으로, 상기 특정 인스턴스 프로세서는, 상기 제1 주소값을 이용하여 상기 커널의 실행을 위한 명령어를 리드하여 상기 커널의 실행을 트리거하고, 상기 제2 주소값을 이용하여 상기 실행 컨텍스트 데이터가 상기 메모리에 저장된 위치를 파악하며, 상기 컨텍스트 참조 정보를 이용하여 상기 특정 인스턴스 프로세서에 대응되는 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터를 리드한 후 커널을 실행하는 것을 특징으로 한다.
본 발명의 일부 실시예에서 상기 병렬 프로그램 모델은 OpenCL(Open Computing Language) 프레임워크이고, 상기 인스턴스 프로세서는 RISC-V 코어(Reduced Instruction Set Computer-Five Core)인 것을 특징으로 한다.
본 발명의 일부 실시예에 따른 병렬 처리 디바이스의 동작 방법은 하나 이상의 그룹 프로세서를 포함하는 병렬 처리 디바이스의 동작 방법으로서, 상기 그룹 프로세서는 미리 정의된 병렬 프로그램 모델 기반의 커널에 대한 커널 실행 인스턴스를 처리하는 복수의 인스턴스 프로세서를 포함하고, 상기 인스턴스 프로세서는 상기 인스턴스 프로세서가 속한 그룹 프로세서의 식별자 및 상기 인스턴스 프로세서의 식별자를 포함하는 컨텍스트 참조 정보가 저장된 레지스터를 포함하며, 상기 동작 방법은, 상기 인스턴스 프로세서가, 메모리에 저장된 커널 실행 명령어를 리드하여 상기 커널의 실행을 트리거하는 단계; 상기 인스턴스 프로세서가, 커널의 실행을 위해 상기 메모리에 저장된 실행 컨텍스트 데이터를 상기 컨텍스트 참조 정보를 이용하여 리드하는 단계; 및 상기 인스턴스 프로세서가, 상기 리드한 실행 컨텍스트 데이터를 이용하여 상기 커널을 실행하는 단계;를 포함하는 것을 특징으로 한다.
본 발명에 따를 때, OpenCL 모델을 기반으로 하는 병렬 처리 디바이스에 있어서 RISC-V 코어를 병렬 처리 디바이스를 구성하는 프로세서 코어로 활용하는 방안이 제시될 수 있다.
도 1은 종래의 상용 GPU 구조의 예시를 보인 예시도이다.
도 2는 본 발명의 실시 예에 따른 병렬 처리 디바이스를 설명하기 위한 블록구성도이다.
도 3은 본 발명의 실시 예에 따른 병렬 처리 디바이스에서 실행 컨텍스트 데이터의 구조를 보인 예시도이다.
도 4는 본 발명의 실시 예에 따른 병렬 처리 디바이스에서 커널 실행 과정을 보인 예시도이다.
도 5는 본 발명의 실시 예에 따른 병렬 처리 디바이스의 동작 방법을 보인 흐름도이다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 병렬 처리 디바이스 및 그 동작 방법의 실시예를 설명한다. 이 과정에서 도면에 도시된 선들의 두께나 구성요소의 크기 등은 설명의 명료성과 편의상 과장되게 도시되어 있을 수 있다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례에 따라 달라질 수 있다. 그러므로, 이러한 용어들에 대한 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 2는 본 발명의 실시 예에 따른 병렬 처리 디바이스를 설명하기 위한 블록구성도이고, 도 3은 본 발명의 실시 예에 따른 병렬 처리 디바이스에서 실행 컨텍스트 데이터의 구조를 보인 예시도이며, 도 4는 본 발명의 실시 예에 따른 병렬 처리 디바이스에서 커널 실행 과정을 보인 예시도이다.
도 2를 참조하면, 본 실시예의 병렬 처리 디바이스(3000)는 하나 이상의 그룹 프로세서(3100)를 포함하고, 각 그룹 프로세서(3100)는 복수의 인스턴스 프로세서(3110)를 포함하며, 각 인스턴스 프로세서(3110)는 레지스터(3111)를 포함한다. 병렬 처리 디바이스(3000)는 CPU, GPU, 코프로세서 또는 FPGA 등의 컴퓨팅 디바이스로 구현될 수 있다. 병렬 처리 디바이스(3000)는 연결 네트워크(IN, Interconnection Network)를 통해 호스트 프로세서(Host CPU)(1000) 및 메모리(2000)에 연결되며, 메모리는 판독 전용 메모리(ROM: Read-Only Memories), 랜덤 액세스 메모리(RAM: Random Access Memories), 소거 가능 프로그래밍 가능 판독-전용 메모리(EPROM: Erasable Programmable Read-Only Memory), 전기적 소거가능 프로그래밍 가능 판독-전용 메모리(EEPROM: Electrically Erasable Programmable Read-Only Memory), 플래시 메모리 등으로 구현될 수 있다.
호스트 프로세서(1000), 메모리(2000) 및 병렬 처리 디바이스(3000)는 병렬 처리 플랫폼을 구성한다. 후술하는 것과 같이 호스트 프로세서(1000)는 인스턴스 프로세서(3110)가 실행하게 되는 커널(Kernel 또는 Program)을 컴파일하여 메모리(2000)에 저장하고, 커널의 실행을 위한 실행 컨텍스트 데이터(ECD: Execution Context Data)를 생성하여 메모리(2000)에 저장하도록 동작한다. 이후, 그룹 프로세서(3100)를 구성하는 각 인스턴스 프로세서(3110)는 레지스터(3111)에 저장된 컨텍스트 참조 정보를 토대로 메모리(2000)에 저장된 실행 컨텍스트 데이터를 리드하여 커널을 실행하도록 동작한다.
한편, 앞서 언급한 것과 같이 본 실시예는 OpenCL 모델을 기반으로 하는 병렬 처리 디바이스(3000), 그리고 병렬 처리 디바이스(3000)를 구성하는 프로세서 코어로서 RISC-V 코어를 채용하는 구성에 포커싱하며, 이때 필요한 실행 컨텍스트 데이터의 구조와 그 전달 방식, 그리고 실행 컨텍스트 데이터의 구조를 기반으로 하는 커널의 실행 방법을 제시한다. 이에, 본원 청구범위에서 채용된 용어를 OpenCL 모델과 RISC-V 코어의 관점에서 우선적으로 정의한다.
커널 실행 인스턴스는 OpenCL의 워크 아이템(Work-Item)을 의미하며, 인스턴스 프로세서(3110)는 워크 아이템을 처리하는 WIP(Work Item Processor)를 의미한다. 호스트 프로세서(1000)로부터 커널 실행 커맨드를 수신한 경우, WIP는 커널의 실행을 트리거하며, 이 과정에서 NDRange(N-Dimension Range)로 명명되는 N-차원 공간의 인덱스 스페이스가 결정된다(본 실시예에서 N = 3). 이에 따라, NDRange 내의 각 점은 워크 아이템에 대응되며, 하나의 워크 아이템은 하나의 WIP에 할당되어 실행되게 된다.
커널 실행 그룹은 커널 실행 인스턴스의 복수의 집합이며, OpenCL의 관점에서 워크 아이템의 복수의 집합인 워크 그룹(Work-Group)을 의미한다. 이에 따라, 그룹 프로세서(3100)는 복수의 WIP를 포함하는 WGP(Work Group Processor)를 의미한다.
본 실시예에서 상기의 WIP는 RISC-V 코어로 구현된다. RISC-V 코어로 구현되는 WIP는 그 내부에 4096개의 register를 연결할 수 있는 12bit의 CSR(Control Status Register) address space 영역을 지원한다. 본원 청구범위에 기재된 레지스터(3111)는 RISC-V 코어 관점에서 CSR에 해당한다. CSR에는 일부 reserved 되어 있는 영역이 존재하며, 본 실시예에서는 사용되지 않고 남아 있는 reserved 영역에 후술하는 컨텍스트 참조 정보와 제1 및 제2 주소값이 할당되어 저장된다.
상술한 설명을 바탕으로, 이하에서는 본 실시예의 병렬 처리 디바이스(3000)를 구체적으로 설명하며, 실시예의 이해를 돕기 위해 그 용어를 OpenCL 및 RISC-V 코어의 관점에서 커널 실행 인스턴스를 워크 아이템으로, 커널 실행 그룹을 워크 그룹으로, 인스턴스 프로세서를 WIP로, 그룹 프로세서를 WGP로, 레지스터를 CSR로 표기하여 설명하기로 한다.
1. WIP 및 CSR
WIP는 OpenCL 모델 기반의 커널에 대한 워크 아이템을 처리한다. 전술한 것과 같이 WIP 내부의 CSR에는 일부 reserved 되어 있는 영역이 존재하며, 이러한 reserved 영역에는 해당 WIP가 속한 WGP의 식별자(workgroup_id)와 해당 WIP의 식별자(workitem_id)(workgroup_id 및 workitem_id를 컨텍스트 참조 정보로 정의한다), 메모리(2000)에 커널의 실행을 위한 명령어가 저장되는 주소값(entrypoint), 및 메모리(2000)에 실행 컨텍스트 데이터가 저장되는 주소값(context_pointer)이 저장된다. 하기 표 1은 CSR의 reserved 영역에 저장되는 정보를 나타낸다.
이름 내용
workgroup_id - WIP가 소속된 WGP의 id (전체 WGP의 개수가 G라고 할 때, workgroup_id는 0,1,2,...,G-1의 값 중에서 하나를 가짐)
- 하드웨어 설계시에 결정되어 고정되는 read-only 값
workitem_id - 하나의 WGP 내에서 각각의 WIP의 id 값 (WGP 내의 WIP의 개수를 I개라고 할 때 workitem_id는 0,1,2,...,I-1의 값 중에서 하나를 가짐)
- 하드웨어 설계시에 결정되어 고정되는 read-only 값
entrypoint - 각 WIP가 실행하게 되는 프로그램(커널)의 최초의 명령어가 저장된 주소값
context_pointer - 커널 실행을 위한 매개변수, 스택 구성, OpenCL 파라미터 등의 값들이 포함된 실행 컨텍스트 데이터의 위치를 나타내는 주소값
WIP는 RISC-V 명령어인 CSRW 및 CSRR 명령어를 통해 CSR에 대한 리드(Read) 및 라이트(Write) 동작을 수행할 수 있으며, 이를 기반으로 메모리(2000)에 저장된 실행 컨텍스트 데이터를 컨텍스트 참조 정보(workgroup_id, workitem_id)를 토대로 리드하여 커널을 실행한다.
2. 실행 컨텍스트 데이터
OpenCL 모델 기반의 커널을 실행하기 위해서는 커널 실행에 필요한 실행 컨텍스트 데이터의 구조 정의가 필요하다. 이를 위해, 본 실시예에서 실행 컨텍스트 데이터는, WIP 및 OpenCL 모델 간의 호환을 위한 제1 데이터와, 커널의 실행에 요구되는 매개변수 전달을 위한 제2 데이터와, WIP의 커널 실행을 위한 private memory 구성을 위한 제3 데이터를 포함하도록 구성된다. 또한, 실행 컨텍스트 데이터는 제1 및 제2 데이터가 워크 그룹 및 워크 아이템 별로 구조화된 아키텍처를 갖는다. 제1 및 제2 데이터가 워크 그룹으로 구조화된 데이터를 그룹 컨텍스트 데이터로 정의하고, 제1 내지 제3 데이터가 워크 아이템으로 구조화된 데이터를 인스턴스 컨텍스트 데이터로 정의한다. 하기 표 2는 제1 내지 제3 데이터의 구체적인 내용과 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터로 구조화된 아키텍처를 보이고 있으며, 도 3은 실행 컨텍스트 데이터의 구조를 보이고 있다.
구조화 데이터 데이터 타입 이름 내용












그룹 컨텍스트 데이터(context_workgroup_t)
제1 데이터 uint64_t local_work_id[3] NDRange 전체에서 현재 WGP가 처리하는 workgroup의 id (3-dimension 이며 각각 x,y,z 로 표시)
제1 데이터 uint64_t local_work_size[3] NDRange 전체에서 현재 WGP가 처리하는 workgroup의 size (workitem 개수)
제1 데이터 uint64_t local_base_ptr WGP 내의 모든 WIP들이 공통으로 사용하는 local 메모리의 base pointer (주소값)
제1 데이터 uint64_t global_work_offset[3] WGP 내에서 현재 처리하는 데이터들의 NDRange 전체 데이터에서의 offset 위치
제1 데이터 uint64_t global_work_size[3] WGP 내에서 현재 처리하는 데이터들의 NDRagne 전체 데이터 size
제1 데이터 uint64_t num_work_groups[3] NDRange 에 포함된 workgroup 개수
제1 데이터 uint64_t global_work_dim NDRange 의 dimension 이며 {1,2,3} 의 값을 갖음
제2 데이터 uint64_t kernel_arg_base_ptr WIP 의 첫 실행 함수인 main kernel 함수의 argument 들을 담고 있는 메모리의 base address
제2 데이터 uint64_t kernel_arg_byte_size WIP 의 첫 실행 함수인 main kernel 함수의 argument 들을 담고 있는 메모리의 byte size


인스턴스 컨텍스트 데이터(context_workitem_t)
제1 데이터 uint64_t local_id[3] WIP 에서 처리하는 workitem 의 workgroup 내의 id 값
제1 데이터 uint64_t global_id[3] WIP 에서 처리하는 workitem 의 NDRange 내의 id 값
제3 데이터 uint64_t private_base_ptr WIP 에서 사용하는 private memory 의 base pointer
제2 데이터 uint64_t private_stack_ptr WIP 에서 사용하는 스택 메모리에 대한 stack pointer
표 2 및 도 3의 실행 컨텍스트 데이터에서, 그룹 컨텍스트 데이터(context_workgroup_t)에 속하는 데이터는 해당 WGP에 포함된 모든 WIP가 공유하는 데이터이고, 인스턴스 컨텍스트 데이터(context_workitem_t)에 속하는 데이터는 각 WIP가 독립적으로 사용하는 데이터이다.
3. 실행 컨텍스트 데이터의 전달 및 커널의 실행
도 4는 병렬 처리 디바이스(3000)의 커널 실행 과정을 보이고 있다.
먼저, 호스트 프로세서(1000)는 각 WIP에서 실행하게 되는 커널을 컴파일하여 메모리(2000)에 저장하고, 저장한 커널의 실행을 위한 최초의 명령어의 주소값(entrypoint, 제1 주소값으로 정의한다)을 메모리(2000)에 저장한다.
다음으로, 호스트 프로세서(1000)는 WIP가 커널을 실행하기 위해 필요한 실행 컨텍스트 데이터를 생성하여 메모리(2000)에 저장한다. 이때, 특정 WGP를 기준으로, 그룹 컨텍스트 데이터(context_workgroup_t)는 특정 WGP에 대하여 하나 생성되고, 인스턴스 컨텍스트 데이터(context_workitem_t)는 상기 특정 WGP에 포함되는 WIP의 수만큼 복수 개 생성된다. 상기와 같이 생성되는 하나의 그룹 컨텍스트 데이터와 복수 개의 인스턴스 컨텍스트 데이터는 하나의 실행 컨텍스트 데이터 서브셋(subset)을 구성하고, 실행 컨텍스트 데이터 서브셋은 병렬 처리 디바이스(3000)에 포함되는 WGP의 수만큼 생성된다. 이에 따라, 도 4에 도시된 것과 같이 전체 실행 컨텍스트 데이터는 WGP의 수만큼 생성된 복수의 실행 컨텍스트 데이터 서브셋으로 구성되며, 각 실행 컨텍스트 데이터 서브셋은 메모리(2000)에 연속적으로 할당되어 저장된다. 호스트 프로세서(1000)는 메모리(2000)에 저장된 실행 컨텍스트 데이터의 첫 시작 주소값(context_pointer, 제2 주소값으로 정의한다)을 메모리(2000)에 저장한다. 메모리(2000)에 저장된 제1 주소값(entrypoint) 및 제2 주소값(context_pointer)은 Memory Mapped Register interface를 통해 WIP 내부의 CSR의 주소 영역, 즉 표 1의 entrypoint 및 context_pointer로 전달되어 저장된다.
이후, WIP는 CSR의 entrypoint, 즉 제1 주소값을 이용하여 커널의 실행을 위한 명령어를 리드하여 커널의 실행을 트리거한다. 커널의 실행을 위해서는 커널의 매개변수 및 Open CL 파라미터가 필요하며, WIP는 CSR의 context_pointer, 즉 제2 주소값을 이용하여 실행 컨텍스트 데이터가 메모리(2000)에 저장된 위치를 파악한다. 이후, WIP는 CSR의 컨텍스트 참조 정보(즉, 표 1의 workgroup_id 및 workitem_id), 그룹 컨텍스트 데이터(context_workgroup_t)의 byte_size 데이터 등을 이용하여 자신에게 대응되는 그룹 컨텍스트 데이터(context_workgroup_t) 및 인스턴스 컨텍스트 데이터(context_workitem_t)를 리드한다. 그룹 컨텍스트 데이터(context_workgroup_t) 및 인스턴스 컨텍스트 데이터(context_workitem_t)의 리드를 통해 커널의 매개변수 및 Open CL 파라미터가 확보되며, WIP는 확보된 커널의 매개변수 및 Open CL 파라미터를 이용하여 커널을 실행한다. 위 과정은 각 WIP에 의해 병렬적으로 이루어진다.
도 5는 본 발명의 실시 예에 따른 병렬 처리 디바이스의 동작 방법을 보인 흐름도이다. 도 5를 참조하여 본 실시예의 병렬 처리 디바이스의 동작 방법을 설명하며, 전술한 내용과 중복되는 부분에 대한 구체적인 설명을 생략하고 시계열적인 구성을 중심으로 설명한다.
먼저, 호스트 프로세서(1000)는 각 WIP에서 실행하게 되는 커널을 컴파일하여 메모리(2000)에 저장하고, 저장한 커널의 실행을 위한 최초의 명령어의 제1 주소값을 메모리(2000)에 저장한다(S100).
이어서, 호스트 프로세서(1000)는 커널 실행에 필요한 실행 컨텍스트 데이터를 생성하여 메모리(2000)에 저장한다(S200). 실행 컨텍스트 데이터는 WIP 및 OpenCL 모델 간의 호환을 위한 제1 데이터와, 커널의 실행에 요구되는 매개변수 전달을 위한 제2 데이터와, WIP의 커널 실행을 위한 private memory 구성을 위한 제3 데이터를 포함하도록 구성된다. 또한, 실행 컨텍스트 데이터는 제1 및 제2 데이터가 워크 그룹 및 워크 아이템 별로 구조화된 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터로 구성된다. S200 단계에서, 호스트 프로세서(1000)는 특정 WGP를 기준으로, 특정 WGP에 대하여 하나의 그룹 컨텍스트 데이터를 생성하고, 특정 WGP에 포함되는 WIP의 수만큼 인스턴스 컨텍스트 데이터를 복수 개 생성한다. 하나의 그룹 컨텍스트 데이터와 복수 개의 인스턴스 컨텍스트 데이터는 하나의 실행 컨텍스트 데이터 서브셋을 구성하며, 호스트 프로세서(1000)는 실행 컨텍스트 데이터 서브셋을 WGP의 수만큼 생성하여 전체 실행 컨텍스트 데이터를 생성한다.
이어서, 호스트 프로세서(1000)는 메모리(2000)에 저장된 실행 컨텍스트 데이터의 첫 시작 주소값, 즉 제2 주소값을 메모리(2000)에 저장한다(S300). 메모리(2000)에 저장된 제1 및 제2 주소값은 Memory Mapped Register interface를 통해 WIP 내부의 CSR의 주소 영역으로 전달되어 저장된다.
이어서, WIP는 CSR에 저장된 제1 주소값을 이용하여 커널 실행 명령어를 리드하여 커널의 실행을 트리거한다(S400).
이어서, WIP는 CSR에 저장된 제2 주소값을 이용하여 실행 컨텍스트 데이터가 메모리(2000)에 저장된 위치를 파악한다(S500).
이어서, WIP는 CSR에 저장된 컨텍스트 참조 정보, 즉 해당 WIP가 속한 WGP의 식별자와 해당 WIP의 식별자를 이용하여 자신에게 대응되는 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터를 리드한다(S600).
이어서, WIP는 S600 단계에서 실행 컨텍스트 데이터를 이용하여 커널을 실행한다(S700).
이와 같이 본 실시예에 따를 때, OpenCL 모델을 기반으로 하는 병렬 처리 디바이스에 있어서 RISC-V 코어를 병렬 처리 디바이스를 구성하는 프로세서 코어로 활용하는 방안이 제시될 수 있다.
본 명세서에서 설명된 구현은, 예컨대, 방법 또는 프로세스, 장치, 소프트웨어 프로그램, 데이터 스트림 또는 신호로 구현될 수 있다. 단일 형태의 구현의 맥락에서만 논의(예컨대, 방법으로서만 논의)되었더라도, 논의된 특징의 구현은 또한 다른 형태(예컨대, 장치 또는 프로그램)로도 구현될 수 있다. 장치는 적절한 하드웨어, 소프트웨어 및 펌웨어 등으로 구현될 수 있다. 방법은, 예컨대, 컴퓨터, 마이크로프로세서, 집적 회로 또는 프로그래밍가능한 로직 디바이스 등을 포함하는 프로세싱 디바이스를 일반적으로 지칭하는 프로세서 등과 같은 장치에서 구현될 수 있다. 프로세서는 또한 최종-사용자 사이에 정보의 통신을 용이하게 하는 컴퓨터, 셀 폰, 휴대용/개인용 정보 단말기(personal digital assistant: "PDA") 및 다른 디바이스 등과 같은 통신 디바이스를 포함한다.
본 발명은 도면에 도시된 실시예를 참고로 하여 설명되었으나, 이는 예시적인 것에 불과하며, 당해 기술이 속하는 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 기술적 보호범위는 아래의 특허청구범위에 의해서 정하여져야 할 것이다.
1000: 호스트 프로세서
2000: 메모리
3000: 병렬 처리 디바이스
3100: 그룹 프로세서, WGP
3110: 인스턴스 프로세서, WIP
3111: 레지스터, CSR

Claims (10)

  1. 하나 이상의 그룹 프로세서를 포함하는 병렬 처리 디바이스로서,
    상기 그룹 프로세서는, 미리 정의된 병렬 프로그램 모델 기반의 커널(Kernel)에 대한 커널 실행 인스턴스를 처리하는 복수의 인스턴스 프로세서를 포함하고,
    상기 인스턴스 프로세서는, 상기 인스턴스 프로세서가 속한 그룹 프로세서의 식별자 및 상기 인스턴스 프로세서의 식별자를 포함하는 컨텍스트 참조 정보가 저장된 레지스터를 포함하며,
    상기 인스턴스 프로세서는, 커널의 실행을 위해 메모리에 저장된 실행 컨텍스트 데이터를 상기 컨텍스트 참조 정보를 이용하여 리드(Read)하는 방식으로 커널을 실행하는 것을 특징으로 하는, 병렬 처리 디바이스.
  2. 제1항에 있어서,
    상기 커널 실행 인스턴스의 복수의 집합은 커널 실행 그룹으로 정의되고,
    상기 실행 컨텍스트 데이터는, 상기 인스턴스 프로세서와 상기 병렬 프로그램 모델 간의 호환을 위한 제1 데이터와, 커널의 실행에 요구되는 매개변수 전달을 위한 제2 데이터를 포함하는 것을 특징으로 하는 병렬 처리 디바이스.
  3. 제2항에 있어서,
    상기 실행 컨텍스트 데이터는, 상기 제1 및 제2 데이터가 상기 커널 실행 그룹 및 상기 커널 실행 인스턴스 별로 구조화된 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터로 구성되는 것을 특징으로 하는 병렬 처리 디바이스.
  4. 제3항에 있어서,
    특정 그룹 프로세서를 기준으로, 상기 그룹 컨텍스트 데이터는 상기 특정 그룹 프로세서에 대하여 하나 생성되고, 상기 인스턴스 컨텍스트 데이터는 상기 특정 그룹 프로세서에 포함되는 인스턴스 프로세서의 수만큼 복수 개 생성되되, 상기 하나의 그룹 컨텍스트 데이터와 상기 복수 개의 인스턴스 컨텍스트 데이터는 하나의 실행 컨텍스트 데이터 서브셋(subset)을 구성하는 것을 특징으로 하는 병렬 처리 디바이스.
  5. 제4항에 있어서,
    상기 실행 컨텍스트 데이터 서브셋은 상기 그룹 프로세서의 수만큼 생성되는 것을 특징으로 하는 병렬 처리 디바이스.
  6. 제4항에 있어서,
    특정 그룹 프로세서를 기준으로, 상기 그룹 컨텍스트 데이터는 상기 특정 그룹 프로세서에 포함된 모든 인스턴스 프로세서가 공유하는 데이터이고, 상기 인스턴스 컨텍스트 데이터는 각 인스턴스 프로세서가 독립적으로 사용하는 데이터인 것을 특징으로 하는 병렬 처리 디바이스.
  7. 제4항에 있어서,
    상기 레지스터에는, 상기 메모리의 주소값을 할당하기 위한 주소 영역이 정의되어 있으며,
    상기 메모리에 상기 커널의 실행을 위한 명령어가 저장되는 제1 주소값과, 상기 메모리에 상기 실행 컨텍스트 데이터가 저장되는 제2 주소값이 상기 레지스터의 주소 영역에 저장되도록 구성되는 것을 특징으로 하는 병렬 처리 디바이스.
  8. 제7항에 있어서,
    특정 인스턴스 프로세서를 기준으로, 상기 특정 인스턴스 프로세서는, 상기 제1 주소값을 이용하여 상기 커널의 실행을 위한 명령어를 리드하여 상기 커널의 실행을 트리거하고, 상기 제2 주소값을 이용하여 상기 실행 컨텍스트 데이터가 상기 메모리에 저장된 위치를 파악하며, 상기 컨텍스트 참조 정보를 이용하여 상기 특정 인스턴스 프로세서에 대응되는 그룹 컨텍스트 데이터 및 인스턴스 컨텍스트 데이터를 리드한 후 커널을 실행하는 것을 특징으로 하는 병렬 처리 디바이스.
  9. 제1항에 있어서,
    상기 병렬 프로그램 모델은 OpenCL(Open Computing Language) 프레임워크이고, 상기 인스턴스 프로세서는 RISC-V 코어(Reduced Instruction Set Computer-Five Core)인 것을 특징으로 하는 병렬 처리 디바이스.
  10. 하나 이상의 그룹 프로세서를 포함하는 병렬 처리 디바이스의 동작 방법으로서, 상기 그룹 프로세서는 미리 정의된 병렬 프로그램 모델 기반의 커널에 대한 커널 실행 인스턴스를 처리하는 복수의 인스턴스 프로세서를 포함하고, 상기 인스턴스 프로세서는 상기 인스턴스 프로세서가 속한 그룹 프로세서의 식별자 및 상기 인스턴스 프로세서의 식별자를 포함하는 컨텍스트 참조 정보가 저장된 레지스터를 포함하며,
    상기 동작 방법은,
    상기 인스턴스 프로세서가, 메모리에 저장된 커널 실행 명령어를 리드하여 상기 커널의 실행을 트리거하는 단계;
    상기 인스턴스 프로세서가, 커널의 실행을 위해 상기 메모리에 저장된 실행 컨텍스트 데이터를 상기 컨텍스트 참조 정보를 이용하여 리드하는 단계; 및
    상기 인스턴스 프로세서가, 상기 리드한 실행 컨텍스트 데이터를 이용하여 상기 커널을 실행하는 단계;
    를 포함하는 것을 특징으로 하는, 병렬 처리 디바이스의 동작 방법.
KR1020230028398A 2022-12-14 2023-03-03 병렬 처리 디바이스 및 그 동작 방법 KR20240092523A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US18/361,561 US20240202004A1 (en) 2022-12-14 2023-07-28 Parallel processing device and operating method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220175284 2022-12-14

Publications (1)

Publication Number Publication Date
KR20240092523A true KR20240092523A (ko) 2024-06-24

Family

ID=

Similar Documents

Publication Publication Date Title
CN107077337B (zh) 用于执行根据两个指令集架构编译的应用编码的系统和方法
CN104375972A (zh) 用于可配置数学硬件加速器的微处理器集成配置控制器
US11768757B2 (en) Kernel debugging system and method
CN111638873A (zh) 程序代码的生成方法、装置、计算机设备及存储介质
US20220237041A1 (en) Parallel processing system performing in-memory processing
US8752056B2 (en) Running native code across single or multi-core hybrid processor achitecture
EP3828698A1 (en) Data processing method and apparatus, and related product
EP2321734B1 (en) Type descriptor management for frozen objects
EP0947922A2 (en) Compiler
US10496433B2 (en) Modification of context saving functions
JP5936135B2 (ja) 情報処理装置、情報処理方法、及び、プログラム
KR20240092523A (ko) 병렬 처리 디바이스 및 그 동작 방법
US20240202004A1 (en) Parallel processing device and operating method thereof
CN109766081A (zh) 遍历容器的方法及装置
KR20100110710A (ko) 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품
CN113918290A (zh) 一种api调用方法以及装置
WO2024108907A1 (zh) 一种数据处理方法、装置、ai芯片、电子设备及存储介质
US20230126594A1 (en) Instruction generating method, arithmetic processing device, and instruction generating device
JPH11345127A (ja) コンパイラ
US11782835B2 (en) Host apparatus, heterogeneous system architecture device, and heterogeneous system based on unified virtual memory
CN107562463B (zh) 一种Ada编程语言的子程序规格化定义及调用方法
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
CN111522600B (zh) 一种在dsp上的异构计算框架构建方法及系统
WO2023208012A1 (zh) 程序处理、运行方法、装置、终端、智能卡及存储介质
US20220237258A1 (en) System and Method for Automatic Differentiation of Higher-Order Functions