KR20160071782A - 멀티 스레드를 처리하는 방법 및 장치 - Google Patents

멀티 스레드를 처리하는 방법 및 장치 Download PDF

Info

Publication number
KR20160071782A
KR20160071782A KR1020140179352A KR20140179352A KR20160071782A KR 20160071782 A KR20160071782 A KR 20160071782A KR 1020140179352 A KR1020140179352 A KR 1020140179352A KR 20140179352 A KR20140179352 A KR 20140179352A KR 20160071782 A KR20160071782 A KR 20160071782A
Authority
KR
South Korea
Prior art keywords
thread
threads
determined
loop
processing
Prior art date
Application number
KR1020140179352A
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 KR1020140179352A priority Critical patent/KR20160071782A/ko
Priority to US14/816,265 priority patent/US10296315B2/en
Publication of KR20160071782A publication Critical patent/KR20160071782A/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/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • 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/46Multiprogramming arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

복수개의 스레드들에서 루프를 검색하고, 검색된 루프 각각의 반복 횟수를 계산하고, 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정하고, 결정된 스레드의 일부를 자식 스레드(child thread)로 분할하고, 분할된 자식 스레드를 복수개의 스레드가 나누어 처리하는, 멀티 스레드를 처리하는 방법 및 장치가 개시된다.

Description

멀티 스레드를 처리하는 방법 및 장치{THE METHOD AND APPARATUS FOR PROCESSING MULTI THREAD}
멀티 스레드를 처리하는 방법 및 장치에 관한다.
그래픽스 시스템에서는 SIMT (Single-Instruction-Multiple-Thread) 모델이 사용되었는데, 데이터 하나 당 하나의 스레드를 할당하여 처리하는 방식이다. 이 경우 스레드들은 같은 코드를 사용하기 때문에 메모리에서 명령을 한 번 읽어 공유하여 사용할 수 있으며, 동시에 동작하기 때문에 프로세서 수에 비례하여 높은 성능을 얻을 수 있다. 또한 명령을 한 번 읽어 공유하기 위해 여러 스레드들이 동기화되어 함께 진행할 수 있다. 그러나 다른 요인으로 인해 바로 진행할 수 없는 경우 다른 스레드들로 전환하여 프로그램을 진행할 수 있다.
멀티 스레드를 처리하는 방법 및 장치에 관한다. 또한 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공한다. 해결하고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 또 다른 기술적 과제들이 존재할 수 있다.
일 측면에 따르면, 복수개의 스레드들에서 루프를 검색하는 단계, 검색된 루프 각각의 반복 횟수를 계산하는 단계, 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정하는 단계, 결정된 스레드의 일부를 자식 스레드(child thread)로 분할하는 단계, 및 분할된 자식 스레드를 복수개의 스레드가 나누어 처리하는 단계를 포함하는 멀티 스레드를 처리하는 방법을 개시한다.
또한, 처리된 각각의 스레드들을 리덕션하는 단계를 더 포함할 수 있다.
또한, 스레드를 결정하는 단계는 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정하는 단계 및 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정하는 단계를 포함할 수 있다.
또한 스레드를 결정하는 단계는 결정된 스레드의 순위가 가장 높은 스레드를 결정할 수 있다.
또한 스레드를 결정하는 단계는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다.
또한 스레드를 결정하는 단계는 결정된 스레드의 루프가 병렬적으로 리덕션(reduction)이 가능한지 여부를 결정하는 단계를 더 포함할 수 있다.
또한 분할하는 단계는 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다.
또한 분할하는 단계는 복수개의 스레드를 처리하고, 결정된 스레드를, 복수개의 스레드들 중 처리완료된 스레드의 자식 스레드로 분할할 수 있다.
또한, 리덕션한 결과를 출력할 수 있다.
다른 일 측면에 따르면, 복수개의 스레드들에서 루프를 검색하는 검색부, 검색된 루프 각각의 반복 횟수를 계산하는 계산부, 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정하는 스레드 결정부, 결정된 스레드의 일부를 자식 스레드로 분할하는 분할부 및 분할된 자식 스레드를 복수개의 스레드가 나누어 처리하는 처리부를 포함하는 멀티 스레드를 처리하는 장치를 개시한다.
또한 처리된 각각의 스레드들을 리덕션하는 리덕션부를 더 포함할 수 있다.
또한 스레드 결정부는 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정하고, 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다.
또한 스레드 결정부는 결정된 스레드의 순위가 가장 높은 스레드를 결정할 수 있다.
또한 스레드 결정부는, 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다.
또한 스레드 결정부는, 결정된 스레드의 루프가 병렬적으로 리덕션(reduction)이 가능한지 여부를 결정할 수 있다.
또한 분할부는, 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다.
또한 분할부는, 복수개의 스레드를 처리하고, 결정된 스레드를, 복수개의 스레드들 중 처리완료된 스레드의 자식 스레드로 분할할 수 있다.
또한 리덕션한 결과를 출력하는 출력부를 더 포함할 수 있다.
도 1은 일 실시 예에 따른 멀티 스레드를 처리하는 장치의 구성도를 도시한 도면이다.
도 2는 일 실시 예에 따른 멀티 스레드를 처리하는 방법의 흐름도를 도시한 도면이다.
도 3은 다른 실시 예에 따른 멀티 스레드를 처리하는 방법의 흐름도를 도시한 도면이다.
도 4 내지 도 8은 여러 가지 멀티 스레드를 처리하는 방법을 설명하기 위한 도면이다.
도 9 및 도 10은 또 다른 실시 예에 따른 멀티 스레드를 처리하는 방법을 설명하기 위한 도면이다.
도 11은 다른 실시 예에 따른 멀티 스레드를 처리하는 장치의 구성도를 도시한 도면이다.
도 12는 멀티 스레드를 처리하는 프로세서를 도시한 도면이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 명세서에서 사용되는 용어에 대해 간략히 설명하고, 본 발명에 대해 구체적으로 설명하기로 한다.
본 발명에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에서 사용되는 "부"라는 용어는 소프트웨어, FPGA 또는 ASIC과 같은 하드웨어 구성요소를 의미하며, "부"는 어떤 역할들을 수행한다. 그렇지만 "부"는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. "부"는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 "부"는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 및 변수들을 포함한다. 구성요소들과 "부"들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 "부"들로 결합되거나 추가적인 구성요소들과 "부"들로 더 분리될 수 있다.
아래에서는 첨부한 도면을 참고하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략한다.
도 1은 일 실시 예에 따른 멀티 스레드를 처리하는 장치의 구성도를 도시한 도면이다. 도 1을 참조하면 멀티 스레드를 처리하는 장치(100)는 검색부(110), 계산부(120), 스레드 결정부(130), 분할부(140) 및 실행부(150)를 포함할 수 있다.
검색부(110)는 복수개의 스레드들에서 루프를 검색한다. 스레드는 컴퓨터 프로그램 수행 시 프로세스 내부에 존재하는 수행 경로를 의미한다. 루프는 프로세서의 스레드에서 처리할 코드 중에서 반복적으로 처리해야할 부분을 의미한다. 예를 들어, 검색부(110)는 스레드에서 처리할 코드 중에 ‘for문’이 있는지를 검색할 수 있다.
계산부(120)는 검색된 루프 각각의 반복 횟수를 계산한다. 예를 들어, 계산부(120)는 스레드에서 처리할 코드 중에 ‘for문’이 몇 번 반복해서 수행하는지를 계산할 수 있다.
스레드 결정부(130)는 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정한다. 또한, 스레드 결정부(130)는 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정할 수 있다. 또한 스레드 결정부(130)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 예를 들어, 스레드 결정부(130)는 결정된 스레드의 순위가 가장 높은 스레드를 결정할 수 있다. 또다른 예로, 스레드 결정부(130)는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다. 스레드 결정부(130)는 결정된 스레드의 루프가 병렬적으로 리덕션이 가능한지 여부를 결정할 수 있다. 리덕션이란 스레드의 루프에서의 계산을 따로따로 수행한 뒤 병합하는 것을 말한다. 병렬적으로 리덕션이 가능하다는 것은, 한 개의 스레드의 루프에 속한 코드를 처리한 결과와, 한 개의 스레드의 루프에서 처리할 코드를 복수개의 스레드에서 나누어 처리한 뒤 병합한 결과가 동일하다는 것을 의미한다. 예를 들어, 덧셈, 곱셈, 최대값, 최소값 등의 연산이 리덕션이 가능한 연산이다. 스레드의 루프가 병렬적으로 리덕션이 불가능한 경우에는, 기존의 스레드를 처리한 결과와 스레드를 분할하여 처리한 결과가 다르게 되기 때문에 먼저 리덕션이 가능한지 여부를 결정할 필요가 있다.
분할부(140)는 결정된 스레드의 일부를 자식 스레드(child thread)로 분할한다. 자식 스레드란, 하나의 스레드가 처리해야할 루프를 분할한 스레드이다. 자식 스레드는 각각의 스레드에 할당될 수 있다. 각각의 스레드는, 각각의 스레드에 할당된 자식 스레드를 처리할 수 있다.
분할부(140)는 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드로 분할할 수 있다. 또한 분할부(140)는 복수개의 스레드를 처리하고, 결정된 스레드를 복수개의 스레드들 중 처리 완료된 스레드의 자식 스레드로 분할할 수 있다. 처리부(150)는 분할된 자식 스레드를 포함하는 각각의 스레드를 처리한다. 예를 들어 처리부(150)는 복수개의 스레드 각각의 코드를 처리하고 난 뒤 복수개의 스레드 각각에 포함된 자식 스레드의 코드를 처리할 수 있다.
도 2는 일 실시 예에 따른 멀티 스레드를 처리하는 방법의 흐름도를 도시한 도면이다.
단계 S200에서는 복수개의 스레드들에서 루프를 검색할 수 있다. 예를 들어, 장치(100)는 프로세서의 8개의 스레드중에서 0번 스레드, 1번 스레드, 2번 스레드, 3번 스레드에서 루프를 검색할 수 있다.
단계 S210에서는 검색된 루프 각각의 반복 횟수를 계산할 수 있다. 예를 들어, 장치(100)는 프로세서의 8개의 스레드 중에서 루프가 검색된 0번 스레드 내지 3번 스레드에 포함된 루프 각각의 반복 횟수를 계산할 수 있다. 즉, 0번 스레드는 반복횟수가 2번, 1번 스레드는 반복횟수가 3번, 2번 스레드는 반복횟수가 5번, 3번 스레드는 반복횟수가 4번일 수 있다.
단계 S220에서는 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정할 수 있다. 또한 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정할 수 있다. 예를 들어 0번 스레드는 반복 횟수가 2번, 1번 스레드는 반복 횟수가 3번, 2번 스레드는 반복 횟수가 5번, 3번 스레드는 반복 횟수가 4번일 경우, 장치(100)는 2번 스레드가 1순위, 3번 스레드가 2순위, 1번 스레드가 3순위, 0번 스레드가 4순위로 결정할 수 있다. 또한, 장치(100)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 또한 장치(100)는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다. 예를 들면, 장치(100)는 위의 경우에서 순위가 가장 높은 스레드는 2번 스레드, 차순위 스레드는 3번 스레드로 결정할 수 있다. 그리고 장치(100)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 예를 들면, 장치(100)는 2번 스레드가 1순위, 3번 스레드가 2순위, 1번 스레드가 3순위, 0번 스레드가 4순위일 경우, 1순위의 2번 스레드와 4순위의 0번 스레드를 결정할 수 있다. 또한 장치(100)는 결정된 스레드의 루프가 병렬적으로 리덕션 가능한지 여부를 결정할 수 있다.
단계 S230에서는 결정된 스레드의 일부를 자식 스레드로 분할할 수 있다. 또한, 장치(100)는 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다. 예를 들면 결정된 스레드가 2번 스레드이고 나머지 스레드는 0번 스레드, 1번 스레드, 3번 스레드일 경우, 장치(100)는 0번 스레드, 1번 스레드, 3번 스레드를 처리한 뒤 2번 스레드를 0번 스레드 내지 3번 스레드 각각의 자식 스레드로 분할할 수 있다. 또한 장치(100)는 복수개의 스레드들 중 처리 완료된 스레드의 자식 스레드로 분할할 수 있다. 예를 들면 결정된 스레드가 2번 스레드일 경우, 장치(100)는 0번 스레드가 처리 완료되었을 경우 2번 스레드를 0번 스레드의 자식 스레드로 분할할 수 있다.
단계 S240에서는 분할된 자식 스레드를 복수개의 스레드가 나누어 처리할 수 있다. 예를 들어 0번 스레드 내지 3번 스레드가 2번 스레드를 분할한 자식 스레드를 포함하고 있을 경우, 장치(100)는 0번 스레드 내지 3번 스레드의 기존 코드와 더불어 분할된 자식 스레들에 포함된 코드를 처리할 수 있다.
도 3은 다른 실시 예에 따른 멀티 스레드를 처리하는 방법의 흐름도를 도시한 도면이다.
단계 S200에서는 복수개의 스레드들에서 루프를 검색할 수 있다. 예를 들어, 장치(100)는 프로세서의 8개의 스레드중에서 0번 스레드, 1번 스레드, 2번 스레드, 3번 스레드에서 루프를 검색할 수 있다.
단계 S210에서는 검색된 루프 각각의 반복 횟수를 계산할 수 있다. 예를 들어, 장치(100)는 프로세서의 8개의 스레드 중에서 루프가 검색된 0번 스레드 내지 3번 스레드에 포함된 루프 각각의 반복 횟수를 계산할 수 있다. 즉, 0번 스레드는 반복횟수가 2번, 1번 스레드는 반복횟수가 3번, 2번 스레드는 반복횟수가 5번, 3번 스레드는 반복횟수가 4번일 수 있다.
단계 S220에서는 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정할 수 있다. 또한 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정할 수 있다. 예를 들어 0번 스레드는 반복 횟수가 2번, 1번 스레드는 반복 횟수가 3번, 2번 스레드는 반복 횟수가 5번, 3번 스레드는 반복 횟수가 4번일 경우, 장치(100)는 2번 스레드가 1순위, 3번 스레드가 2순위, 1번 스레드가 3순위, 0번 스레드가 4순위로 결정할 수 있다. 또한 장치(100)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 또한 장치(100)는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다. 예를 들면, 장치(100)는 위의 경우에서 순위가 가장 높은 스레드는 2번 스레드, 차순위 스레드는 3번 스레드로 결정할 수 있다. 그리고 장치(100)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 예를 들면, 장치(100)는 2번 스레드가 1순위, 3번 스레드가 2순위, 1번 스레드가 3순위, 0번 스레드가 4순위일 경우, 1순위의 2번 스레드와 4순위의 0번 스레드를 결정할 수 있다. 또한 장치(100)는 결정된 스레드의 루프가 병렬적으로 리덕션 가능한지 여부를 결정할 수 있다. 병렬적으로 리덕션이 가능하다는 것은,한 개의 스레드의 루프에 속한 코드를 처리한 결과와, 한 개의 스레드의 루프에서 처리할 코드를 복수개의 스레드에서 나누어 처리한 뒤 병합한 결과가 동일하다는 것을 의미한다.
단계 S230에서는 결정된 스레드의 일부를 자식 스레드로 분할할 수 있다. 또한, 장치(100)는 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다. 예를 들면 결정된 스레드가 2번 스레드이고 나머지 스레드는 0번 스레드, 1번 스레드, 3번 스레드일 경우, 장치(100)는 0번 스레드, 1번 스레드, 3번 스레드를 처리한 뒤 2번 스레드를 0번 스레드 내지 3번 스레드 각각의 자식 스레드로 분할할 수 있다. 또한 장치(100)는 복수개의 스레드들 중 처리 완료된 스레드의 자식 스레드로 분할할 수 있다. 예를 들면 결정된 스레드가 2번 스레드일 경우, 장치(100)는 0번 스레드가 처리 완료되었을 경우 2번 스레드를 0번 스레드의 자식 스레드로 분할할 수 있다.
단계 S240에서는 분할된 자식 스레드를 복수개의 스레드가 나누어 처리할 수 있다. 예를 들어 0번 스레드 내지 3번 스레드가 2번 스레드를 분할한 자식 스레드를 포함하고 있을 경우, 장치(100)는 0번 스레드 내지 3번 스레드의 기존 코드와 더불어 분할된 자식 스레들에 포함된 코드를 처리할 수 있다.
단계 S300에서는 처리된 각각의 스레드들을 리덕션할 수 있다. 예를 들어 장치(100)는 단계 S240에서 처리한 스레드의 결과를 리덕션하여 최종 결과를 획득할 수 있다. 예를 들어 스레드의 개수가 4개이고 0번 스레드의 결과가 11, 1번 스레드의 결과가 2, 2번 스레드의 결과가 5, 3번 스레드의 결과가 10일 경우, 리덕션부(1100)는 0번 스레드부터 3번 스레드의 결과를 곱셈 리덕션하여 ?11 * 2 * 5 * 10 = 1100’이라는 최종 결과를 획득할 수 있다.
단계 S310에서는 리덕션한 결과를 출력할 수 있다. 예를 들어 장치(100)는 리덕션한 결과를 디스플레이에 표시할 수 있다. 장치(100)가 출력한 리덕션한 결과는 다른 그래픽 처리 작업의 입력으로 사용될 수 있다.
도 4 내지 도 8은 여러 가지 멀티 스레드를 처리하는 방법을 설명하기 위한 도면이다.
도 4는 멀티 스레드를 처리하기 위한 코드(400)를 나타낸 것이다. 예를 들어 코드(400)는 하나의 픽셀을 처리하도록 구현된 그래픽스 셰이더 코드가 될 수 있다. ‘color=vec4(0.0, 0.0, 0.0, 0.0);’(410)는 각 픽셀 처리를 위해 color 값을 (0, 0, 0, 0)으로 초기화하는 코드이다. ‘c = V();’(420)은 ‘V()’라는 함수를 불러 ‘c’에 저장하는 코드이다. ‘X();’(430)은 ‘X()’라는 함수를 부르는 코드이다. for(int i = 0; i<c; ++i) {vec4 temp =Y(i); color += temp;} (440)는 루프를 나타낸 코드이다. 즉, 루프를 나타내는 코드(440)는 i가 0에서부터 c값이 될때까지 1씩 증가시켜서, 루프 안의 코드를 반복하여 실행한다. ‘vec4 temp = Y(i);’는 변수 ‘vec4 temp’ 에 Y(i)함수 값을 저장하는 코드이다. ‘color += temp;’는 변수 ‘color’ 에 ‘color + temp’ 값을 저장하는 코드이다. 다시 말하면, 이 두 개의 코드‘vec4 temp = Y(i);’와 ‘color += temp;’를 한번 실행시키면i가 1 증가하게 되고, 코드를 반복하여 실행하여 i가 c값이 되면 반복을 중단한다. 즉, Y(0, Y(1), … Y(c-1) 함수를 불러 이 값들을 누적하여 color값을 계산한다.‘gl_Color = color;’(460)는 변수color 값을 gl_Color 값에 저장한다.
도 5를 참조하면 멀티 스레드를 처리하는 방법의 일 실시예를 설명할 수 있다. 프로세서는 8개의 스레드(500)를 가지고 있을 수 있다. 8개의 스레드(500)는 0번 스레드, 1번 스레드, 2번 스레드, 3번 스레드, 4번 스레드, 5번 스레드, 6번 스레드, 7번 스레드를 포함할 수 있다. 각각의 스레드는 도 4에 도시된 코드(400)를 각각 실행할 수 있다. 예를 들어, ‘c=V();’(420) 코드의 경우에, V(0)값은 0번 스레드의 c값을 나타낼 수 있다. 마찬가지로 V(1)값은 1번 스레드의 c값을 나타낼 수 있다. 도 5의 각 스레드에 도시된 ‘V’는 V() 함수를 각 스레드에서 실행함을 의미한다. 또한 각 스레드에 도시된‘X’는 X() 함수를 각 스레드에서 실행함을 의미한다. 각 스레드의 ‘Y’의 개수는 도 4의 루프 코드(440)가 실행된 횟수와 같다. 즉, ‘Y’의 개수는 변수 c의 값과 같다. 예를 들면 2번 스레드는 Y가 8개 이므로 c=8이고, 루프 코드(440)는 8번 실행한다.
멀티 스레드를 처리하는 장치(100)는 컴파일러를 포함할 수 있다. 컴파일러는 도 5의 코드를 컴파일 할 수 있다. 또한 컴파일러는 두가지 조건을 검사할 수 있다. 첫 번째는, 스레드마다 루프의 반복 횟수가 균일하지 않은지를 검사할 수 있다. 두 번째는, 컴파일러는 스레드의 루프에서 계산하는 결과물이 리덕션 가능한지 여부를 결정할 수 있다. 도 4를 참조하면, 루프를 반복해서 얻는 color 값과, 루프를 반복하지 않고 temp 값을 병렬적으로 따로 구한 뒤 리덕션(덧셈 리덕션)을 통해 얻는 결과값이 동일함을 알 수 있다. 컴파일러는 위의 두 가지 조건을 만족하는 경우, 코드의 루프가 시작되는 곳에 이 루프가 불균등한 루프 반복이 있고, c라는 메모리 공간(혹은 레지스터 공간) 에 반복 횟수가 담겨 있음을 코드와 함께 기록할 수 있다. 또한 color 값을 덧셈 리덕션으로 얻을 수 있음을 기록할 수 있다.
멀티 스레드를 처리하는 장치(100)는 복수개의 스레드들에서 루프를 검색한다. 예를 들면 도 5의 각 스레드들에서 도 4의 루프 코드(440)를 실행하는지 검색한다.
멀티 스레드를 처리하는 장치(100)는 검색된 루프 각각의 반복 횟수를 계산한다. 예를 들어, 도 5를 참조하면 0번 스레드는 루프가 2번, 1번 스레드는 루프가 1번, 2번 스레드는 루프가 8번, 3번 스레드는 루프가 1번, 4번 스레드는 루프가 1번, 5번 스레드는 루프가 3번, 6번 스레드는 루프가2번, 7번 스레드는 루프가 1번이다.
멀티 스레드를 처리하는 장치(100)는 계산된 루프의 반복 횟수가 가장 큰 스레드를 결정한다. 예를 들어 도 5를 참조하면 멀티 스레드를 처리하는 장치(100)는 루프의 반복 횟수가 가장 큰 스레드는 2번 스레드로 결정한다.
멀티 스레드를 처리하는 장치(100)는 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다. 예를 들어, 도 6을 참조하면, 멀티 스레드를 처리하는 장치(100)는 결정된 2번 스레드의 Y를 8개의 스레드들(500) 각각의 자식 스레드(600)로 분할할 수 있다. 또 다른 예로, 가장 긴 2번 스레드를 제외한 나머지 스레드들을 먼저 수행할 수 있다. 멀티 스레드를 처리하는 장치(100)는 먼저 수행한 스레드들의 수행이 다 끝난 뒤 2번 스레드를 8개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다.
멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드를 포함하는 각각의 스레드를 처리할 수 있다. 예를 들어 도 6을 참조하면, 멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드(600)를 포함하는 8개의 스레드들(500)에 대해 각각 스레드를 처리할 수 있다.
즉, 도 5와 도 6을 참조하면, 각각의 스레드마다 다른 c값으로 스레드마다 처리하는 시간이 다르고, 모든 스레드들은 동기화되어 처리를 진행하므로, 2번 스레드의 처리를 기다리기 위해 다른 스레드들은 아이들(idle)상태에서 시간을 보낸다. 따라서 도 6과 같이 2번 스레드를 8개의 스레드들(500)의 자식 스레드로 분할하여 전체 처리 시간을 경감할 수 있다. 이후에 멀티 스레드를 처리하는 장치(100)는 처리된 각각의 스레드들을 리덕션할 수 있다. 예를 들면, 도 6의 각각의 스레드가 처리한 자식 스레드(600)의 값을 리덕션하여 결과 값을 얻을 수 있다. 또한 멀티 스레드를 처리하는 장치(100)는 리덕션한 결과를 출력할 수 있다.
도 7을 참조하면, 멀티 스레드를 처리하는 방법의 다른 실시예를 설명할 수 있다. 멀티 스레드를 처리하는 장치(100)는 복수개의 스레드들에서 루프를 검색한다. 예를 들면 도 7의 각 스레드들에서 도 4의 루프 코드(440)를 실행하는지 검색한다.
멀티 스레드를 처리하는 장치(100)는 검색된 루프 각각의 반복 횟수를 계산한다. 예를 들어, 도 7을 참조하면 0번 스레드는 루프가 2번, 1번 스레드는 루프가 2번, 2번 스레드는 루프가 6번, 3번 스레드는 루프가 2번, 4번 스레드는 루프가 2번, 5번 스레드는 루프가 5번, 6번 스레드는 루프가 3번, 7번 스레드는 루프가 2번이다.
멀티 스레드를 처리하는 장치(100)는 계산된 루프의 반복 횟수가 가장 큰 스레드와 반복 횟수가 두번째로 큰 스레드를 결정한다. 예를 들어 도 7을 참조하면 멀티 스레드를 처리하는 장치(100)는 루프의 반복 횟수가 가장 큰 스레드는 2번 스레드, 반복 횟수가 두번째로 큰 스레드는 5번 스레드로 결정한다. 멀티 스레드를 처리하는 장치(100)는 결정된 스레드를 자식 스레드(child thread)로 분할할 수 있다. 예를 들어, 도 7을 참조하면, 멀티 스레드를 처리하는 장치(100)는 결정된 2번 스레드의 Y(700)와 5번 스레드의 Y(710)를 자식 스레드(600)로 분할할 수 있다. 또한 분할된 자식 스레드를 나머지 스레드에서 나누어 처리할 수 있다.
또한 멀티 스레드를 처리하는 장치(100)는 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정할 수 있다. 멀티 스레드를 처리하는 장치(100)는 순위가 가장 높은 스레드를 결정할 수 있다. 또한 멀티 스레드를 처리하는 장치(100)는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다. 예를 들어, 도 7을 참조하면 0번 스레드는 루프가 2번, 1번 스레드는 루프가 2번, 2번 스레드는 루프가 6번, 3번 스레드는 루프가 2번, 4번 스레드는 루프가 2번, 5번 스레드는 루프가 5번, 6번 스레드는 루프가 3번, 7번 스레드는 루프가 2번이다. 따라서 반복 횟수가 큰 순서대로 결정한 스레드의 순위는 2번 스레드가 1위, 5번 스레드가 2위, 6번 스레드가 3위, 1번 스레드, 3번 스레드, 4번 스레드 및 7번 스레드가 공동 4위이다. 따라서, 멀티 스레드를 처리하는 장치(100)는 스레드의 순위에 기초하여 1위 스레드를 2번 스레드로 결정할 수 있다. 또한 멀티 스레드를 처리하는 장치(100)는 스레드의 순위에 기초하여 1위 스레드를 2번 스레드로 결정하고, 2위 스레드를 5번 스레드로 결정할 수 있다. 이와 더불어 멀티 스레드를 처리하는 장치(100)는 복수개의 스레드들 중 임의의 순위의 스레드를 적어도 한 개 이상 결정할 수도 있다. 예를 들어 멀티 스레드를 처리하는 장치(100)는 스레드의 순위에 기초하여 1위 스레드와 3위 스레드를 결정할 수 있다. 또는 멀티 스레드를 처리하는 장치(100)는 복수개의 스레드들 중 1위 스레드, 2위 스레드, 3위 스레드 및 4위 스레드를 결정할 수 있다. 즉 멀티 스레드를 처리하는 장치(100)는 3개 이상의 스레드를 결정할 수 도 있다.
멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드를 포함하는 각각의 스레드를 처리할 수 있다. 예를 들어 도 7을 참조하면, 멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드(600)를 포함하는 8개의 스레드들(500)에 대해 각각 스레드를 처리할 수 있다. 이후에 멀티 스레드를 처리하는 장치(100)는 처리된 각각의 스레드들을 리덕션할 수 있다. 예를 들면, 도 7의 각각의 스레드가 처리한 자식 스레드(600)의 값을 리덕션하여 결과 값을 얻을 수 있다. 또한 멀티 스레드를 처리하는 장치(100)는 리덕션한 결과를 출력할 수 있다.
도 8을 참조하면, 멀티 스레드를 처리하는 방법의 또다른 실시예를 설명할 수 있다. 멀티 스레드를 처리하는 장치(100)는 복수개의 스레드들에서 루프를 검색한다. 예를 들면 도 8의 각 스레드들에서 도 4의 루프 코드(440)를 실행하는지 검색한다.
멀티 스레드를 처리하는 장치(100)는 검색된 루프 각각의 반복 횟수를 계산한다. 예를 들어, 도 8을 참조하면 0번 스레드는 루프가 2번, 1번 스레드는 루프가 2번, 2번 스레드는 루프가 8번, 3번 스레드는 루프가 2번, 4번 스레드는 루프가 2번, 5번 스레드는 루프가 3번, 6번 스레드는 루프가3번, 7번 스레드는 루프가 2번이다.
멀티 스레드를 처리하는 장치(100)는 계산된 루프의 반복 횟수가 가장 큰 스레드를 결정한다. 예를 들어 도 8을 참조하면 멀티 스레드를 처리하는 장치(100)는 루프의 반복 횟수가 가장 큰 스레드를 2번 스레드로 결정한다.
멀티 스레드를 처리하는 장치(100)는 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드(child thread)로 분할할 수 있다. 예를 들어, 도 8을 참조하면, 멀티 스레드를 처리하는 장치(100)는 결정된 2번 스레드의 Y(800)를 자식 스레드들로 분할할 수 있다. 또한, 멀티 스레드를 처리하는 장치(100)는 분할한 자식 스레드를 이미 수행이 끝난 스레드에 할당할 수 있다.
멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드를 포함하는 각각의 스레드를 처리할 수 있다. 예를 들어 도 8을 참조하면, 멀티 스레드를 처리하는 장치(100)는 분할된 자식 스레드를 포함하는 8개의 스레드들(500)에 대해 각각 스레드를 처리할 수 있다. 이후에 멀티 스레드를 처리하는 장치(100)는 처리된 각각의 스레드들을 리덕션할 수 있다. 예를 들면, 도 8의 각각의 스레드가 처리한 자식 스레드(600)의 값을 리덕션하여 결과 값을 얻을 수 있다. 또한 멀티 스레드를 처리하는 장치(100)는 리덕션한 결과를 출력할 수 있다.
도 9 및 도 10은 또 다른 실시 예에 따른 멀티 스레드를 처리하는 방법을 설명하기 위한 도면이다.
도 9는 멀티 스레드를 처리하는 방법과 관련하여 컴파일러가 실행하는 부분에 대한 설명을 나타낼 수 있다.
단계 S900에서는, 복수개의 스레드들에서 루프를 검색한다.
단계S910에서는, 검색된 루프에서 계산하는 결과물이 리덕션 가능한지 여부를 결정한다. 만약 단계 S910에서, 리덕션이 가능하지 않으면 단계 S940으로 가서 다른 루프가 있는지 여부를 확인한다. 만약 단계 S910에서, 리덕션이 가능하다면 단계 S920으로 가서 검색된 루프의 반복횟수를 계산한다. 이후에 단계 S930에서는 가장 반복횟수가 큰 루프의 스레드를 결정한다. 이후에 단계 S940에서는 다른 루프가 있는지 여부를 확인한다. 단계 S940에서 다른 루프가 있으면, 단계 S900으로 가서 다시 루프를 검색한다. 만약 단계 S940에서 다른 루프가 없다면 멀티 스레드를 처리하는 장치(100)는 동작을 종료한다.
도 10은 프로세서의 처리 시간에 멀티 스레드를 처리하는 방법을 설명하기 위한 흐름도이다.
단계 S1000에서는, 멀티 스레드를 처리하는 장치(100)는 스레드들을 처리한다.
단계 S1010에서는, 멀티 스레드를 처리하는 장치(100)의 스레드들 처리가 종료되었는지 여부를 결정한다. 단계 S1010에서 멀티 스레드를 처리하는 장치(100)가 스레드들의 처리를 종료하였으면, 멀티 스레드를 처리하는 장치(100)는 동작을 종료한다. 만약에 단계 S1010에서 종료되지 않았으면, 단계 S1020에서 현재의 스레드가 루프의 반복횟수가 가장 큰 스레드인지 여부를 확인한다. 단계 S1020에서 현재의 스레드가 루프의 반복횟수가 가장 큰 스레드가 아니면 단계 S1000으로 돌아가 다른 스레드들을 실행한다. 만약 단계 S1020에서 현재의 스레드가, 단계 S930에서 결정된 루프의 반복횟수가 가장 큰 스레드이면, 단계 S1030에서, 스레드들간 루프의 반복횟수가 불균형인지 여부를 결정한다. 만약 단계 S1030에서, 스레드들간 루프의 반복횟수가 불균형하면, 단계 S1040에서는 현재 스레드를 복수개의 스레드들 각각의 자식 스레드로 분할한다. 이후 단계 S1050에서는 분할된 자식 스레드를 포함하는 각각의 스레드를 처리한다. 이후 처리된 각각의 스레드들을 리덕션한다.
도 11은 다른 실시 예에 따른 멀티 스레드를 처리하는 장치의 구성도를 도시한 도면이다. 멀티 스레드를 처리하는 장치(100)는 검색부(110), 계산부(120), 스레드 결정부(130), 분할부(140), 처리부(150), 리덕션부(1100) 및 출력부(1110)를 포함한다.
검색부(110)는 복수개의 스레드들에서 루프를 검색한다. 스레드는 컴퓨터 프로그램 수행 시 프로세스 내부에 존재하는 수행 경로를 의미한다. 루프는 프로세서의 스레드에서 처리할 코드 중에서 반복적으로 처리해야할 부분을 의미한다. 예를 들어, 검색부(110)는 스레드에서 처리할 코드 중에 ‘for문’이 있는지를 검색할 수 있다.
계산부(120)는 검색된 루프 각각의 반복 횟수를 계산한다. 예를 들어, 계산부(120)는 스레드에서 처리할 코드 중에 ‘for문’이 몇 번 반복해서 수행하는지를 계산할 수 있다.
스레드 결정부(130)는 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정한다. 또한, 스레드 결정부(130)는 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정할 수 있다. 또한 스레드 결정부(130)는 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정할 수 있다. 예를 들어, 스레드 결정부(130)는 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정할 수 있다. 스레드 결정부(130)는 결정된 스레드의 루프가 병렬적으로 리덕션이 가능한지 여부를 결정할 수 있다. 왜냐하면 스레드의 루프가 병렬적으로 리덕션이 불가능한 경우에는, 기존의 스레드를 처리한 결과와 스레드를 분할하여 처리한 결과가 다르게 되기 때문이다.
분할부(140)는 결정된 스레드의 일부를 자식 스레드(child thread)로 분할한다. 분할부(140)는 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 결정된 스레드를 복수개의 스레드들 각각의 자식 스레드로 분할할 수 있다. 또한 분할부(140)는 복수개의 스레드를 처리하고, 결정된 스레드를 복수개의 스레드들 중 처리 완료된 스레드의 자식 스레드로 분할할 수 있다.
처리부(150)는 분할된 자식 스레드를 복수개의 스레드가 나누어 처리한다. 예를 들어 처리부(150)는 복수개의 스레드 각각의 코드를 처리하고 난 뒤 복수개의 스레드 각각에 포함된 자식 스레드의 코드를 처리할 수 있다.
리덕션부(1100)는 처리된 각각의 스레드들을 리덕션한다. 예를 들어 리덕션부(1100)는 처리부(150)가 처리한 스레드의 결과를 리덕션하여 최종 결과를 획득할 수 있다. 예를 들어 스레드의 개수가 4개이고 0번 스레드의 결과가 1, 1번 스레드의 결과가 2, 2번 스레드의 결과가 5, 3번 스레드의 결과가 10일 경우, 리덕션부(1100)는 0번 스레드부터 3번 스레드의 결과를 덧셈 리덕션하여 ‘1 + 2 + 5 + 10 = 18’이라는 최종 결과를 획득할 수 있다.
출력부(1110)는 리덕션한 결과를 출력한다. 예를 들어 출력부(1110)는 리덕션한 결과를 디스플레이에 표시할 수 있다. 또는 출력부(1110)가 출력한 리덕션한 결과는 다른 그래픽 처리 작업의 입력으로 사용될 수 있다.
도 12는 멀티 스레드를 처리하는 프로세서를 도시한 도면이다.
프로세서(1200)는 여러 개의 스레드(1210)를 포함할 수 있다. 프로세서(1200)는 도 1 및 도 11의 멀티 스레드를 처리하는 장치(100)와 같은 동작을 수행할 수 있다. 예를 들면 프로세서(1200)는 멀티 스레드를 처리하는 장치(100)의 검색부(110), 계산부(120), 스레드 결정부(130), 분할부(140), 처리부(150), 리덕션부(1100) 및 출력부(1110)가 수행하는 동작을 수행할 수 있다. 또한 도 12의 프로세서(1200) 내의 스레드(1210)는 도 1 내지 도 11에서 설명한 스레드를 포함할 수 있다.
본 실시 예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
본 실시 예에서 설명하는 특정 실행들은 예시들로서, 어떠한 방법으로도 기술적 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다.
본 명세서(특히 특허청구범위에서)에서 “상기”의 용어 및 이와 유사한 지시 용어의 사용은 단수 및 복수 모두에 해당하는 것일 수 있다. 또한, 범위(range)를 기재한 경우 상기 범위에 속하는 개별적인 값을 포함하는 것으로서(이에 반하는 기재가 없다면), 상세한 설명에 상기 범위를 구성하는 각 개별적인 값을 기재한 것과 같다. 마지막으로, 방법을 구성하는 단계들에 대하여 명백하게 순서를 기재하거나 반하는 기재가 없다면, 상기 단계들은 적당한 순서로 행해질 수 있다. 반드시 상기 단계들의 기재 순서에 한정되는 것은 아니다. 모든 예들 또는 예시적인 용어(예를 들어, 등등)의 사용은 단순히 기술적 사상을 상세히 설명하기 위한 것으로서 특허청구범위에 의해 한정되지 않는 이상 상기 예들 또는 예시적인 용어로 인해 범위가 한정되는 것은 아니다. 또한, 당업자는 다양한 수정, 조합 및 변경이 부가된 특허청구범위 또는 그 균등물의 범주 내에서 설계 조건 및 팩터에 따라 구성될 수 있음을 알 수 있다.

Claims (19)

  1. 복수개의 스레드들에서 루프를 검색하는 단계;
    상기 검색된 루프 각각의 반복 횟수를 계산하는 단계;
    상기 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정하는 단계;
    상기 결정된 스레드의 일부를 자식 스레드(child thread)로 분할하는 단계; 및
    상기 분할된 자식 스레드를 상기 복수개의 스레드가 나누어 처리하는 단계를 포함하는, 멀티 스레드를 처리하는 방법.

  2. 제 1항에 있어서,
    상기 처리된 각각의 스레드들을 리덕션(reduction)하는 단계를 더 포함하는, 멀티 스레드를 처리하는 방법.
  3. 제 1항에 있어서,
    상기 스레드를 결정하는 단계는,
    상기 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정하는 단계; 및
    상기 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정하는 단계를 포함하는, 멀티 스레드를 처리하는 방법.
  4. 제 3항에 있어서,
    상기 스레드를 결정하는 단계는,
    상기 결정된 스레드의 순위가 가장 높은 스레드를 결정하는, 멀티 스레드를 처리하는 방법.
  5. 제 3항에 있어서,
    상기 스레드를 결정하는 단계는,
    상기 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정하는, 멀티 스레드를 처리하는 방법.
  6. 제 1항에 있어서,
    상기 스레드를 결정하는 단계는,
    상기 결정된 스레드의 루프가 병렬적으로 리덕션이 가능한지 여부를 결정하는 단계를 더 포함하는, 멀티 스레드를 처리하는 방법.
  7. 제 1항에 있어서,
    상기 분할하는 단계는,
    상기 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 상기 결정된 스레드를 상기 복수개의 스레드들 각각의 자식 스레드로 분할하는, 멀티 스레드를 처리하는 방법.
  8. 제 1항에 있어서,
    상기 분할하는 단계는,
    상기 복수개의 스레드를 처리하는 단계; 및
    상기 결정된 스레드를, 상기 복수개의 스레드들 중 처리완료된 스레드의 자식 스레드로 분할하는 단계를 포함하는, 멀티 스레드를 처리하는 방법.
  9. 제 2항에 있어서,
    상기 리덕션한 결과를 출력하는 단계를 더 포함하는, 멀티 스레드를 처리하는 방법.
  10. 복수개의 스레드들에서 루프를 검색하는 검색부;
    상기 검색된 루프 각각의 반복 횟수를 계산하는 계산부;
    상기 계산된 루프의 반복 횟수를 기초로 하여 스레드를 결정하는 스레드 결정부;
    상기 결정된 스레드의 일부를 자식 스레드로 분할하는 분할부 및
    상기 분할된 자식 스레드를 상기 복수개의 스레드가 나누어 처리하는 처리부를 포함하는, 멀티 스레드를 처리하는 장치.
  11. 제 10항에 있어서,
    상기 처리된 각각의 스레드들을 리덕션하는 리덕션부를 더 포함하는, 멀티 스레드를 처리하는 장치.
  12. 제 10항에 있어서,
    상기 스레드 결정부는,
    상기 계산된 루프의 반복 횟수가 큰 순서대로 스레드의 순위를 결정하고, 상기 결정된 스레드의 순위를 기초로 하여 적어도 하나 이상의 스레드를 결정하는, 멀티 스레드를 처리하는 장치.
  13. 제 12항에 있어서,
    상기 스레드 결정부는,
    상기 결정된 스레드의 순위가 가장 높은 스레드를 결정하는, 멀티 스레드를 처리하는 장치.
  14. 제 12항에 있어서,
    상기 스레드 결정부는,
    상기 결정된 스레드의 순위가 가장 높은 스레드 및 차순위 스레드를 결정하는, 멀티 스레드를 처리하는 장치.
  15. 제 10항에 있어서,
    상기 스레드 결정부는,
    상기 결정된 스레드의 루프가 병렬적으로 리덕션이 가능한지 여부를 결정하는 단계를 더 포함하는, 멀티 스레드를 처리하는 장치.
  16. 제 10항에 있어서,
    상기 분할부는,
    상기 결정된 스레드를 제외한 나머지 스레드를 처리한 뒤, 상기 결정된 스레드를 상기 복수개의 스레드들 각각의 자식 스레드로 분할하는, 멀티 스레드를 처리하는 장치.
  17. 제 10항에 있어서,
    상기 분할부는,
    상기 복수개의 스레드를 처리하고, 상기 결정된 스레드를, 상기 복수개의 스레드들 중 처리완료된 스레드의 자식 스레드로 분할하는, 멀티 스레드를 처리하는 장치.
  18. 제 11항에 있어서,
    상기 리덕션한 결과를 출력하는 출력부를 더 포함하는, 멀티 스레드를 처리하는 장치.
  19. 하드웨어와 결합되어 제1항 내지 제 9항 중 어느 한 항의 방법을 처리시키기 위하여 매체에 저장된 컴퓨터 프로그램
KR1020140179352A 2014-12-12 2014-12-12 멀티 스레드를 처리하는 방법 및 장치 KR20160071782A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020140179352A KR20160071782A (ko) 2014-12-12 2014-12-12 멀티 스레드를 처리하는 방법 및 장치
US14/816,265 US10296315B2 (en) 2014-12-12 2015-08-03 Multiple-thread processing methods and apparatuses

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140179352A KR20160071782A (ko) 2014-12-12 2014-12-12 멀티 스레드를 처리하는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20160071782A true KR20160071782A (ko) 2016-06-22

Family

ID=56111255

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140179352A KR20160071782A (ko) 2014-12-12 2014-12-12 멀티 스레드를 처리하는 방법 및 장치

Country Status (2)

Country Link
US (1) US10296315B2 (ko)
KR (1) KR20160071782A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018044437A1 (en) * 2016-09-02 2018-03-08 Intel Corporation Mechanism to increase thread parallelism in a graphics processor

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838976A (en) 1995-11-28 1998-11-17 Hewlett-Packard Co. System and method for profiling code on symmetric multiprocessor architectures
US6088044A (en) * 1998-05-29 2000-07-11 International Business Machines Corporation Method for parallelizing software graphics geometry pipeline rendering
EP1031923A2 (en) 1999-02-04 2000-08-30 Sun Microsystems Inc. Method and system for implementing a balanced distribution of processor resources
US7100164B1 (en) * 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
JP2004152204A (ja) 2002-11-01 2004-05-27 Hitachi Ltd 並列化コンパイラ装置
US7089545B2 (en) * 2002-12-17 2006-08-08 International Business Machines Corporation Detection of reduction variables in an assignment statement
US20050144602A1 (en) * 2003-12-12 2005-06-30 Tin-Fook Ngai Methods and apparatus to compile programs to use speculative parallel threads
US20080005726A1 (en) * 2006-06-29 2008-01-03 Jean-Francois Collard Methods and systems for modifying software applications to implement memory allocation
JP4247266B2 (ja) * 2006-10-18 2009-04-02 株式会社東芝 スレッド順位付け装置及びスレッド順位付け方法
US8151252B2 (en) * 2008-02-22 2012-04-03 Oracle America, Inc. Compiler framework for speculative automatic parallelization with transactional memory
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
BRPI0920541A2 (pt) * 2008-11-24 2018-11-06 Intel Corp sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial
US9015690B2 (en) * 2009-08-22 2015-04-21 Advanced Micro Devices, Inc. Proactive loop fusion of non-adjacent loops with intervening control flow instructions
EP2519876A1 (en) * 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
JP5521644B2 (ja) 2010-02-26 2014-06-18 日本電気株式会社 ハイブリッド並列処理システム、方法、及びプログラム
JP5148674B2 (ja) * 2010-09-27 2013-02-20 株式会社東芝 プログラム並列化装置およびプログラム
US8726251B2 (en) * 2011-03-29 2014-05-13 Oracle International Corporation Pipelined loop parallelization with pre-computations
US8949809B2 (en) * 2012-03-01 2015-02-03 International Business Machines Corporation Automatic pipeline parallelization of sequential code
JP6020091B2 (ja) * 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US9471289B2 (en) * 2014-03-25 2016-10-18 Nec Corporation Compiler optimization for many integrated core processors
US9760356B2 (en) * 2014-09-23 2017-09-12 Intel Corporation Loop nest parallelization without loop linearization

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018044437A1 (en) * 2016-09-02 2018-03-08 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
US10552211B2 (en) 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor

Also Published As

Publication number Publication date
US20160170799A1 (en) 2016-06-16
US10296315B2 (en) 2019-05-21

Similar Documents

Publication Publication Date Title
US10331666B1 (en) Apparatus and method for parallel processing of a query
JP6349395B2 (ja) コールパスファインダ
KR20180127945A (ko) 다차원 텐서들에서의 데이터 액세스
US20180203673A1 (en) Execution of computation graphs
CN111381880B (zh) 一种处理器、介质和处理器的操作方法
EP2711839A1 (en) Parallel processing device, parallel processing method, optimization device, optimization method, and computer program
JP2020109605A (ja) マルチスレッドプロセッサのレジスタファイル
TW201432572A (zh) 在程式碼的發散範圍中同步執行緒的系統與方法
Lai et al. Accelerating Strassen-Winograd's matrix multiplication algorithm on GPUs
US20170169132A1 (en) Accelerated lookup table based function evaluation
US10990073B2 (en) Program editing device, program editing method, and computer readable medium
KR20160071782A (ko) 멀티 스레드를 처리하는 방법 및 장치
GB2516501A (en) Method and system for processing data in a parallel database environment
JP2021192187A (ja) 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
CN106980673B (zh) 内存数据库表索引更新方法及系统
US20200327128A1 (en) Query execution apparatus, method, and system for processing data, query containing a composite primitive
US9383981B2 (en) Method and apparatus of instruction scheduling using software pipelining
EP3264261A2 (en) Processor and control method of processor
KR101990603B1 (ko) 대규모 소스 코드 저장소들에서의 자동적인 임포트들 및 의존성들
KR102195886B1 (ko) 분산 처리 시스템 및 이의 동작 방법
JP2011253253A (ja) コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラム
KR20160066939A (ko) 멀티 스레드를 실행하는 방법 및 장치
CN103268223A (zh) 在编译过程中改善乘加类指令执行性能的方法
US20150026702A1 (en) Data processing system, method and program product of creating program information, and program information display system
US11070211B2 (en) Event counter circuits using partitioned moving average determinations and related methods

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination