KR101893796B1 - 동적 데이터 구성을 위한 방법 및 장치 - Google Patents

동적 데이터 구성을 위한 방법 및 장치 Download PDF

Info

Publication number
KR101893796B1
KR101893796B1 KR1020120089561A KR20120089561A KR101893796B1 KR 101893796 B1 KR101893796 B1 KR 101893796B1 KR 1020120089561 A KR1020120089561 A KR 1020120089561A KR 20120089561 A KR20120089561 A KR 20120089561A KR 101893796 B1 KR101893796 B1 KR 101893796B1
Authority
KR
South Korea
Prior art keywords
format
data
processor
binary code
data format
Prior art date
Application number
KR1020120089561A
Other languages
English (en)
Other versions
KR20140023561A (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 KR1020120089561A priority Critical patent/KR101893796B1/ko
Priority to US13/962,364 priority patent/US9342282B2/en
Priority to CN201310350624.1A priority patent/CN103593221B/zh
Priority to JP2013168838A priority patent/JP6375102B2/ja
Priority to EP13180661.4A priority patent/EP2698707B1/en
Publication of KR20140023561A publication Critical patent/KR20140023561A/ko
Application granted granted Critical
Publication of KR101893796B1 publication Critical patent/KR101893796B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Abstract

동적 데이터 구성을 위한 방법 및 장치가 제공된다. 컴파일 장치는 바이너리 코드를 실행하는 실행 장치가 지원하는 데이터 포멧들 중, 바이너리 코드가 실행될 때 최적의 성능을 발휘하는 데이터 포멧을 선택하고, 선택된 데이터 포멧을 사용하는 바이너리 코드를 생성한다. 실행 장치는 컴파일 장치로부터 제공된 바이너리 코드를 실행할 수 있다.

Description

동적 데이터 구성을 위한 방법 및 장치{METHOD AND APPARATUS FOR DYNAMIC DATA FORMAT}
아래의 실시예들은 동적 데이터 구성을 위한 방법 및 장치에 관한 것으로, 보다 상세히는 SIMD 프로세서에서 사용되는 동적 데이터를 구성하는 방법 및 장치가 개시된다.
단일-명령어 다중-데이터(Single-Instruction, Multiple-Data; SIMD) 프로세서(processor)는 단일한 명령어를 사용하여 다수의 데이터를 동시에 처리함으로써 처리(processing) 능력(power)을 향상시키는 프로세서이다.
SIMD는 중앙 처리 장치(Central Processing Unit; CPG) 및 그래픽스 처리 장치(Graphics Processing Unit; GPU) 등과 같은 다양한 프로세서의 성능을 향상시키기 위해 사용되는 기법이다.
SIMD 프로세서가 데이터를 처리하기 위해서는, 명령어에 의해 처리될 다수의 데이터가 구성되어야 한다. SIMD 프로세서는 구성된 다수의 데이터를 하나의 명령어를 사용하여 처리함으로써 컴퓨터 시스템의 성능을 향상시킬 수 있다.
SIMD 프로세서의 특성에 따라, 데이터를 처리하기에 적합한 데이터 포멧이 지원될 수 있다.
일 측에 따르면, 컴파일 장치가 소스 코드를 컴파일함으로써 바이너리 코드를 생성하는 방법에 있어서, 복수 개의 데이터 포멧들 중 상기 바이너리 코드를 실행할 프로세서에 적합한 데이터 포멧을 선택하는 단계 및 상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 단계를 포함하는 바이너리 코드 처리 방법이 제공될 수 있다.
상기 바이너리 코드 처리 방법은, 상기 선택된 데이터 포멧을 나타내는 정보를 생성하는 단계를 더 포함할 수 있다.
상기 프로세서는 단일-명령어 다중-데이터(Single-Instruction, Multiple-Data; SIMD) 프로세서일 수 있다.
상기 복수 개의 데이터 포멧들은 각각 상기 프로세서가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧일 수 있다.
상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧 및 배열의 구조체(Structure of Array; SoA) 포멧 중 하나 이상을 포함할 수 있다.
상기 바이너리 코드 처리 방법은, 상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계를 더 포함할 수 있다.
상기 실행하는 단계는, 상기 선택된 데이터 포멧에 기반하여 데이터를 로드하는 단계, 상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하는 단계 및 상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장하는 단계를 포함할 수 있다.
상기 바이너리 코드 처리 방법은, 상기 선택된 데이터 포멧을 나타내는 정보를 생성하는 단계 및 상기 정보에 기반하여 상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계를 더 포함할 수 있다.
상기 선택하는 단계는, 상기 복수 개의 데이터 포멧들 각각의 성능들을 예측하는 단계 및 상기 예측된 복수 개의 데이터 포멧들 각각의 성능들에 기반하여 상기 복수 개의 데이터 포멧들 중 최고의 성능을 제공하는 데이터 포멧을 상기 바이너리 코드를 실행할 프로세서에 적합한 데이터 포멧으로서 선택하는 단계를 포함할 수 있다.
다른 일 측에 따르면, 실행 장치가 바이너리 코드를 실행하는 방법에 있어서, 상기 바이너리 코드 및 선택된 데이터 포멧을 나타내는 정보를 수신하는 단계 및 프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계를 포함하고, 상기 선택된 데이터 포멧은 상기 프로세서에 의해 지원되는 복수 개의 데이터 포멧들 중 하나의 데이터 포멧인 바이너리 코드 실행 방법이 제공될 수 있다.
상기 실행하는 단계는, 상기 선택된 데이터 포멧에 기반하여 데이터를 로드하는 단계, 상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하는 단계 및 상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장하는 단계를 포함할 수 있다.
또 다른 일 측에 따르면, 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 프로세서(processor)에 적합한 데이터 포멧을 선택하고, 상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 컴파일 장치 및 상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 실행 장치를 포함하는 컴퓨터 시스템이 제공될 수 있다.
상기 컴파일 장치는 상기 선택된 데이터 포멧을 나타내는 정보를 생성할 수 있다.
상기 실행 장치는 상기 정보에 기반하여 상기 프로세서를 사용하여 상기 바이너리 코드를 실행할 수 있다.
또 다른 일 측에 따르면, 소스 코드를 저장하는 저장부 및 상기 저장부로부터 상기 소스 코드를 독출하고, 복수 개의 데이터 포멧들 중 상기 바이너리 코드를 실행할 실행 장치에게 적합한 데이터 포멧을 선택하고, 상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 프로세서를 포함하는 컴파일 장치가 제공될 수 있다.
상기 프로세서는 상기 선택된 데이터 포멧을 나타내는 정보를 생성할 수 있다.
상기 컴파일 장치는, 상기 바이너리 코드 및 상기 선택된 데이터 포멧을 나타내는 정보를 상기 실행 장치로 전송하는 송수신부를 더 포함할 수 있다.
상기 실행 장치의 프로세서는 단일-명령어 다중-데이터(Single-Instruction, Multiple-Data; SIMD) 프로세서일 수 있다.
상기 복수 개의 데이터 포멧들은 각각 상기 실행 장치의 프로세서가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧일 수 있다.
상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧 및 배열의 구조체(Structure of Array; SoA) 포멧 중 하나 이상을 포함할 수 있다.
또 다른 일 측에 따르면, 바이너리 코드 및 선택된 데이터 포멧을 나타내는 정보를 수신하는 송수신부 및 상기 바이너리 코드를 실행하는 프로세서를 포함하고, 상기 선택된 데이터 포멧은 상기 프로세서에 의해 지원되는 복수 개의 데이터 포멧들 중 하나의 데이터 포멧인 실행 장치가 제공될 수 있다.
상기 프로세서는 상기 선택된 데이터 포멧에 기반하여 데이터를 로드하고, 상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하고, 상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장할 수 있다.
도 1은 일 실시예에 따른 컴퓨터 시스템의 구조도이다.
도 2는 일 실시예에 따른 컴파일 장치의 블록도이다.
도 3은 일 실시예에 따른 실행 장치의 블록도이다.
도 4는 일 예에 따른 AoS 포멧을 설명한다.
도 5은 일 예에 따른 SoA 포멧을 설명한다.
도 6 및 도 7은 일 예에 따른 AoS 방식 및 SoA 방식의 성능을 비교한다.
도 6은 일 예에 따른 AoS 방식의 처리가 수행된 경우에서의 성능을 설명한다.
도 7은 일 예에 따른 SoA 방식의 처리가 수행된 경우에서의 성능을 설명한다.
도 8은 일 예에 따른 컴파일 장치의 프로세서의 블록도이다.
도 9는 일 예에 따른 그래픽 작업을 처리하는 소스 코드이다.
도 10은 일 예에 따른 조건 분기문을 포함하는 소스 코드이다.
도 11은 일 예에 따른 실행 장치의 프로세서의 블록도이다.
도 12는 일 실시예에 따른 바이너리 코드 처리 방법의 흐름도이다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
이하에서, 픽셀에 대한 설명은 버텍스에도 적용될 수 있다. 또한, 버텍스에 대한 설명은 픽셀에도 적용될 수 있다.
도 1은 일 실시예에 따른 컴퓨터 시스템의 구조도이다.
컴퓨터 시스템(100)은 소스 코드 내의 알고리즘의 특성을 소스 코드의 컴파일 단계에서 사전에 분석할 수 있다. 컴퓨터 시스템(100)은 상기의 분석에 기반하여 병렬 처리를 위한 효율적인 데이터 포멧을 선택할 수 있다. 선택된 데이터 포멧을 사용하는 병렬 처리 기법에 의해 컴퓨터 시스템(100)의 처리 능력(processing power)이 극대화될 수 있다. 여기서, 병렬 처리 기법은 SIMD 방식의 병렬 처리일 수 있다.
컴퓨터 시스템(100)은 컴파일 장치(110) 및 실행 장치(120)를 포함할 수 있다.
컴파일 장치(110)는 소스 코드(source code)를 컴파일함으로써 바이너리 코드(binary code)를 생성할 수 있다. 컴파일 장치(110)는 컴파일러(compiler)를 실행함으로써 소스 코드에 기반하여 바이너리 코드를 생성하는 컴퓨터일 수 있다.
컴파일 장치(110)는 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 실행 장치(120) 또는 프로세서(processor)에 적합한 데이터 포멧을 선택할 수 있다. 컴파일 장치(110)는 소스 코드를 컴파일함으로써 선택된 데이터 포멧을 사용하여 데이터를 처리하는 바이너리 코드를 생성할 수 있고, 선택된 데이터 포멧을 나타내는 정보를 생성할 수 있다. 바이너리 코드를 실행할 프로세서는 실행 장치(120)의 프로세서일 수 있다. 실행 장치(120)의 프로세서는 CPU 또는 GPU일 수 있다. 실행 장치(120)의 프로세서는 SIMD 프로세서일 수 있다.
컴파일 장치(110)는 생성된 바이너리 코드 및 선택된 데이터 포멧을 나타내는 정보를 실행 장치(120)에게 제공할 수 있다.
실행 장치(120)는 바이너리 코드를 실행할 수 있다. 실행 장치(120)는 바이너리 코드를 실행하는 컴퓨터일 수 있다. 실행 장치(120)는 선택된 데이터 포멧을 나타내는 정보에 기반하여 프로세서를 사용하여 바이너리 코드를 실행할 수 있다.
컴파일 장치(110) 및 실행 장치(120)는 물리적으로 동일한 하나의 장치일 수 있다.
도 2는 일 실시예에 따른 컴파일 장치의 블록도이다.
컴파일 장치(110)는 프로세서(210), 저장부(220) 및 송수신부(230)를 포함할 수 있다.
저장부(220)는 소스 코드 및 바이너리 코드를 저장할 수 있다.
프로세서(210)는 소스 코드를 컴파일함으로써 바이너리 코드 및 데이터 포멧을 나타내는 정보를 생성할 수 있다. 프로세서(210)는 저장부(220)로부터 소스 코드를 독출(read)할 수 있다. 프로세서는 생성된 바이너리 코드 및 데이터 포멧을 나타내는 정보를 저장부(220) 내에 저장할 수 있다.
프로세서(210)는 프로세서(210)로 입력된 소스 코드에 대응하는 가장 효율적인 데이터 포멧을 결정할 수 있다. 프로세서(210)는 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 실행 장치(120) 또는 프로세서에 적합한 데이터 포멧을 선택할 수 있다. 프로세서(210)는 소스 코드를 컴파일함으로써 선택된 데이터 포멧을 사용하여 데이터를 처리하는 바이너리 코드를 생성할 수 있고, 선택된 데이터 포멧을 나타내는 정보를 생성할 수 있다. 바이너리 코드를 실행할 프로세서는 실행 장치(120)의 프로세서일 수 있다.
송수신부(230)는 소스 코드 및 데이터 포멧을 나타내는 정보를 실행 장치(120)로 전송할 수 있다.
도 3은 일 실시예에 따른 실행 장치의 블록도이다.
실행 장치(120)는 프로세서(310) 및 송수신부(320)를 포함할 수 있다.
송수신부(320)는 코드 및 데이터 포멧을 나타내는 정보를 컴파일 장치(110)로부터 수신할 수 있다.
프로세서(310)는 CPU 또는 GPU일 수 있다. 프로세서(310)는 SIMD 프로세서일 수 있다. 프로세서(310)는 데이터 포멧을 나타내는 정보에 기반하여 프로세서를 사용하여 바이너리 코드를 실행할 수 있다.
복수 개의 데이터 포멧들 각각은 프로세서(310)에 의해 처리되어야 할 데이터를 묶는(combine) 방식(way)에 대응할 수 있다. 복수 개의 데이터 포멧들은 각각 실행 장치(120)의 프로세서(310)가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧일 수 있다.
복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧 및 배열의 구조체(Structure of Array; SoA) 포멧 중 하나 이상을 포함할 수 있다. AoS 포멧은 AoS 방식에서 사용되는 데이터 포멧일 수 있다. SoA 포멧은 SoA 방식에서 사용되는 데이터 포멧일 수 있다. AoS 포멧 및 SoA 포멧 각각에 대해 하기에서 도 4 및 도 5를 참조하여 상세히 설명된다.
또한, 복수 개의 데이터 포멧들은 스칼라(scalar) 포멧을 포함할 수 있다. 여기서, 스칼라 포멧은 프로세서(310)의 SIMD 아키텍처를 위한 포멧을 사용하지 않는 포멧일 수 있다. SIMD 아키텍처를 위한 포멧은 AoS 포멧 및 SoA 포멧 등을 포함할 수 있다.
복수 개의 데이터 포멧들 각각은 실행 장치(120)의 프로세서(310)에 의해 지원되는 데이터 포멧들일 수 있다. 실행 장치(120)의 프로세서(310)는 AoS 포멧 및 SoA 포멧 등을 동시에 또는 선택적으로 처리할 수 있도록 설계될 수 있다.
선택된 데이터 포멧을 나타내는 정보는 하나 이상의 비트들일 수 있다. 예컨대, 선택된 데이터 포멧을 나타내는 정보의 값이 이진 값 "00"일 경우, 선택된 데이터 포멧은 스칼라 포멧일 수 있다. 선택된 데이터 포멧을 나타내는 정보의 값이 이진 값 "01"일 경우, 선택된 데이터 포멧은 AoS 포멧일 수 있다. 선택된 데이터 포멧을 나타내는 정보의 값이 이진 값 "10"일 경우, 선택된 데이터 포멧은 SoA 포멧일 수 있다.
도 4는 일 예에 따른 AoS 포멧을 설명한다.
AoS 방식은 3 차원(Dimensional; D) 그래픽스 분야에서 사용될 수 있다.
AoS 방식은 그래픽 객체의 위치 또는 컬러를 하나의 구조체(structure)로 묶을 수 있고, 상기의 구조체를 동시에 처리할 수 있다. 여기서, 그래픽 객체는 픽셀(pixel) 또는 버텍스(vertex)일 수 있다. 위치의 구성 요소(component)들은 x 좌표 값, y 좌표 값, z 좌표 값 및 w 좌표 값일 수 있다. 컬러의 구성 요소들은 적(Red; R) 값, 녹(Green; G) 값, 청(Blue; B) 값 및 알파(Alpha; A) 값일 수 있다.
도 4에서, 각 행은 실행되는 명령어에 대응할 수 있다. 각 열은 행이 나타내는 명령어에 따라 실행 장치(120)의 프로세서(310)가 처리하는 데이터를 나타낼 수 있다. 예컨대, 프로세서(310)가 SIMD로 한 번에 32비트(bit)의 데이터를 처리할 수 있는 경우, 4 개의 행들은 각각 SIMD로 처리되는 8비트(bit)의 데이터를 나타낼 수 있다.
예컨대, 도 4에서, 제1 행의 'x1', 'y1', 'z1' 및 'w1'은 각각 제1 명령어에 의해 처리되는 제1 픽셀의 x 좌표 값, y 좌표 값, w 좌표 값 및 z 좌표 값을 나타낼 수 있다. 이하, 제2 행의 기호들, 제3 행의 기호들 및 제4 행의 기호들은 각각 제2 명령어, 제3 명령어 및 제4 명령어에 의해 처리되는 좌표 값들을 나타낼 수 있다.
AoS 방식이 사용될 경우, 프로세서(310)는 하나의 픽셀의 x, y, z 및 w에 대한 연산을 한 번에 처리할 수 있고, 순차적으로 복수 개의 픽셀들 각각에 대한 연산을 처리할 수 있다.
AoS 방식은 3D 그래픽스 상에서 데이터를 자연스럽게 처리하는 장점을 가질 수 있다. AoS 방식은 3D 그래픽스에서, 픽셀의 4D 위치 및 컬러를 자연스럽게 표현할 수 있다. 그러나, AoS 방식은 3D 그래픽스의 연산 과정에서 모든 구성 요소들이 사용되지 않는 경우 낮은 효율을 나타내는 단점을 가질 수 있다. AoS 방식은 하나의 명령어가 픽셀의 4 개의 구성 요소들에게 동시에 적용되지 않으면, 실행 장치(120)의 효율이 저하될 수 있다.
도 5은 일 예에 따른 SoA 포멧을 설명한다.
SoA 방식은 3D 그래픽스 분야에서 사용될 수 있다.
SoA 방식은 실행 장치(120)의 프로세서(310)에 의해 처리되어야 할 픽셀들 또는 버텍스들의 구성 요소를 하나의 구조체로 묶을 수 있고, 상기의 구조체를 동시에 처리할 수 있다. 상기의 구성 요소는 위치의 구성 요소 또는 컬러의 구성 요소일 수 있다. 위치의 구성 요소는 x, y, z 또는 w일 수 있다. 컬러의 구성 요소는 R, G, B 또는 A 중 하나일 수 있다.
도 5에서, 각 행은 실행되는 명령어에 대응할 수 있다. 각 열은 행이 나타내는 명령어에 따라 실행 장치(120)의 프로세서(310)가 처리하는 데이터를 나타낼 수 있다. 예컨대, 프로세서(310)가 SIMD로 한 번에 32비트(bit)의 데이터를 처리할 수 있는 경우, 4 개의 행들은 각각 SIMD로 처리되는 8비트(bit)의 데이터를 나타낼 수 있다.
예컨대, 도 5에서, 제1 행의 'x1', 'x2', 'x3' 및 'x4'는 각각 제1 명령어에 의해 처리되는 제1 픽셀의 x 좌표 값, 제2 픽셀의 x 좌표 값, 제3 픽셀의 x 좌표 값 및 제4 픽셀의 x 좌표 값을 나타낼 수 있다. 제2 행의 기호들은 제2 명령어에 의해 처리되는 제1 픽셀 내지 제4 픽셀들의 y 좌표 값들을 나타낼 수 있다. 제3 행의 기호들은 제3 명령어에 의해 처리되는 제1 픽셀 내지 제4 픽셀들의 z 좌표 값들을 나타낼 수 있다. 제4 행의 기호들은 제4 명령어에 의해 처리되는 제1 픽셀 내지 제4 픽셀들의 w 좌표 값들을 나타낼 수 있다.
SoA 방식은, 프로세서(310)가 복수 개의 픽셀들 또는 복수 개의 버텍스들에 대해 동일한 명령어들을 수행할 때, 실행 장치(120)의 효율을 최대로 향상시키는 장점을 가질 수 있다. 하나의 어레이(array)에 동일한 연산이 적용되는 경우, SoA 방식은 병렬 명령어들을 사용하여 상기의 동일한 연산을 수행함에 있어서 매우 효율적일 수 있다. 여기서, 어레이는 픽셀 등의 어래이일 수 있다. 그러나, SoA 방식은, 실행 코드 내에서 조건 문(conditional statement)에 의한 분기(branch)가 발생하는 경우, 데이터 처리의 제어가 어려워지며 실행 장치(120)이 성능이 저하되는 단점을 가질 수 있다. 예컨대, SoA 방식은 조건에 따라 어레이의 일부에 적용되는 연산을 수행함에 있어서 실행 장치(120)의 성능을 저하시킬 수 있다.
도 6 및 도 7은 일 예에 따른 AoS 방식 및 SoA 방식의 성능을 비교한다.
도 6 및 도 7에서, 실행 장치(120)의 프로세서(310)는 하나의 명령어를 사용하여 최대 16 개의 데이터를 동시에 처리할 수 있다. 도 6 및 도 7은 각각 AoS 방식을 사용하여 데이터를 처리할 경우의 연산 흐름(operation flow) 및 SoA 방식을 사용하여 데이터를 처리할 경우의 연산 흐름을 나타낼 수 있다.
도 6은 일 예에 따른 AoS 방식의 처리가 수행된 경우에서의 성능을 설명한다.
AoS 방식이 사용될 경우, 프로세서(310)는 4 개의 픽셀들의 x 좌표 값, y 좌표 값, z 좌표 값 및 w 좌표 값을 한 번에 처리할 수 있다. 그러나, 도 6에서 도시된 것처럼, 실제로 처리될 데이터가 픽셀의 x 좌표 값, y 좌표 값 및 z 좌표 값인 경우, 명령어에 의해 처리되는 16 개의 데이터 중 12 개의 데이터만이 유효한 것일 수 있다.
도 6에서, 프로세서(310)는, 3 번의 단계들에 걸쳐, 12 개의 픽셀들의 x 좌표 값, y 좌표 값 및 z 좌표 값에 대한 연산을 수행할 수 있다.
도 7은 일 예에 따른 SoA 방식의 처리가 수행된 경우에서의 성능을 설명한다.
SoA 방식이 사용될 경우, 프로세서(310)는 최대 16 개의 픽셀들의 x 좌표 값들, y 좌표 값들. z 좌표 값들 또는 w 좌표 값들을 한 번에 처리할 수 있다. 그러나, 도 6에서 도시된 것처럼, 실제로 처리될 데이터가 11 개의 픽셀들의 x 좌표 값들, y 좌표 값들 또는 z 좌표 값들인 경우, 명령어에 의해 처리되는 16 개의 데이터 중 11 개의 데이터만이 유효한 것일 수 있다.
도 6에서, 프로세서(310)는, 3 번의 단계들에 걸쳐, 11 개의 픽셀들의 x 좌표 값들, y 좌표 값들 및 z 좌표 값들 각각에 대한 연산을 수행할 수 있다.
도 8은 일 예에 따른 컴파일 장치의 프로세서의 블록도이다.
프로세서(210)는 SIMD 프로세서에 기반하는 실행 장치(120)가 SIMD를 효율적으로 이용할 수 있게 하는 데이터 포멧을 판별할 수 있다.
프로세서(210)는, 상기의 판별을 위해, 복수 개의 분석부(analyzer)들 및 비교부(840)를 포함할 수 있다. 복수 개의 분석부들의 일 예로서, 제1 분석부(810), 제2 분석부(820) 및 제3 분석부(830)가 도시되었다.
복수 개의 분석부들은 복수 개의 데이터 포멧들 각각의 성능들을 동적으로 예측할 수 있다. 복수 개의 분석부들 각각은 복수 개의 데이터 포멧들 중 하나의 데이터 포멧의 성능을 예측할 수 있다. 여기서, 데이터 포멧의 성능은 상기의 데이터 포멧을 사용하여 데이터를 처리하는 바이너리 코드가 실행 장치(120)에서 실행될 경우에, 상기의 처리 장치 또는 상기의 바이너리 코드의 성능일 수 있다.
예컨대, 제1 분석부(810)는 스칼라 분석부일 수 있다. 제1 분석부(810)는 스칼라 방식을 사용하는 바이너리 코드가 실행 장치(120)에서 실행될 경우에 성능을 분석할 수 있다. 제2 분석부(820)는 AoS 분석부일 수 있다. 제2 분석부(820)는 AoS 방식을 사용하는 바이너리 코드가 실행 장치(120)에서 실행될 경우에 성능을 분석할 수 있다. 제3 분석부(830)는 SoA 분석부일 수 있다. 제3 분석부(830)는 SoA 방식을 사용하는 바이너리 코드가 실행 장치(120)에서 실행될 경우에 성능을 분석할 수 있다.
복수 개의 분석부들은 소스 코드를 사용하여 각 데이터 포멧 별로 바이너리 코드를 생성할 수 있다. 복수 개의 분석부들은 데이터 포멧 별로 생성된 바이너리 코드들 각각의 성능의 분석 및 예측을 수행할 수 있다.
상기의 성능의 분석 및 예측을 위해 바이너리 코드들 각각에 대해 컴파일 단계의 분석 기법이 적용될 수 있다. 말하자면, 복수 개의 분석부들 각각은 자신이 복수 개의 데이터 포멧들 중 하나의 데이터 포멧을 적용하여 생성한 바이너리 코드에 컴파일 단계의 분석 기법을 적용함으로써 상기의 생성한 바이너리 코드의 성능을 분석 또는 예측할 수 있다. 컴파일 단계의 분석 기법은 1) 명령어 사용률(instruction utilization) 및 2) 조건 분기(conditional branch)에 따른 추가적인 비용 중 하나 이상을 포함할 수 있다. 복수 개의 분석부들은 성능의 예측을 위해, 대표적으로 사용되는 명령어들의 사용률 및 조건 분기에 따른 추가 비용을 사용할 수 있다. 성능의 예측에 대해, 하기에서 도 9 및 도 10을 참조하여 상세히 설명된다.
비교부(840)는 복수 개의 분석부들에 의해 분석 또는 예측된 복수 개의 데이터 포멧들 각각의 성능들에 기반하여, 복수 개의 데이터 포멧들 중 최고 또는 최적의 성능을 제공하는 데이터 포멧을 바이너리 코드를 실행할 실행 장치(120) 또는 실행 장치(120)의 프로세서(310)에 적합한 데이터 포멧으로서 선택할 수 있다.
복수 개의 분석부들 및 비교부(840)를 사용하지 않고, 컴파일 장치(110)의 사용자(user)에 의해 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 실행 장치(120) 또는 프로세서(310)에 적합한 하나의 데이터 포멧이 선택될 수 있다. 프로세서(210)는 사용자에 의해 선택된 데이터 포멧을 사용하여 데이터를 처리하는 바이너리 코드를 생성할 수 있으며, 사용자에 의해 선택된 데이터 포멧을 나타내는 정보를 생성할 수 있다. 여기서, 사용자는 소스 코드의 프로그래머(programmer)일 수 있다.
복수 개의 분석부들, 제1 분석부(810), 제2 분석부(820), 제3 분석부(830) 및 비교부(840) 각각은 프로세서(210)에서 수행되는 함수(function), 라이브러리(library), 서비스(service), 프로세스(process), 쓰레드(thread) 또는 모듈(module)을 나타낼 수 있다.
도 9는 일 예에 따른 그래픽 작업을 처리하는 소스 코드이다.
도 9의 소스 코드를 컴파일하여 바이너리 코드를 생성함에 있어서, 비교부(840)는 명령어 사용률을 성능 예측을 위해 사용할 수 있다.
명령어 사용률은 구성 요소 별로 사용된 자원(resource)의 사용률을 의미할 수 있다.
GPU에서 자주 사용되는 픽셀 쉐이더(shader)에서와 같이, 4D를 나타내는 구성 요소들 중 3D에 대응하는 구성 요소들만이 주로 사용될 수 있다. AoS 방식이 사용될 경우, 전술된 도 6에서 도시된 것과 같이, 전체의 가용한 자원들 중 75%의 자원만이 사용될 수 있다. 반면, SoA 방식이 사용될 경우, 전체의 가용한 자원들이 100% 모두 사용될 수 있다. 따라서, 도 9에서 도시된 소스 코드는 AoS 방식을 사용함으로써 더 효율적으로 처리될 수 있다.
도 10은 일 예에 따른 조건 분기문을 포함하는 소스 코드이다.
도 10의 소스 코드를 컴파일하여 바이너리 코드를 생성함에 있어서, 비교부(840)는 소스 코드 내의 조건 분기에 따른 추가적인 비용을 성능 예측을 위해 사용할 수 있다.
조건 분기문은, 병렬 처리를 위해 사용되는 기법에 있어서, 가장 어려운 문제들 중 하나일 수 있다. 특정한 명령어가 주어진 조건에 따라 실행되는지 여부는 실행 시간(run-time)에 결정될 수 있고, 상기의 명령어가 실행될지 여부는 사전에 예측되기 어려울 수 있다.
상기의 실행 여부의 예측을 통한 성능 향상을 위해 많은 연구가 진행되어 왔다. 비교부(840)는 종래의 다양한 연구 결과를 조건 분기에 따른 추가적인 비용을 계산하기 위해 사용할 수 있다.
하기에서, 단순한 조건 분기를 포함하는 도 10의 코드에 대한 추가적인 비용의 계산의 일 예를 설명한다.
AoS 방식이 사용될 경우, 분기에 의해 단 한번만 함수가 실행될 수 있다. 여기서, 실행되는 함수는 "func_A" 또는 "func_B"일 수 있다.
SoA 방식이 사용될 경우, 최악의 경우, 함수들 "func_A" 및 "func_B" 모두가 실행될 수 있다. SoA 방식에 대응하는 분석부는 함수들 각각에서 요구되는 자원을 분석할 수 있다. 상기의 분석에 기반하여, SoA 방식에 대응하는 분석부는 함수들 모두가 실행되었을 때의 명령어 사용률 및 하나의 함수만 실행되었을 때의 명령어 사용률 각각에 대해 적합한 확률 함수를 대입함으로써 추가적인 비용을 계산할 수 있다. 여기서, SoA 방식에 대응하는 분석부는, 복수 개의 분석부들 중 SoA 포멧을 사용하는 바이너리 코드의 성능을 예측하는 분석부일 수 있다.
복수 개의 비교부들은 각각 대응하는 데이터 포멧을 사용하는 바이너리 코드의 조건 분기에 따른 추가적인 비용을 계산할 수 있다. 비교부(840)는 복수 개의 데이터 포멧들의 추가적인 비용들을 비교함으로써 바이너리 코드를 실행할 프로세서(310)에 적합한 데이터 포멧을 선택할 수 있다.
도 11은 일 예에 따른 실행 장치의 프로세서의 블록도이다.
실행 장치(120)의 프로세서(310)는 동적 SIMD 아키텍처의 프로세서일 수 있다. 프로세서(310)는 명령어 처리부(1110), 데이터 로드부(1120) 및 데이터 저장부(1130)를 포함할 수 있다. 바이너리 코드는 명령어 처리부(1110)로 제공될 수 있고, 선택된 데이터 포멧을 나타내는 정보는 데이터 로드부(1120) 및 데이터 저장부(1130)로 제공될 수 있다.
프로세서(310)는 기존의 SIMD 프로세서에, 선택된 데이터 포멧을 기반으로 데이터의 로드(load) 및 저장(store)을 동적으로 제어하는 기능을 추가한 프로세서일 수 있다. 상기의 동적 제어는, 프로세서에 따라, 명령어 레벨(instruction level)의 로드 및/또는 저장의 포멧을 변환하는 방식으로 제공될 수 있다. 또한, 상기의 동적 제어는 연계된 하드웨어(hardware) 인터페이스(interface) 또는 함수(function) 인터페이스(interface) 부분(part)에서 포멧을 변환하여 저장하는 방식으로 제공될 수 있다.
프로세서(310)는 산술 연산에 대해서는 선택된 데이터 포멧과 무관하게 동일한 방식으로 명령어를 처리할 수 있다. 여기서, 산술 연산은 "덧셈(Add)" 연산 또는 "곱셈(Mul)" 연산 등일 수 있다.
프로세서(310)는 로드 연산 및 저장 연산에 대해 선택된 데이터 포멧에 맞추어진 처리 방법을 제공할 수 있다. 전술된 도 4 및 도 5에서 도시된 것과 같이, AoS 포멧 및 SoA 포멧 간의 관계는 전치 행렬의 변환에 대응할 수 있다. 즉, 전치(transpose)가 가능하도록 로드 명령어 및 저장 명령어가 설계될 수 있다. 프로세서(310)는 선택된 데이터 포멧에 따라 동적으로 연산에 요구되는 데이터가 준비되는 것을 지원할 수 있다. 또한, 프로세서(310)는 처리하고자 하는 알고리즘의 특성에 따라 처리할 데이터의 입력 포멧 및 결과 포멧을 변환할 수 있다. 예컨대, 프로세서(310)가 CPU인 경우, 프로세서(310)에서 수행될 입력(In) 및/또는 출력(Out)이 결정되지 않을 수 있다. 입력 및/또는 출력이 결정되지 않은 경우, 로드 및/또는 저장 명령어 수준에서의 포멧 변환이 제공될 수 있으며, 연산이 수행될 때 데이터 포멧에 따라 연산이 수행될 수 있다. 한편, 프로세서(310)가 GPU인 경우, 프로세서(310)에 의해 수행될 입력 및/또는 출력이 확정될 수 있다. 입력 및/또는 출력이 확정된 경우, 프로세서(310)는 쉐이더가 입력된 데이터에 대한 처리를 수행하기 전에 입력된 데이터의 데이터 포멧을 변환함으로써 처리될 데이터를 준비할 수 있다. 또한, 프로세서(310)는 내부적인 산술 연산에 대해서는 기존의 명령어를 그대로 사용함으로써 처리할 수 있다.
명령어 패치부(1110)는 바이너리 코드로부터 명렁어를 패치할 수 있다.
데이터 로드부(1120)는 선택된 데이터 포멧에 기반하여 데이터를 로드할 수 있다. 예컨대, 데이터의 로드는, 프로세서(310)의 레지스터(register) 중 피연산자(orerand) 부분에 데이터를 채워 넣는 것일 수 있다. 레지스터의 피연산자 부분은 복수 개일 수 있다. 레지스터는 어큐뮬레이터(accumulator)일 수 있다. 피연산자 부분은 비트들로 구성될 수 있다.
데이터가 로드된 후, 프로세서(310)는 로드된 데이터에 패치된 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리할 수 있다. 예컨대, 프로세서(310)는 로드된 데이터에 패치된 명령어가 나타내는 연산을 적용함으로써 연산이 적용된 갱신된 데이터를 레지스터 또는 어큐뮬레이터 내에 저장할 수 있다. 갱신된 데이터가 저장된 레지스터 또는 어큐뮬레이터는 데이터가 로드된 레지스터 또는 어큐뮬레이터와 동일할 수 있고, 상이할 수도 있다.
데이터 저장부(1130)는 처리된 데이터를 선택된 데이터 포멧에 기반하여 저장할 수 있다. 여기서, 처리된 데이터의 저장은, 레지스터 또는 어큐뮬레이터 내의 데이터를 메모리 내에 저장하는 것일 수 있다.
도 12는 일 실시예에 따른 바이너리 코드 처리 방법의 흐름도이다.
단계(1210)에서, 컴파일 장치(110)의 프로세서(210)는 저장부(220)로부터 소스 코드를 독출할 수 있다.
단계(1220)에서, 프로세서(210)는 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 실행 장치(120)의 프로세서(310)에 적합한 데이터 포멧을 선택할 수 있다. 단계(1220)는 단계(1222) 및 단계(1224)를 포함할 수 있다.
단계(1222)에서, 프로세서(210)의 복수 개의 분석부들은 복수 개의 데이터 포멧들 각각의 성능들을 예측할 수 있다.
단계(1224)에서, 비교부(840)는 예측된 복수 개의 데이터 포멧들 각각의 성능들에 기반하여 복수 개의 데이터 포멧들 중 최고의 성능을 제공하는 데이터 포멧을 바이너리 코드를 실행할 실행 장치(120)의 프로세서(310)에 적합한 데이터 포멧으로서 선택할 수 있다.
복수 개의 데이터 포멧들은 실행 장치(120)의 프로세서(310)가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧일 수 있다. 실행 장치(120)의 송수신부(320)는 프로세서(310)가 처리할 수 있는 복수 개의 데이터 포멧을 나타내는 정보를 컴파일 장치(110)의 송수신부(230)로 전송할 수 있다. (도시되지 않음.)
단계(1230)에서, 프로세서(210)는 선택된 데이터 포멧을 사용하여 데이터를 처리하는 바이너리 코드를 생성할 수 있다.
단계(1240)에서, 프로세서(210)는 선택된 포멧을 나타내는 정보를 생성할 수 있다.
단계(1250)에서, 컴파일 장치(110)의 송수신부(230)는 바이너리 코드를 실행 장치(120)의 송수신부(320)로 전송할 수 있다.
단계(1255)에서, 컴파일 장치(110)의 송수신부(230)는 선택된 데이터 포멧을 나타내는 정보를 실행 장치(120)의 송수신부(320)로 전송할 수 있다. 단계(1250) 및 단계(1255)는 동시에 수행될 수 있다.
단계(1260)에서, 실행 장치(120)의 처리부(310)는 바이너리 코드를 실행할 수 있다. 단계(1260)는 단계(1262), 단계(1264) 및 단계(1266)를 포함할 수 있다.
단계(1262)에서, 실행 장치(120)의 데이터 로드부(1120)는 선택된 데이터 포멧에 기반하여 데이터를 로드할 수 있다.
단계(1264)에서, 실행 장치(120)의 처리부(310)는 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리할 수 있다.
단계(1266)에서, 실행 장치(120)의 데이터 저장부(1130)는 처리된 데이터를 선택된 데이터 포멧에 기반하여 저장할 수 있다.
전술된 단계들(1210, 1220, 1222, 1224, 1230, 1240, 1250, 1255, 1260, 1262, 1264 및 1266) 중 하나 이상의 단계들은 도시된 것과 다른 순서로 실행될 수 있으며, 병렬로 실행될 수 있다.
앞서 도 1 내지 도 11을 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
전술된 실시예들에 따른 방법은 SIMD 프로세서에 기반한 연산을 수행하는 장치 및 시스템에서 응용될 수 있다. 응용의 일 예로서, 오픈지엘(OpenGL), 오픈지엘이에스(OpenGL|ES) 등과 같은 렌더링 시스템(rendering system)이 있고, 오픈씨엘(OpenCL) 및 쿠다(CUDA) 등과 같은 병렬 컴퓨팅 시스템이 있다.
전술된 실시예들에 따라, 데이터 포멧에 대한 작업이 컴파일 장치에 의해 자동으로 처리됨으로써 프로그래머에게 편리한 개발 환경이 개발될 수 있으며, 실행 장치(120)의 프로세서(310)의 효율이 향상될 수 있다.
또한, 전술된 실시예들은, OpenGL 및 OpenGL|ES 등과 같은 프로그래머에 의한 데이터 포멧의 변환이 불가능한 표준 언어에 대해서도, 내부적인 데이터 포멧의 변환을 제공함으로써 실행 장치(120)의 프로세서(310)의 효율이 향상될 수 있다.
프로세서(310)의 효율이 향상됨으로써, 처리 시간이 단축될 수 있으며, 사용 전력 또한 감소될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.
110: 컴파일 장치
120: 실행 장치

Claims (20)

  1. 컴파일 장치가 소스 코드를 컴파일함으로써 바이너리 코드를 생성하는 방법에 있어서,
    복수 개의 데이터 포멧들 중 상기 바이너리 코드를 실행할 프로세서에 적합한 데이터 포멧을 선택하는 단계; 및
    상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 단계
    를 포함하고,
    상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧, 배열의 구조체(Structure of Array; SoA) 포멧 및 스칼라 포멧을 포함하고,
    상기 데이터 포멧을 선택하는 단계는
    상기 AoS 포멧 또는 상기 SoA 포멧을 선택하는 데 사용 실익이 없는 경우에, 상기 스칼라 포멧을 선택하는 바이너리 코드 처리 방법.
  2. 제1항에 있어서,
    상기 선택된 데이터 포멧을 나타내는 정보를 생성하는 단계
    를 더 포함하는 바이너리 코드 처리 방법.
  3. 제1항에 있어서,
    상기 프로세서는 단일-명령어 다중-데이터(Single-Instruction, Multiple-Data; SIMD) 프로세서이고,
    상기 복수 개의 데이터 포멧들은 각각 상기 프로세서가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧인, 바이너리 코드 처리 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계
    를 더 포함하는 바이너리 코드 처리 방법.
  6. 제5항에 있어서,
    상기 실행하는 단계는,
    상기 선택된 데이터 포멧에 기반하여 데이터를 로드하는 단계;
    상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하는 단계; 및
    상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장하는 단계
    를 포함하는 바이너리 코드 처리 방법.
  7. 제1항에 있어서,
    상기 선택된 데이터 포멧을 나타내는 정보를 생성하는 단계; 및
    상기 정보에 기반하여 상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계
    를 더 포함하는 바이너리 코드 처리 방법.
  8. 제1항에 있어서,
    상기 선택하는 단계는,
    상기 복수 개의 데이터 포멧들 각각의 성능들을 예측하는 단계; 및
    상기 예측된 복수 개의 데이터 포멧들 각각의 성능들에 기반하여 상기 복수 개의 데이터 포멧들 중 최고의 성능을 제공하는 데이터 포멧을 상기 바이너리 코드를 실행할 프로세서에 적합한 데이터 포멧으로서 선택하는 단계
    를 포함하는 바이너리 코드 처리 방법.
  9. 실행 장치가 바이너리 코드를 실행하는 방법에 있어서,
    상기 바이너리 코드 및 선택된 데이터 포멧을 나타내는 정보를 수신하는 단계; 및
    프로세서를 사용하여 상기 바이너리 코드를 실행하는 단계
    를 포함하고,
    상기 선택된 데이터 포멧은 상기 프로세서에 의해 지원되는 복수 개의 데이터 포멧들 중 하나의 데이터 포멧이고,
    상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧, 배열의 구조체(Structure of Array; SoA) 포멧 및 스칼라 포멧을 포함하고,
    상기 AoS 포멧 또는 상기 SoA 포멧을 선택하는 데 사용 실익이 없는 경우에, 상기 스칼라 포멧이 데이터 포멧으로 선택되는 바이너리 코드 실행 방법.
  10. 제9항에 있어서,
    상기 실행하는 단계는,
    상기 선택된 데이터 포멧에 기반하여 데이터를 로드하는 단계;
    상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하는 단계; 및
    상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장하는 단계
    를 포함하는 바이너리 코드 실행 방법.
  11. 제1항 내지 제3항 및 제5항 내지 제10항 중 어느 한 항의 방법을 수행하는 프로그램이 기록된 컴퓨터 판독 가능 기록 매체.
  12. 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 프로세서(processor)에 적합한 데이터 포멧을 선택하고, 상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 컴파일 장치; 및
    상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 실행 장치
    를 포함하고,
    상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧, 배열의 구조체(Structure of Array; SoA) 포멧 및 스칼라 포멧을 포함하고,
    상기 컴파일 장치는
    상기 AoS 포멧 또는 상기 SoA 포멧을 선택하는 데 사용 실익이 없는 경우에, 상기 스칼라 포멧을 선택하는 컴퓨터 시스템.
  13. 제12항에 있어서,
    상기 컴파일 장치는 상기 선택된 데이터 포멧을 나타내는 정보를 생성하고,
    상기 실행 장치는 상기 정보에 기반하여 상기 프로세서를 사용하여 상기 바이너리 코드를 실행하는 컴퓨터 시스템.
  14. 소스 코드를 저장하는 저장부; 및
    상기 저장부로부터 상기 소스 코드를 독출하고, 복수 개의 데이터 포멧들 중 바이너리 코드를 실행할 실행 장치에게 적합한 데이터 포멧을 선택하고, 상기 선택된 데이터 포멧을 사용하여 데이터를 처리하는 상기 바이너리 코드를 생성하는 프로세서
    를 포함하고,
    상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧, 배열의 구조체(Structure of Array; SoA) 포멧 및 스칼라 포멧을 포함하고,
    상기 프로세서는
    상기 AoS 포멧 또는 상기 SoA 포멧을 선택하는 데 사용 실익이 없는 경우에, 상기 스칼라 포멧을 선택하는 컴파일 장치.
  15. 제14항에 있어서,
    상기 프로세서는 상기 선택된 데이터 포멧을 나타내는 정보를 생성하는 컴파일 장치.
  16. 제15항에 있어서,
    상기 바이너리 코드 및 상기 선택된 데이터 포멧을 나타내는 정보를 상기 실행 장치로 전송하는 송수신부
    를 더 포함하는 컴파일 장치.
  17. 제14항에 있어서,
    상기 실행 장치의 프로세서는 단일-명령어 다중-데이터(Single-Instruction, Multiple-Data;SIMD) 프로세서이고,
    상기 복수 개의 데이터 포멧들은 각각 상기 실행 장치의 프로세서가 SIMD 방식으로 데이터를 병렬 처리하기 위해 사용되는 데이터 포멧인 컴파일 장치.
  18. 삭제
  19. 바이너리 코드 및 선택된 데이터 포멧을 나타내는 정보를 수신하는 송수신부; 및
    상기 바이너리 코드를 실행하는 프로세서
    를 포함하고,
    상기 선택된 데이터 포멧은 상기 프로세서에 의해 지원되는 복수 개의 데이터 포멧들 중 하나의 데이터 포멧이고,
    상기 복수 개의 데이터 포멧들은 구조체의 배열(Array of Structure; AoS) 포멧, 배열의 구조체(Structure of Array; SoA) 포멧 및 스칼라 포멧을 포함하고,
    상기 AoS 포멧 또는 상기 SoA 포멧을 선택하는 데 사용 실익이 없는 경우에, 상기 스칼라 포멧이 데이터 포멧으로 선택되는 실행 장치.
  20. 제19항에 있어서,
    상기 프로세서는 상기 선택된 데이터 포멧에 기반하여 데이터를 로드하고, 상기 로드된 데이터에 명령어가 나타내는 연산을 적용함으로써 로드된 데이터를 처리하고, 상기 처리된 데이터를 상기 선택된 데이터 포멧에 기반하여 저장하는 실행 장치.
KR1020120089561A 2012-08-16 2012-08-16 동적 데이터 구성을 위한 방법 및 장치 KR101893796B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020120089561A KR101893796B1 (ko) 2012-08-16 2012-08-16 동적 데이터 구성을 위한 방법 및 장치
US13/962,364 US9342282B2 (en) 2012-08-16 2013-08-08 Method and apparatus for dynamic data configuration
CN201310350624.1A CN103593221B (zh) 2012-08-16 2013-08-13 用于动态数据配置的方法和设备
JP2013168838A JP6375102B2 (ja) 2012-08-16 2013-08-15 動的データ構成のための方法及び装置
EP13180661.4A EP2698707B1 (en) 2012-08-16 2013-08-16 A method and compilation apparatus for selecting a data layout providing the optimum performance for a target processor using a SIMD scheme

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120089561A KR101893796B1 (ko) 2012-08-16 2012-08-16 동적 데이터 구성을 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20140023561A KR20140023561A (ko) 2014-02-27
KR101893796B1 true KR101893796B1 (ko) 2018-10-04

Family

ID=49000336

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120089561A KR101893796B1 (ko) 2012-08-16 2012-08-16 동적 데이터 구성을 위한 방법 및 장치

Country Status (5)

Country Link
US (1) US9342282B2 (ko)
EP (1) EP2698707B1 (ko)
JP (1) JP6375102B2 (ko)
KR (1) KR101893796B1 (ko)
CN (1) CN103593221B (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102101834B1 (ko) 2013-10-08 2020-04-17 삼성전자 주식회사 영상 처리 장치 및 방법
CN107491288B (zh) * 2016-06-12 2020-05-08 合肥君正科技有限公司 一种基于单指令多数据流结构的数据处理方法及装置
JP6864224B2 (ja) 2017-01-27 2021-04-28 富士通株式会社 プロセッサ、情報処理装置及びプロセッサの動作方法
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
KR102319115B1 (ko) * 2020-02-05 2021-11-01 한국전자통신연구원 컨텍스트 스위칭에 영향받지 않는 하버드 아키텍처의 캐시 특성을 활용한 에뮬레이팅 환경 탐지 방법 및 그 시스템
CN112925523B (zh) * 2021-03-02 2024-06-21 京东科技控股股份有限公司 对象比较方法、装置、设备及计算机可读介质
CN114298890B (zh) * 2021-12-02 2024-01-30 格兰菲智能科技有限公司 数据处理装置及其方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008503838A (ja) * 2004-06-29 2008-02-07 インテル コーポレイション 単一命令多重データ実行エンジンのための条件命令
US20090018993A1 (en) 2007-07-13 2009-01-15 Rapidmind, Inc. Methods and systems for optimizing data accesses
US20090199169A1 (en) * 2008-01-31 2009-08-06 Sun Microsystems, Inc. Method and system for array optimization
JP2009251996A (ja) * 2008-04-08 2009-10-29 Nippon Telegr & Teleph Corp <Ntt> 処理装置、処理方法およびそのプログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6862729B1 (en) * 2000-04-04 2005-03-01 Microsoft Corporation Profile-driven data layout optimization
US7143404B2 (en) * 2003-03-31 2006-11-28 Intel Corporation Profile-guided data layout
US7415703B2 (en) 2003-09-25 2008-08-19 International Business Machines Corporation Loading software on a plurality of processors
US8484441B2 (en) 2004-03-31 2013-07-09 Icera Inc. Apparatus and method for separate asymmetric control processing and data path processing in a configurable dual path processor that supports instructions having different bit widths
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
FR2895104A1 (fr) 2005-12-19 2007-06-22 Dxo Labs Sa Procede pour fournir des donnees a un moyen de traitement numerique
US20080162522A1 (en) 2006-12-29 2008-07-03 Guei-Yuan Lueh Methods and apparatuses for compaction and/or decompaction
GB0809189D0 (en) 2008-05-20 2008-06-25 Aspex Semiconductor Ltd Improvements relating to single instruction multiple data (SIMD) architectures
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
GB2464292A (en) 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8418155B2 (en) 2009-02-10 2013-04-09 International Business Machines Corporation Generating parallel SIMD code for an arbitrary target architecture
US8484276B2 (en) 2009-03-18 2013-07-09 International Business Machines Corporation Processing array data on SIMD multi-core processor architectures
US9569270B2 (en) 2009-04-21 2017-02-14 Empire Technology Development Llc Mapping thread phases onto heterogeneous cores based on execution characteristics and cache line eviction counts
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8910135B2 (en) * 2010-11-02 2014-12-09 Advanced Micro Devices, Inc. Structure layout optimizations
US9389845B2 (en) * 2011-10-24 2016-07-12 Infosys Limited System and method for dynamically generating a user personalized downloadable executable file

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008503838A (ja) * 2004-06-29 2008-02-07 インテル コーポレイション 単一命令多重データ実行エンジンのための条件命令
US20090018993A1 (en) 2007-07-13 2009-01-15 Rapidmind, Inc. Methods and systems for optimizing data accesses
US20090199169A1 (en) * 2008-01-31 2009-08-06 Sun Microsystems, Inc. Method and system for array optimization
JP2009251996A (ja) * 2008-04-08 2009-10-29 Nippon Telegr & Teleph Corp <Ntt> 処理装置、処理方法およびそのプログラム

Also Published As

Publication number Publication date
EP2698707B1 (en) 2016-05-25
EP2698707A1 (en) 2014-02-19
JP6375102B2 (ja) 2018-08-15
US9342282B2 (en) 2016-05-17
CN103593221B (zh) 2018-05-11
CN103593221A (zh) 2014-02-19
US20140052967A1 (en) 2014-02-20
KR20140023561A (ko) 2014-02-27
JP2014038624A (ja) 2014-02-27

Similar Documents

Publication Publication Date Title
KR101893796B1 (ko) 동적 데이터 구성을 위한 방법 및 장치
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
US9720726B2 (en) Multi-dimensional thread grouping for multiple processors
US8286198B2 (en) Application programming interfaces for data parallel computing on multiple processors
KR101900796B1 (ko) 기민 통신 오퍼레이터
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
CN111831287A (zh) 用于确定执行代码段所需的资源的方法、设备和程序产品
US20170337060A1 (en) Information processing apparatus and conversion method
US10564947B2 (en) Computer system and method for multi-processor communication
KR101603752B1 (ko) 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법
US20170269931A1 (en) Method and Computing System for Handling Instruction Execution Using Affine Register File on Graphic Processing Unit
US20210183005A1 (en) Graphics instruction operands alias
KR20150051083A (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
US20220413818A1 (en) Method and apparatus for functional unit balancing at program compile time
KR102267920B1 (ko) 매트릭스 연산 방법 및 그 장치
US9606779B2 (en) Data processing system and data simulation method in the system
KR102168175B1 (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
CN113704687B (zh) 一种张量计算运行方法、装置及运算系统
Bernstein et al. Usable assembly language for GPUs: a success story
KR102185280B1 (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102197071B1 (ko) 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
CN117707624A (zh) 任务执行系统、方法、处理装置、电子设备及存储介质
Hernandez et al. Asynchronous in situ processing with gromacs: taking advantage of GPUs
HOTA et al. A GENERALIZED VECTORIZATION MECHANISM FOR VTK-M
Arai et al. Improving Stream Buffer Management of Stream-Based Computing Platform on GPU

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