KR20140135024A - 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법 - Google Patents

코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법 Download PDF

Info

Publication number
KR20140135024A
KR20140135024A KR1020130055256A KR20130055256A KR20140135024A KR 20140135024 A KR20140135024 A KR 20140135024A KR 1020130055256 A KR1020130055256 A KR 1020130055256A KR 20130055256 A KR20130055256 A KR 20130055256A KR 20140135024 A KR20140135024 A KR 20140135024A
Authority
KR
South Korea
Prior art keywords
stack
loop
merging
processing
code
Prior art date
Application number
KR1020130055256A
Other languages
English (en)
Other versions
KR101813140B1 (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 KR1020130055256A priority Critical patent/KR101813140B1/ko
Priority to US14/230,462 priority patent/US9280330B2/en
Publication of KR20140135024A publication Critical patent/KR20140135024A/ko
Application granted granted Critical
Publication of KR101813140B1 publication Critical patent/KR101813140B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하기 위한 것으로, 워크 아이템 합체 기법에 따라 프로그램 코드를 합체 루프로 변환하고, 스택에 합체 루프의 보존이 필요한 처리 결과를 보존할 수 있도록 합체 루프를 변환하여 실행하는 코드 실행 장치 및 코드 실행 방법을 제공함으로써, 정적 메모리 할당 시스템에서 메모리를 효율적으로 관리한다.

Description

코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법{APPARATUS FOR CODE EXECUTION AND METHOD FOR CODE EXECUTION USING THE APPARATUS FOR CODE EXECUTION}
프로그램 코드의 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법에 관한 것이다.
병렬적인 실행 환경을 가지지 못한 구조(Architecture)의 프로세서에서는 병렬성을 가진 프로그램 코드를 직렬화하여 처리하여야 한다. 이러한 프로그램 코드의 직렬화의 한 방법으로 워크 아이템 합체(Work-item Coalescing) 기법이 있다.
워크 아이템 합체 방법은 하나의 워크 그룹(work-group)내에 있는 모든 워크 아이템(work-item)의 실행을 하나의 연산 유닛에서 처리 가능하도록 합체 루프(coalescing loop)로 변환한다. 즉, 프로그램 코드의 직렬화로 인하여 프로그램 코드의 실행 순서가 변경되어 예상치 못한 결과가 발생하는 것을 방지하기 위해 배리어 함수(barrier function)를 기준으로 분할된 복수 개의 코드 영역 각각을 합체 루프로 변환하여 프로세서에게 연산의 순서를 강제한다.
한편, 워크 아이템 합체 방법은 배리어 함수 전에 생성된 값은 해당 합체 루프 안에서만 쓰이고 합체 루프 실행이 끝난 후는 값이 보존되는 것을 보장할 수 없다. 따라서, 합체 루프를 수행할 때마다 동적 메모리 할당(malloc)을 이용하여 힙(heap) 구조로 보존이 필요한 값을 저장한다.
다만, 워크 아이템 합체 방법은 동적 메모리 할당(malloc)과 회수(free)를 위한 오버헤드가 발생하며, 동적 메모리 할당이 불가능한 구조의 프로세서에는 보존의 필요한 값의 저장을 위해서 메모리가 낭비된다.
워크 아이템 합체(Work-item Coalescing) 기법에 따라 생성된 합체 루프의 처리 값을 스택에 보존하여 실행할 수 있도록 프로그램 코드를 변환하여 실행하는 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법에 관한 것이다.
본 발명의 일 양상에 따른 코드 실행 장치는 보전이 필요한 처리 값을 저장하기 위한 스택(Stack)을 메모리에 할당하는 메모리 관리부와, 배리어 함수(Barrier Function)를 기준으로 프로그램 코드의 영역을 분할하고, 스택에 보전이 필요한 처리 값을 가진 영역을 제1 합체 루프로 변환하고, 스택에 저장된 처리 값을 사용하는 영역을 제2 합체 루프로 변환하는 루프 생성부와, 제2 합체 루프의 처리 순서를 제1 합체 루프의 처리 순서와 역순으로 변경하는 루프 변환부를 포함한다. 이때, 프로그램 코드는 오픈 씨엘(Open CL)로 작성된 것일 수 있다.
또한, 코드 실행 장치는 제1 합체 루프의 보존이 필요한 처리 값을 스택에 저장하고, 제1 합체 루프의 처리가 종료되면 스택에 저장된 처리 값을 출력하여 제2 합체 루프를 처리하는 루프 처리부를 더 포함할 수 있다.
여기서, 루프 변환부는 제1 합체 루프에 처리 값을 스택에 저장하기 위한 푸쉬(Push) 코드를 삽입하고, 제2 합체 루프에 스택에 저장된 처리 값을 출력하기 위한 팝(Pop) 코드를 삽입할 수 있다.
또한, 메모리 관리부는 스택을 메모리에 정적으로 할당할 수 있다. 메모리 관리부는 스택에 저장되는 처리 값의 크기를 기반으로 생성될 스택의 크기를 결정할 수 있다. 메모리 관리부는 동시에 보존이 필요한 처리 값을 가지는 제1 합체 루프 개수를 검출하고, 검출된 제1 합체 루프의 개수만큼의 스택을 생성할 수 있다. 메모리 관리부는 스택이 복수 개인 경우, 제1 합체 루프의 처리 값을 저장할 스택을 결정하는 스택 관리 모듈을 더 포함할 수 있다.
한편, 프로그램 코드는 오픈 씨엘(Open CL)로 작성된 것일 수 있다.
본 발명의 일 양상의 코드 실행 방법은 배리어 함수(Barrier Function)를 기준으로 프로그램 코드의 영역을 분할하고, 보전이 필요한 처리 값을 가진 영역을 제1 합체 루프로 변환하고, 제1 합체 루프의 처리 값을 사용하는 영역을 제2 합체 루프로 변환하는 단계와, 제 2합체 루프의 처리 순서를 제1 합체 루프의 처리 순서와 역순으로 변경하는 단계와, 제1 합체 루프에 푸쉬(Push) 코드를 삽입하고, 제2 합체 루프에 팝(Pop) 코드를 삽입하는 단계를 포함한다.
코드 실행 방법은 제1 합체 루프의 보전이 필요한 처리 값을 저장하기 위한 스택(Stack)을 메모리에 할당하는 단계를 더 포함할 수 있다.
아울러, 제1 합체 루프의 푸쉬 코드가 실행되면 스택에 처리 값을 저장하는 단계와, 제1 합체 루프의 처리가 종료되고 제2 합체 루프의 팝 코드가 실행되면 스택에 저장된 처리 값을 출력하여 제2합체 루프를 처리하는 단계를 더 포함할 수 있다.
한편, 처리 값을 저장하기 위한 복수 개의 스택이 있는 경우, 스택에 처리 값을 저장하는 단계는 복수 개의 스택 가운데 스택에 처리 값을 저장하기 위한 스택을 결정하는 단계를 더 포함할 수 있다.
또한, 스택을 메모리에 할당하는 단계는 보존이 필요한 처리 값의 크기를 기반으로 생성될 스택의 크기를 결정하는 단계를 더 포함하고, 스택은 결정된 크기로 할당될 수 있다. 스택을 메모리에 할당하는 단계는 동시에 보존되어야 할 처리 값을 가지는 제1 합체 루프의 개수를 검출하는 단계를 더 포함하고, 검출된 제1 합체 루프의 개수만큼 스택을 할당될 수 있다. 아울러, 스택을 메모리에 할당하는 단계는 스택을 메모리에 정적으로 할당할 수 있다.
또한, 변환된 프로그램 코드의 실행이 종료되면, 메모리에 할당된 스택을 해제하는 단계를 더 포함할 수 있다.
상기의 실시 예에 따르면, 코드 변환을 통해 병렬 실행되도록 작성된 프로그램 코드를 직렬 처리할 수 있게 함으로써, 병렬 처리가 어려운 구조의 프로세서에도 병렬 실행되도록 작성된 프로그램 코드를 실행할 수 있게 한다.
아울러, 지정된 메모리 일부 영역에 정적으로 할당된 스택을 이용하여 합체 루프의 처리 값 중 보존이 필요한 처리 값을 저장함으로써, 동적 메모리 할당에 따른 오버헤드를 방지할 수 있으며, 별도의 동적 메모리 회수에 따른 오버헤드 또한 방지할 수 있다.
또한, 각 합체 루프 별로 보존이 필요한 처리 값을 저장하기 위한 메모리 공간을 별로도 지정하지 않아도 스택을 재사용하여 복수 개의 합체 루프의 처리 값을 보전 할 수 있음으로써, 동적 메모리 할당을 지원하지 않는 구조의 프로세서에서도 효율적으로 메모리를 관리할 수 있게 한다.
도 1은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하는 시스템 구조의 일 예를 나타내는 블럭도이다.
도 2는 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하기 위한 코드 실행 장치의 일 예를 나타내는 블록도이다.
도 3은 병렬 처리되도록 작성된 프로그램 코드를 워크 아이템 합체 기법에 따라 직렬 처리가 가능한 형태로 변환하는 일 예를 나타내는 도면이다.
도 4는 메모리에 할당되는 스택을 설명하기 위한 도면이다.
도 5은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환하는 코드 변환 방법의 설명하기 위한 순서도이다.
도 6는 도 5은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환하는 코드 변환 방법의 일 예를 설명하기 위한 도면이다.
도 7은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환된 코드 실행 방법을 설명하기 위한 순서도이다.
전술한, 그리고 추가적인 발명의 양상들은 후술하는 실시예들을 통해 명백해질 것이다. 본 명세서에서 사용되는 용어들은 실시예에서의 기능을 고려하여 선택된 용어들로서, 그 용어의 의미는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 후술하는 실시예들에서 사용된 용어의 의미는, 본 명세서에 구체적으로 정의된 경우에는 그 정의에 따르며, 구체적인 정의가 없는 경우는 통상의 기술자들이 일반적으로 인식하는 의미로 해석되어야 할 것이다.
아울러, 본 명세서에서 선택적으로 기재된 양상이나 선택적으로 기재된 실시예의 구성들은 비록 도면에서 단일의 통합된 구성으로 도시되었다 하더라도 달리 기재가 없는 한 통상의 기술자에게 기술적으로 모순인 것이 명백하지 않다면 상호간에 자유롭게 조합될 수 있는 것으로 이해하여야 한다.
도 1은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하는 시스템 구조의 일 예를 나타내는 블럭도이다.
도 1을 참조하면, 프로세서(10)는 메모리(20)에 저장된 데이터를 인출하여 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행한다. 이때, 프로그램 코드는 여러 중앙처리장치(Central Processing Unit), 그래픽처리장치(Graphics Processing Unit) 및 기타 프로세서(10) 등으로 이루어진 다중 플랫폼에서 구동되는 개방형 범용 컴퓨팅 프레임워크인 오픈 씨엘(Open Computing Language, 이하 Open CL)로 작성된 소스 코드일 수 있다.
병렬 처리되도록 작성된 프로그램 코드는 하나 이상의 코드 영역을 포함한다. 각 코드 영역은 프로세서(10)에 의하여 병렬 처리되어야 하는 복수 개의 워크 아이템(Work-item)을 가진다. 워크 아이템은 하나 이상의 하나 이상의 스테이트먼트(Statement)를 포함한다. 따라서, 프로세서(10)의 프로세서 엘리먼트(11)의 개수가 프로그램 코드의 병렬 처리되어야 하는 복수 개의 워크 아이템 개수보다 적은 경우, 프로세서(10)는 병렬 처리되어야 하는 복수 개의 워크 아이템을 직렬 처리가 가능한 형태로 변환하여 순차적으로 워크 아이템을 처리한다. 예를 들어, 10개의 워크 아이템을 동시에 병렬 처리되도록 작성된 프로그램 코드를 2개의 프로세서 엘리먼트(11)를 가진 프로세서(10)가 처리하는 경우, 프로세서(10)는 10개의 워크 아이템이 2개 프로세서 엘리먼트(11)에서 처리될 수 있도록 각 코드 영역을 합체 루프로 변환하여 처리하게 된다.
이하 설명의 편의를 위하여, 보존되어야 할 처리 값을 가진 합체 루프를 제1 합체 루프, 스택(Stack)에 보존된 처리 값을 출력하여 사용하는 합체 루프를 제2 합체 루프라 한다. 이때, 보존되어야 할 처리 값은 제1 합체 루프의 하나 이상의 처리 결과 중 제2 합체 루프에 의하여 사용되기 위해 저장되어야 하는 처리 값을 말한다. 이하, 보존되어야 할 처리 값은 하나인 것으로 설명하나, 합체 루프는 복수 개의 처리 값을 저장할 수 있다. 또한, 제1 합체 루프, 제2 합체 루프를 나누어서 설명하나 보존되어 있는 처리 값을 사용하여 보존되어야 할 처리 값을 도출하는 합체 루프의 경우 제1 합체 루프이자 제2 합체 루프일 수 있음을 이해하여야 한다.
아울러, 일 예에 따른 시스템이 동적 메모리 할당을 지원하지 않는 경우, 메모리(20)에 정적으로 스택을 할당하고, 직렬 처리가 가능한 형태로 변환된 프로그램 코드를 실행한다. 이때, 스택에 저장되어 있던 합체 루프의 처리 값이 모두 사용되면, 스택은 다른 합체 루프의 처리 값을 저장할 수 있다. 이와 같이 스택을 재할용 함으로써, 각 합체 루프마다 처리 값을 저장하기 위한 메모리(20)를 할당하지 않아도 됨으로써, 메모리(20)를 효율적으로 사용할 수 있다.
한편, 도 1은 메모리(20)는 프로세서(10) 외부에 있는 것으로 도시되어 있으나, 경우에 따라서는 프로세서(10) 내부에도 위치할 수 있다. 아울러, 메모리(20)는 주기억 장치뿐만 아니라 엘원 캐시(L1 cache), 엘투 캐시(L2 cache), 또는 가상 메모리 등과 같이 보존이 필요한 처리 결과를 저장할 수 있는 장치를 모두 포함하는 넓은 개념으로 이해하여야 한다.
도 2는 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하기 위한 코드 실행 장치의 일 예를 나타내는 블록도이다.
이하 도2를 참조하여, 도 1에 개시된 것과 같이 프로그램 코드를 직렬 처리가 가능한 형태로 변환하여 실행하는 시스템에 있어서, 코드 실행 장치(200)에 대하여 설명한다. 여기서, 코드 실행 장치(200)는 프로세서(도 1 참조)의 일부 엘리먼트에 의하여 구현될 수 있으며, 복수 개의 프로세서를 가진 경우 하나의 프로세서에 의하여 구현될 수 있으며, 여러 개의 프로세서에 의해서도 구현될 수 있다.
도 2를 참조하면, 코드 실행 장치(200)는 루프 생성부(230), 루프 변환부(250), 메모리 관리부(210), 루프 처리부(270)를 포함한다.
도 3은 병렬 처리되도록 작성된 프로그램 코드를 워크 아이템 합체 기법에 따라 직렬 처리가 가능한 형태로 변환하는 일 예를 나타내는 도면이다.
루프 생성부(230)는 병렬 처리되도록 작성된 프로그램 코드를 워크 아이템 합체 기법에 따라 직렬 처리가 가능한 형태로 변환한다. 루프 생성부(230)는 배리어 함수를 기준으로 프로그램 코드의 영역을 복수 개의 코드 영역으로 분할하고, 복수 개의 코드 영역 각각을 합체 루프로 변환한다.
도 3을 참조하여 루프 생성부(230)의 워크 아이템 합체 기법에 따른 직렬 처리가 가능한 형태로 변환을 더 상세히 설명한다. 도 3a는 루프 생성부(230)에 의하여 변환되기 전의 프로그램 코드를 나타내는 도면이다. 도 3a를 참조하면, 프로그램 코드는 배리어 함수 및 배리어 함수에 의해 구분되는 코드 영역으로 구성되어 있다. 각 코드 영역은 프로세서에서 병렬 처리되는 복수 개의 워크 아이템을 포함한다. 이때, 워크 아이템은 하나 이상의 스테이트먼트를 포함할 수 있다. 배리어 함수는 동시에 병렬 처리되는 복수 개의 워크 아이템을 동기화하여 프로그램 코드가 순차적으로 실행될 수 있게 한다. 즉, 배리어 함수는 병렬 처리되는 복수 개의 워크 아이템의 처리가 모두 종료되기 이전에 다음 코드 영역이 처리되는 것을 방지한다. 이와 같은 워크 아이템 동기화를 통해 프로그램 코드가 병렬 처리되더라도 순차적으로 처리될 수 있게 한다.
도 3b는 루프 생성부(230)에 직렬 처리가 가능한 형태로 변환된 프로그램 코드를 나타내는 도면이다. 도 3을 참조하면, 루프 생성부(230)는 배리어 함수로 프로그램 코드를 복수 개의 코드 영역으로 분할하고, 각 코드 영역을 합체 루프로 변환한다. 이때, 합체 루프는 각 코드 영역의 복수 개의 워크 아이템이 프로세서 엘리먼트에서 직렬 처리될 수 있도록, 워크 아이템을 루프로 묶은 것이다. 이와 같이 워크 아이템을 루프로 묶어 처리함으로 인하여 발생하는 문맥 교환, 스테이트먼트 호출 등의 오버헤드를 줄일 수 있다. 한편, 합체 루프는 3중 루프일 수 있다.
도 4는 메모리에 할당되는 스택을 설명하기 위한 도면이다.
다시 도 2를 참조하면, 메모리 관리부(210)는 보존이 필요한 값을 저장하기 위한 스택을 메모리 할당한다. 메모리 관리부(210)는 메모리의 특정 영역을 제1 합체 루프의 처리 값을 저장하기 위한 스택으로 할당한다. 메모리 관리부(210)는 스택을 정적으로 메모리에 할당할 수 있다. 따라서, 개별적인 합체 루프의 처리에 앞서 보존이 필요한 데이터를 저장하기 위한 메모리를 동적으로 할당할 필요가 없음으로 동적 메모리 할당으로 인한 오버헤드를 줄일 수 있다.
메모리 관리부(210)는 스택에 저장될 제1 합체 루프의 처리 값의 크기를 기반으로 스택의 크기를 결정할 수 있다. 스택 크기는 스택에 처리 값을 저장하는 복수 개의 제1 합체 루프 중 가장 큰 처리 값 이상의 크기를 가진다. 도 4을 참조하여 예를 들면, 스택에 저장되는 각 처리 값 a의 크기가 8byte 인 경우, 1000개를 처리 값을 저장하기 위하여 스택은 8Kbyte의 크기를 가질 수 있다. 스택에 저장된 처리 값 스택에 저장된 8Kbyte 의 처리 값이 모두 출력된 이후, 스택에 10byte 크기의 다른 합체 루프의 처리 값 b가 1000개를 저장되는 경우라면 스택은 10Kbyte의 크기를 할당되어 처리 값 b도 저장할 수 있는 크기로 생성된다.
메모리 관리부(210)는 생성될 스택의 개수를 결정할 수 있다. 메모리 관리부(210)는 동시에 처리 값을 저장하여야 할 제1 합체 루프의 개수를 검출하고, 검출된 합체 루프 개수를 기반으로 생성할 스택의 개수를 결정할 수 있다. 도 4를 참조하여 예를 들면, 제2 합체 루프가 복수 개의 제1 합체 루프의 처리 값 a, b를 사용하는 경우, 스택 관리부는 2개(410, 420)의 스택을 메모리(400)에 할당할 수 있다. 또는, 스택에 저장된 제1 합체 루프의 처리 값 a을 팝하여 처리하는 제2 합체 루프의 처리 값 b가 보존되어야 하는 경우, 스택 관리부는 2개의 스택(410, 420)을 메모리(400)에 할당할 수 있다. 이때, 하나의 스택(420)은 제1 합체 루프의 처리 값 a를 저장하는 용도로, 다른 하나의 스택(410)은 제2 합체 루프의 처리 값 b를 저장하는 용도로 사용된다. 한편, 제1 합체 루프의 처리 값을 저장하고 있던 스택의 처리 값이 모두 출력되어 사용된 이후, 다른 합체 루프의 처리 값을 저장할 수 있음을 이해하여야 한다.
메모리 관리부(210)는 제1 합체 루프의 처리 값을 보전하기 위한 스택을 결정하는 스택 관리 모듈을 더 포함할 수 있다. 스택 관리 모듈은 합체 루프의 처리 값을 저장하기 위한 스택이 여러 개 생성되어 있는 경우, 합체 루프 처리 결과를 저장하기 위한 스택을 결정한다. 이를 위해, 스택 관리 모듈은 각 스택의 입출력 데이터를 모니터링할 수 있다.
루프 변환부(250)는 메모리 관리부(210)에 의해 생성된 스택에 합체 루프 처리 결과를 보존하고, 스택에 보존된 합체 루프 처리 결과를 출력하여 사용할 수 있도록 각 합체 루프를 변환한다. 더 구체적으로, 선입 후출의 스택의 입출력 스케줄링 특성을 때문에, 메모리 관리부(210)는 제2 합체 루프의 처리 순서를 제1 합체 루프의 처리 순서와 반대로 변환한다. 즉, 처음 스택에 입력된 처리 값이 마지막에 출력되고, 마지막에 입력된 처리 값이 처음 출력됨으로, 제2 합체 루프의 처리 순서를 제1 합체 루프와 역순으로 변경하여야 한다.
또한, 루프 변환부(250)는 제1 합체 루프에 스택에 보존이 필요한 처리 값을 저장하기 위한 푸쉬(Push) 코드를 삽입하고, 제2 합체 루프에 스택에 보존된 처리 값을 출력하기 위한 팝(Pop) 코드를 삽입힌다.
루프 처리부(270)는 루프 변환부(250)에 의하여 변환된 합체 루프를 순서대로 처리한다. 더 구체적으로 제1 합체 루프를 처리한다. 이때, 제1 합체 루프의 처리 값 중 보존이 필요한 처리 값을 스택에 저장하기 위한 푸쉬 코드를 만나면, 해당 처리 결과를 스택에 저장하게 된다. 제1 합체 루프가 종료되면, 루프 처리부는 제2 합체 루프를 처리한다. 제2 합체 루프의 처리 중 팝 코드를 만나면, 스택의 저장된 처리 값을 출력하고, 이를 사용하여 계속하여 합체 루프를 처리하게 된다. 이와 같이 합체 루프의 처리 결과를 스택에 저장함으로써, 각 합체 루프의 처리에 있어서 동적 메모리 할당으로 인한 오버헤드를 방지할 수 있다. 아울러, 동적 메모리 할당을 지원하니 않는 장치에서 워크 아이템 합체 기법에 따라 직렬 처리 가능하도록 변환된 프로그램 코드를 실행함에 있어서도, 저장이 필요한 합체 루프 처리 값 별로 메모리를 할당할 필요가 없어짐으로 메모리를 효율적으로 사용할 수 있게 한다.
도 5은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환하는 코드 변환 방법의 설명하기 위한 순서도이다.
도 6는 도 5은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환하는 코드 변환 방법의 일 예를 설명하기 위한 도면이다.
도 5를 참조하면, 코드 실행 장치는 S101 단계에서 프로그램 코드를 합체 루프로 변환한다. 이때, 코드 실행 장치는 배리어 함수를 기준으로 프로그램 코드의 영역을 복수 개의 코드 영역으로 분할한다. 여기서, 배리어 함수는 병렬 처리되는 복수 개의 워크 아이템의 처리가 모두 종료되기 이전에 다음 코드 영역이 처리되는 것을 방지하는 함수이다. 이와 같이 배리어 함수를 기준으로 분할함으로써, 병행 처리되는 복수의 워크 아이템을 그룹별로 분리할 수 있다. 코드 실행 장치는 분할된 복수 개의 코드 영역을 합체 루프로 변환한다. 이와 같이 병행 처리되는 복수의 워크 아이템을 하나의 루프로 묶어 합체 루프를 형성함으로써, 워크 아이템 직렬 처리로 인한 오버헤드를 줄일 수 있다.
도 5, 6a를 참조하여 예를 들면, 코드 실행 장치는 S101 단계에서 3개의 배리어 함수가 포함된 프로그램 코드를 배리어 함수를 기준으로 4개의 코드 영역으로 분할하고, 각 코드 영역을 합체 루프(610a, 630a, 650a, 670a)로 변환한다. 한편, 각 코드 영역에서 병렬 처리되어야 할 100개의 워크 아이템을 하나의 합체 루프로 변환함으로써, 병렬 처리되어야 할 프로그램 코드는 직렬 처리가 가능한 형태로 변환되어 처리된다. 이때, 합체 루프에서 처리되는 복수 개의 워크 아이템은 병렬 처리되도록 설계된 것으로 각 워크 아이템의 처리 결과는 다른 워크 아이템에 영향을 미치지 않음으로 합체 루프로 변경하더라도 각 코드 영역의 처리 결과에 영향을 미치지 않음을 이해하여야 한다.
다시 도 5를 참조하면, 코드 실행 장치는 S103단계에서 합체 루프의 처리 순서를 변경한다. 코드 실행 장치는 보존되어야 할 처리 값을 가진 제1 합체 루프와 보존된 제1 합체 루프의 처리 값을 사용할 제2 합체 루프로 합체 루프로 분류한다. 이후 코드 실행 장치는 제2 합체 루프의 처리 순서를 제1 합체 루프의 처리 순서와 역순이 되도록 변경한다. 이와 같은 루프의 처리 순서 변경을 통해, 제2 합체 루프가 스택에 저장된 처리 값을 팝하여 워크 아이템을 처리 할 수 있게 한다.
도 5, 6b를 참조하여 예를 들면, 코드 실행 장치는 S103 단계에서 제2 합체 루프의 처리 순서를 제1 합체 루프의 처리 순서와 역순으로 변경한다. 630b는 제1 합체 루프 630a의 처리 순서와 역순으로 변경된다. 그러나, 650b는 제1 합체 루프인 630b의 처리 순서가 이미 역순으로 변경되어, 루프의 처리 순서를 변경할 필요가 없다. 한편, 이와 같이 합체 루프가 보존된 값을 사용하여 새로운 보존이 필요한 처리 값을 가지는 경우, 합체 루프는 제1 합체 루프 및 제2 합체 루프 모두에 해당할 수 있다. 한편, 합체 루프에서 처리되는 복수 개의 워크 아이템은 병렬 처리되도록 설계된 것으로 각 워크 아이템의 처리 결과는 다름 워크 아이템에 영향을 미치지 않음으로 합체 루프의 처리 순서를 변경하더라도 각 코드 영역의 처리 결과에 영향을 미치지 않음을 이해하여야 한다.
다시 도 5를 참조하면, 코드 실행 장치는 S105단계에서 합체 루프의 스택 입출력 제어를 위한 코드를 삽입힌다. 코드 실행 장치는 제1 합체 루프에 스택에 보존이 필요한 처리 값을 저장하기 위한 푸쉬 코드를 입력하고, 제2 합체 루프에 스택에 보존된 처리 값을 출력하기 위한 팝 코드를 삽입한다.
도 6c를 참조하여 예를 들면, 코드 실행 장치는 보전이 필요한 처리 값을 가진 합체 루프 610c, 630c, 650c는 각각 보존될 값을 저장하기 위한 푸쉬 코드 push(a), push(b), push(c)를 삽입한다. 그리고, 코드 실행 장치는 보전된 처리 값을 사용하는 합체 루프 630c, 650c, 670c에는 각각 스택에 보존될 값을 출력하기 위한 팝 코드 pop(a), pop(b), pop(c)를 삽입한다.
다시 도 5를 참조하면, 코드 실행 장치는 S107단계에서 메모리에 합체 루프의 처리 값을 저장하기 위한 스택을 생성한다. 코드 실행 장치는 제1 합체 루프의 보존이 필요한 값을 저장하기 위한 스택을 메모리에 할당한다. 이때, 스택은 정적으로 할당될 수 있다. 이와 같이 합체 루프 처리 이전에 정적으로 스택을 할당함으로써, 코드 실행 장치는 프로그램 수행 중에 동적으로 제1 합체 루프의 처리 값을 저장하기 위한 메모리 할당, 해제로 발생하는 오버헤드를 줄일 수 있다.
아울러, 코드 실행 장치는 S107 단계에서 메모리에 할당될 스택의 크기를 결정하는 단계를 더 포함할 수 있다(미도시). 이때, 코드 실행 장치는 제1 합체 루프에서 보존이 필요한 처리 값의 전체 크기를 고려하여 스택의 크기를 결정할 수 있다. 도 6a를 참조하여 예를 들면, 각 합체 루프는 100개의 처리 값을 가진다. 따라서, 스택은 각 처리 값을 100개 저장할 수 있는 크기로 할당되어야 한다. 아울러, 610c 합체 루프의 각 처리 값의 크기가 4byte, 630c 합체 루프의 각 처리 값의 크기가 5byte, 650c 합체 루프의 각 처리 값의 크기가 6byte인 경우, 스택은 650c 합체 루프의 처리 값도 저장 가능하도록 600byte 이상의 크기로 할당된다.
또한, 코드 실행 장치는 S107 단계에서 메모리에 할당될 스택의 개수를 결정하는 단계를 더 포함할 수 있다(미도시). 코드 실행 장치는 동시에 처리 값을 저장하여야 할 제1 합체 루프의 개수를 검출하고, 검출된 합체 루프 개수를 기반으로 생성할 스택의 개수를 결정할 수 있다. 도 5, 6a를 참조하여 예를 들면, 합체 루프 630c는 스택에 저장된 합체 루프 610c의 처리 값 a를 출력하여, 이를 기반으로 산출된 처리 값b를 스택에 저장하여야 한다. 따라서, 동시에 2개의 스택이 필요한 것으로 결정하고, 2개의 스택을 생성할 수 있다.
한편, 도 6의 각 단계는 순서대로 진행되는 것으로 도시되어 있으나, 각 단계의 순서는 변경될 수 있으며, 각 단계는 한번에 진행될 수 있음을 이해하여야 한다.
도 7은 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능한 형태로 변환된 코드 실행 방법을 설명하기 위한 순서도이다.
앞서 도 6에서 설명한 것과 같이 병렬 처리되도록 작성된 프로그램 코드를 직렬 처리 가능하도록 변환한 코드가 실행되는 순서를 상세히 설명하기 위한 도면이다. 비록 도 7에는 도시되어 있지 않으나, 병렬 처리되도록 작성된 프로그램 코드가 도 6의 코드 변환 방법에 따라 변환된 이후의 코드 실행 방법을 설명하는 것으로 이해하여야 한다. 또한, 도 7은 설명의 이해를 돕기 위하여 제1, 2 합체 루프의 처리 과정만을 설명하나, 동일한 원리에 의하여 더 많은 합체 루프의 처리도 가능하다는 것을 이해하여야 한다.
S201 단계에서, 코드 실행 장치는 제1 합체 루프의 워크 아이템을 처리한다. 제1 합체 루프의 워크 아이템을 실행된 이후 S203 단계에서, 코드 실행 장치는 보존이 필요한 처리 값을 스택에 푸쉬한다. 이후 S205 단계에서, 코드 실행 장치는 제1 합체 루프가 종료되었는지 판단하다. 이때, 제1 합체 루프의 워크 아이템이 모두 처리되어 않아 제1 합체 루프가 종료되지 않은 것으로 판단되면, S201단계로 분기하여 코드 실행 장치는 제1 합체 루프를 계속 처리한다. 한편, 도 7에는 도시되지 않았으나 복수 개의 스택이 할당된 경우, 코드 실행 장치는 제1 합체 루프의 처리 값을 저장하기 위한 스택을 결정하는 단계를 더 포함할 수 있다.
한편, 제1 합체 루프의 워크 아이템이 모두 처리되어 제1 합체 루프가 종료된 것으로 판단되면, S207 단계로 분기하여, 스택에 푸쉬된 처리 값을 팝한다. 이후, S209 단계에서 팝한 처리 값을 기반으로 제2 합체 루프의 워크 아이템을 처리한다. 이후 S211 단계에서, 제2 합체 루프라 종료되었는지 판단한다. 즉, 제2 합체 루프의 워크 아이템이 모두 처리 되었는지 판단한다. 이때, 처리되지 않은 제2 합체 루프의 워크 아이템이 남아 있는 종료되지 않은 경우 S207단계로 분기하여 제2 합체 루프를 계속 처리하고, 제2 합체 루프의 워크 아이템이 모두 처리되어 제2 합체 루프가 종료된 경우 코드 실행을 종료한다.
예를 들어, 도 6c와 같이 변환된 코드가 실행되면, 코드 실행 장치는 합체 루프 610c의 워크 아이템을 처리하고, 보존이 필요한 처리 값a를 스택에 푸쉬하여 저장하는 동작을 100번(1 -> 100)을 반복하여 수행한다.
이후, 스택에 보존된 처리 값을 팝하여, 합체 루프 630c의 워크 아이템을 처리하는 동작을 100번(100->1) 반복하여 수행한다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에서 다양한 수정, 변경 및 치환이 가능할 것이다. 따라서, 본 발명에 개시된 실시예 및 첨부된 도면들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예 및 첨부된 도면에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
10: 프로세서
11: 프로세서 엘리먼트
13: 레지스터
20: 메모리
200: 코드 실행 장치
210: 메모리 관리부
230: 루프 생성부
250: 루프 변환부
270: 루프 처리부

Claims (17)

  1. 보전이 필요한 처리 값을 저장하기 위한 스택(Stack)을 메모리에 할당하는 메모리 관리부;
    배리어 함수(Barrier Function)를 기준으로 프로그램 코드의 영역을 분할하고, 상기 스택에 보전이 필요한 처리 값을 가진 영역을 제1 합체 루프로 변환하고, 상기 스택에 저장된 처리 값을 사용하는 영역을 제2 합체 루프로 변환하는 루프 생성부;
    상기 제2 합체 루프의 처리 순서를 상기 제1 합체 루프의 처리 순서와 역순으로 변경하는 루프 변환부;
    를 포함하는 코드 실행 장치.
  2. 제1항에 있어서,
    상기 제1 합체 루프의 보존이 필요한 처리 값을 상기 스택에 저장하고, 상기 제1 합체 루프의 처리가 종료되면 상기 스택에 저장된 처리 값을 출력하여 상기 제2 합체 루프를 처리하는 루프 처리부를 더 포함하는 것을 특징으로 하는 코드 실행 장치.
  3. 제1항에 있어서,
    상기 루프 변환부는 상기 제1 합체 루프에 처리 값을 상기 스택에 저장하기 위한 푸쉬(Push) 코드를 삽입하고, 상기 제2 합체 루프에 상기 스택에 저장된 처리 값을 출력하기 위한 팝(Pop) 코드를 삽입하는 것을 특징으로 하는 코드 실행 장치.
  4. 제1항에 있어서,
    상기 메모리 관리부는 상기 스택을 메모리에 정적으로 할당하는 것을 특징으로 하는 코드 실행 장치.
  5. 제1항에 있어서,
    상기 메모리 관리부는 상기 스택에 저장되는 처리 값의 크기를 기반으로 상기 생성될 스택의 크기를 결정하는 것을 특징으로 하는 코드 실행 장치.
  6. 제1항에 있어서,
    상기 메모리 관리부는 동시에 상기 보존이 필요한 처리 값을 가지는 제1 합체 루프 개수를 검출하고, 상기 검출된 제1 합체 루프의 개수만큼의 스택을 생성하는 것을 특징으로 하는 코드 실행 장치.
  7. 제1항에 있어서,
    상기 메모리 관리부는 상기 스택이 복수 개인 경우, 상기 제1 합체 루프의 처리 값을 저장할 스택을 결정하는 스택 관리 모듈을 더 포함하는 것을 특징으로 하는 코드 실행 장치.
  8. 제1항에 있어서,
    상기 프로그램 코드는 오픈 씨엘(Open CL)로 작성된 것을 특징으로 코드 실행 장치.
  9. 배리어 함수(Barrier Function)를 기준으로 프로그램 코드의 영역을 분할하고, 상기 보전이 필요한 처리 값을 가진 영역을 제1 합체 루프로 변환하고, 상기 제1 합체 루프의 처리 값을 사용하는 영역을 제2 합체 루프로 변환하는 단계;
    상기 제 2합체 루프의 처리 순서를 상기 제1 합체 루프의 처리 순서와 역순으로 변경하는 단계; 및
    상기 제1 합체 루프에 푸쉬(Push) 코드를 삽입하고, 상기 제2 합체 루프에 팝(Pop) 코드를 삽입하는 단계;
    를 포함하는 코드 실행 방법.
  10. 제9항에 있어서,
    상기 제1 합체 루프의 보전이 필요한 처리 값을 저장하기 위한 스택(Stack)을 메모리에 할당하는 단계를 더 포함하는 것을 특징으로 코드 실행 방법.
  11. 제10항에 있어서,
    상기 제1 합체 루프의 푸쉬 코드가 실행되면 상기 스택에 처리 값을 저장하는 단계; 및
    상기 제1 합체 루프의 처리가 종료되고 상기 제2 합체 루프의 팝 코드가 실행되면 상기 스택에 저장된 처리 값을 출력하여 상기 제2합체 루프를 처리하는 단계를 더 포함하는 것을 특징으로 하는 코드 실행 방법.
  12. 제11항에 있어서,
    처리 값을 저장하기 위한 복수 개의 스택이 있는 경우, 상기 스택에 처리 값을 저장하는 단계는 상기 복수 개의 스택 가운데 상기 스택에 처리 값을 저장하기 위한 스택을 결정하는 단계를 포함하는 것을 특징으로 하는 코드 실행 방법.
  13. 제10항에 있어서,
    상기 스택을 메모리에 할당하는 단계는 상기 보존이 필요한 처리 값의 크기를 기반으로 상기 생성될 스택의 크기를 결정하는 단계를 더 포함하고,
    상기 스택은 상기 결정된 크기로 할당되는 것을 특징으로 하는 코드 실행 방법.
  14. 제10항에 있어서,
    상기 스택을 메모리에 할당하는 단계는 동시에 상기 보존되어야 할 처리 값을 가지는 제1 합체 루프의 개수를 검출하는 단계를 더 포함하고,
    상기 검출된 제1 합체 루프의 개수만큼 스택을 할당하는 것을 특징으로 하는 코드 실행 방법.
  15. 제10항에 있어서,
    상기 스택을 메모리에 할당하는 단계는 상기 스택을 메모리에 정적으로 할당하는 것을 특징으로 하는 코드 실행 방법.
  16. 제10항에 있어서,
    상기 변환된 프로그램 코드의 실행이 종료되면, 상기 메모리에 할당된 스택을 해제하는 단계를 더 포함하는 것을 특징으로 하는 코드 실행 방법.
  17. 제9항에 있어서,
    상기 프로그램 코드는 오픈 씨엘(Open CL)로 작성된 것을 특징으로 코드 실행 방법.

KR1020130055256A 2013-05-15 2013-05-15 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법 KR101813140B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020130055256A KR101813140B1 (ko) 2013-05-15 2013-05-15 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법
US14/230,462 US9280330B2 (en) 2013-05-15 2014-03-31 Apparatus and method for executing code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130055256A KR101813140B1 (ko) 2013-05-15 2013-05-15 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법

Publications (2)

Publication Number Publication Date
KR20140135024A true KR20140135024A (ko) 2014-11-25
KR101813140B1 KR101813140B1 (ko) 2018-01-30

Family

ID=51896884

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130055256A KR101813140B1 (ko) 2013-05-15 2013-05-15 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법

Country Status (2)

Country Link
US (1) US9280330B2 (ko)
KR (1) KR101813140B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9442706B2 (en) * 2014-05-30 2016-09-13 Apple Inc. Combining compute tasks for a graphics processing unit
US9619290B2 (en) * 2015-03-06 2017-04-11 Advanced Micro Devices, Inc. Hardware and runtime coordinated load balancing for parallel applications

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
KR20040044655A (ko) 2002-11-21 2004-05-31 한국전자통신연구원 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
WO2006095155A1 (en) 2005-03-11 2006-09-14 Transitive Limited Execution control during program code conversion
JP5165969B2 (ja) 2007-08-29 2013-03-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのコンパイルのために変数にレジスタを割り付ける技術
JP2011221656A (ja) 2010-04-06 2011-11-04 Hitachi Ltd 実行コードの生成方法、コンパイラ及びコンパイル装置

Also Published As

Publication number Publication date
KR101813140B1 (ko) 2018-01-30
US9280330B2 (en) 2016-03-08
US20140344793A1 (en) 2014-11-20

Similar Documents

Publication Publication Date Title
US7210129B2 (en) Method for translating programs for reconfigurable architectures
Busato et al. An efficient implementation of the Bellman-Ford algorithm for Kepler GPU architectures
CN106569891B (zh) 一种存储系统中任务调度执行的方法和装置
US7120903B2 (en) Data processing apparatus and method for generating the data of an object program for a parallel operation apparatus
US8225076B1 (en) Scoreboard having size indicators for tracking sequential destination register usage in a multi-threaded processor
US20130247067A1 (en) GPU Compute Optimization Via Wavefront Reforming
CN110597606B (zh) 一种高速缓存友好的用户级线程调度方法
JP7252694B2 (ja) ソフトウェア・ライブラリへの呼び出しをアクセラレータへの呼び出しに動的に置き換えるための装置及び方法
JP2018106760A (ja) ディペンデンシーを整理し、リビルディングするシステム及び方法
US11561826B1 (en) Scheduling processing of machine learning tasks on heterogeneous compute circuits
KR101813140B1 (ko) 코드 실행 장치 및 그 코드 실행 장치를 이용한 코드 실행 방법
Albalwi et al. Task Level Parallelization of All Pair Shortest Path Algorithm in OpenMP 3.0
US10747705B2 (en) On-chip accelerator management
Agullo et al. Dynamically scheduled Cholesky factorization on multicore architectures with GPU accelerators.
CN112783652A (zh) 当前任务的运行状态获取方法、装置、设备及存储介质
US20180081581A1 (en) Device and method for determining data placement destination, and program recording medium
Yeh et al. A circular pipeline processing based deterministic parallel test pattern generator
WO2014027444A1 (ja) スケジューリング装置、及び、スケジューリング方法
JP7383390B2 (ja) 情報処理ユニット、情報処理装置、情報処理方法及びプログラム
US20140040907A1 (en) Resource assignment in a hybrid system
Paredes et al. Exploiting parallelism and vectorisation in breadth-first search for the Intel xeon phi
US11366664B1 (en) Single instruction multiple data (simd) execution with variable width registers
Martín Álvarez et al. Efficient data redistribution for malleable applications
US20230409324A1 (en) Computer-readable recording medium storing arithmetic processing program and arithmetic processing method
CN110879744B (zh) 利用多线程执行计算图的方法和系统

Legal Events

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