KR20160036067A - 동적 폭 계산을 이용한 배리어 폭 동기화 - Google Patents

동적 폭 계산을 이용한 배리어 폭 동기화 Download PDF

Info

Publication number
KR20160036067A
KR20160036067A KR1020167006600A KR20167006600A KR20160036067A KR 20160036067 A KR20160036067 A KR 20160036067A KR 1020167006600 A KR1020167006600 A KR 1020167006600A KR 20167006600 A KR20167006600 A KR 20167006600A KR 20160036067 A KR20160036067 A KR 20160036067A
Authority
KR
South Korea
Prior art keywords
threads
barrier
group
width
operations
Prior art date
Application number
KR1020167006600A
Other languages
English (en)
Other versions
KR101724247B1 (ko
Inventor
베네딕트 루벤 게스터
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20160036067A publication Critical patent/KR20160036067A/ko
Application granted granted Critical
Publication of KR101724247B1 publication Critical patent/KR101724247B1/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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

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

Abstract

프로세싱 유닛의 시퀀서는, 실행시간에서, 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하고, 배리어 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작으며, 스레드들의 그룹에서의 스레드들은 하나 이상의 계산 유닛들 상에서 데이터 병렬 코드를 실행한다. 배리어 폭과 동일한 수의 스레드들을 포함하는, 스레드들의 그룹의 서브그룹에서의 각 스레드가 배리어 동작을 실행한 것에 응답하여, 시퀀서는, 스레드들의 그룹의 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이, 배리어 동작을 지나서 하나 이상의 프로세서들 상에서 실행되는 것을 가능하게 할 수도 있고, 스레드들의 그룹의 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다.

Description

동적 폭 계산을 이용한 배리어 폭 동기화{BARRIER SYNCHRONIZATION WITH DYNAMIC WIDTH CALCULATION}
이 개시물은 컴퓨팅 명령들의 실행에 관한 것이고, 보다 상세하게는, 병렬로 실행되는 컴퓨팅 명령들의 동기화에 관한 것이다.
전통적으로, 컴퓨터 프로그램들은, 컴퓨터 프로그램들의 코드가 단일의 종래의 프로세서 상에서 순차적으로 실행되는 순차적인 프로그램들로서 쓰여졌다. 하지만, 다중 프로세싱 코어들을 포함하는, 그래픽 프로세싱 유닛 (GPU) 들과 같은, 특수화된 프로세서들의 성능이 급속도로 계속 증가하기 때문에, 컴퓨터 프로그램들은 점점 이러한 특수화된 프로세서들의 이점을 취하도록 쓰여지고 있다. 예를 들어, 컴퓨터 프로그램들은, 동일한 코드가 병렬로 데이터의 셋트에 대해 동작하도록 프로세서의 다중 프로세싱 코어들에 걸쳐 실행될 수도 있도록, 데이터 병렬 코드를 포함하도록 쓰여지고 있다. 이러한 데이터 병렬 코드는 순차적으로 대신에 병렬로 실행되기 때문에, 코드가 데이터의 셋트를 프로세싱하는 것을 마칠 순서에 관한 보장이 존재하지 않을 수도 있다. 따라서, 데이터의 값들이 임의의 추가적인 동작들에서 사용되기 전에 다중 프로세싱 코어들이 데이터의 셋트에 대한 동작을 마친 것을 보장하기 위해 병렬 실행을 동기화하는 것이 바람직할 수도 있다.
일반적으로, 이 개시물은 동적 배리어 폭 계산 (dynamic barrier width calculation) 을 이용하여 병렬로 프로세싱되는 컴퓨팅 명령들 (computing instructions) 을 동기화하는 기술들을 설명한다. 스레드들 (threads) 의 블록은 데이터의 셋트에 걸쳐 동일한 셋트의 명령들을 각각 실행할 수도 있고, 판독 동작들 (read operations) 이 부정확하거나 무효의 데이터를 판독하는 것을 방지하기 위해, 스레드들이 데이터의 셋트에 대해 각각의 기입 동작들 (write operations) 을 실행한 후에 그리고 그 스레드들이 데이터의 셋트에 대해 각각의 판독 동작들을 실행하기 전에, 스레드들의 블록을 동기화하기 위해 배리어 동작들 (barrier operations) 이 사용될 수도 있다. 기본적으로, 배리어 동작은, 블록에서의 각각의 그리고 매 (every) 스레드가 각각의 배리어 동작을 실행하지 않는 한, 어떤 스레드들도 배리어 동작에 후속하는 판독 동작들을 실행하지 못하도록, 스레드들의 블록에서 스레드들의 전부를 동기화할 수 있다. 반면, 본원에 개시된 기술들은, 블록의 스레드들의 서브셋트는, 블록에서의 다른 스레드들이 아직 그들의 배리어 동작들을 실행하지 않은 경우에도, 각각의 배리어 동작들을 실행한 후에 판독 동작들을 실행하는 것으로 진행할 수 있도록, 배리어 동작들의 폭을 동적으로 계산하기 위한 기술들을 포함할 수도 있다.
일 예에서, 스레드들을 동기화하는 방법은, 호스트 (host) 에 동작가능하게 커플링된 (operably coupled) 프로세싱 유닛에 의해 실행될 데이터 병렬 코드 (data parallel code) 를 포함하는, 호스트 상에서 실행되는 애플리케이션의 실행시간 (runtime) 에서, 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 단계를 포함하고, 배리어 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작고, 스레드들의 그룹에서의 스레드들은 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 데이터 병렬 코드를 실행한다. 이 방법은 추가로, 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는, 스레드들의 그룹의 서브그룹 (subgroup) 에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 스레드들의 그룹의 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서 각각의 동작들을 실행하도록 인에이블 (enable) 하는 단계를 포함하고, 스레드들의 그룹의 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다.
다른 예에서, 컴퓨팅 시스템은 스레드들을 동기화하기 위한 컴퓨팅 시스템을 포함한다. 컴퓨팅 시스템은 호스트를 포함한다. 컴퓨팅 시스템은 추가로, 호스트에 동작가능하게 커플링된 프로세싱 유닛을 포함한다. 컴퓨팅 시스템은 추가로, 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는, 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 것으로서, 배리어 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작은, 상기 배리어 동작의 배리어 폭을 결정하는 것, 및 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는, 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 스레드들의 그룹의 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서의 각각의 동작들을 실행하도록 인에이블하는 것을 행하도록 구성된 시퀀서 모듈을 더 포함하고, 스레드들의 그룹의 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다.
다른 예에서, 병렬 프로세싱 장치는, 호스트에 동작가능하게 커플링된 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는, 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 수단을 포함하고, 배리어 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다. 병렬 프로세싱 장치는 추가로, 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는, 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 스레드들의 그룹의 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서 각각의 동작들을 실행하도록 인에이블하는 수단을 포함하고, 스레드들의 그룹의 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다.
또 다른 예에서, 컴퓨터 판독가능 저장 매체는, 적어도 하나의 프로세서에 의해 실행되는 경우, 그 적어도 하나의 프로세서로 하여금 동작들을 수행하게 하는 명령들을 포함할 수도 있다. 그 동작들은, 호스트에 동작가능하게 커플링된 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는, 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 것을 포함하고, 상기 배리어 폭은 상기 스레드들의 그룹에서의 스레드들의 총 수보다 더 작고, 스레드들의 그룹에서의 스레드들은 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 데이터 병렬 코드를 실행한다. 그 동작들은 추가로, 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는, 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 스레드들의 그룹의 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서 각각의 동작들을 실행하도록 인에이블하는 것을 포함하고, 스레드들의 그룹의 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다.
하나 이상의 예들에 대한 상세들이 첨부 도면들 및 이하의 상세한 설명에서 전개된다. 다른 특징들, 목적들, 및 이점들은 상세한 설명 및 도면들로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1 은 본 개시의 몇몇 양태들에 따른, 스레드들의 동기화를 나타내는 개념도이다.
도 2 는 본 개시의 몇몇 양태들에 따른, 병렬 프로세싱 컴퓨팅 시스템을 나타내는 블록도이다.
도 3 은 본 개시의 몇몇 양태들에 따른, 동적 배리어 폭을 이용한 스레드들의 동기화를 나타내는 개념도이다.
도 4 는 본 개시의 몇몇 양태들에 따른, 예시적인 병렬 감축을 나타내는 개념도이다.
도 5 는 본 개시의 몇몇 양태들에 따른, 동적 배리어를 이용하여 스레드들을 동기화하는 예시적인 프로세스를 나타내는 플로우차트이다.
도 6 은 본 개시의 몇몇 양태들을 구현하기 위해 구성될 수도 있는 디바이스의 일 예를 나타내는 블록도이다.
일반적으로, 이 개시물은 동적 배리어 폭 계산을 이용하여 병렬로 프로세싱되는 컴퓨팅 명령들을 동기화하기 위한 기술들을 설명한다. 데이터 병렬 프로세싱에서, 컴퓨터 프로그램은 데이터 병렬 코드를 포함할 수도 있다. 데이터 병렬 코드는, 다수의 상이한 데이터 포인트들 상에서 동일한 동작을 병렬로 수행하도록 동일한 컴퓨팅 명령들의 셋트가 실행될 수도 있도록, 다수의 실행 스레드들을 통해 다수의 프로세싱 엘리먼트들 상에서 동시에 실행될 수도 있는 컴퓨팅 명령들의 셋트이다. 다수의 데이터 포인트들 중 하나의 데이터 포인트 상에서 동작하기 위해 동일한 데이터 병렬 코드의 각 개별 호출이 스레드이고, 스레드들은 다수의 데이터 포인트들 상에서 동일한 명령들을 동시에 수행하도록 실행될 수도 있다. 통상적으로, 데이터 병렬 코드는, 데이터의 셋트에 기입하기 위한 기입 동작들, 및 기입 동작들 후에, 기입 동작들에 의해 쓰여졌던 데이터의 셋트를 판독하는 판독 동작들을 포함할 수도 있다. 하지만, 실행되는 매 스레드가 동시에 기입 동작들의 실행을 완료하지 못할 수도 있다. 각 스레드가 데이터의 셋트에 기입하기 위한 기입 동작들을 완료하기 전에 데이터의 셋트에 대한 판독 동작들이 실행되는 경우에는, 그 판독 동작들은 부정확하거나 유효하지 않은 결과들을 판독할 수도 있다. 판독 동작들이 부정확하거나 무효의 유효하지 않은 결과들을 판독하지 않는 것을 보장하기 위해, 각 스레드는, 데이터의 셋트에 대해 판독 동작들을 실행하는 것으로 진행하기 전에 데이터의 셋트에 대한 데이터 병렬 기입 동작들을 실행한 후에 배리어 동작을 실행할 필요가 있을 수도 있고, 데이터 병렬 코드를 실행하기 위한 스레드들 중 어느 것도, 스레드들의 전부가 또한 배리어 동작을 실행 완료할 때까지, 배리어 동작을 실행한 후에 판독 동작들을 실행하는 것으로 진행하도록 허용되지 않을 수도 있다.
도 1 은 본 개시의 몇몇 양태들에 따른 스레드들의 동기화를 나타내는 개념도이다. 도 1 에서 도시된 바와 같이, 스레드들 (102, 104, 106, 및 108) 은 데이터의 셋트에 대해 기입 동작들을 각각 수행하기 위해 그리고 후속하여 그 데이터의 셋트에 대해 판독 동작들을 각각 수행하기 위해 데이터 병렬 코드를 병렬적으로 실행할 수도 있다. 시간 t1 에서, 스레드 (106) 는 그것의 기입 동작들을 마치고 배리어 동작 (110) 에 도달한다. 배리어 동작 (110) 은 스레드 (106) 가 그것의 기입 동작들의 실행을 완료한 것을 나타낸다. 하지만, 모든 스레드가 배리어 동작에 도달하지는 않았기 때문에 (즉, 스레드들 (102, 104, 및 108) 은 각각의 기입 동작들의 실행을 완료하지 않았다), 스레드 (106) 는, 데이터의 셋트를 판독하기 위한 판독 동작들을 실행하는 것으로 진행하기 전에, 다른 스레드들 (102, 104, 및 108) 이 또한 배리어 동작에 도달할 때까지 기다려야만 한다. 시간 t2 에서, 스레드 (102) 가 그것의 기입 동작드을 마쳤기 때문에, 스레드 (102) 는 배리어 동작 (112) 에 도달한다. 스레드 (106) 와 유사하게, 스레드들 (104 및 108) 이 또한 아직 배리어 동작에 도달하지 않았기 때문에, 스레드 (102) 는 또한, 데이터의 셋트를 판독하기 위한 판독 동작들을 실행하는 것으로 진행하기 전에 스레드들 (104 및 108) 이 또한 배리어 동작에 도달할 때까지 대기하여야만 한다. 시간 t3 에서, 스레드 (104) 는 배리어 동작 (114) 에 도달한다. 스레드 (102 및 106) 와 유사하게, 스레드 (108) 가 또한 아직 배리어 동작에 도달하지 않았기 때문에, 스레드 (104) 는 또한, 데이터의 셋트를 판독하기 위한 판독 동작들을 실행하는 것으로 진행하기 전에 스레드 (108) 가 또한 배리어 동작에 도달할 때까지 대기하여야만 한다. 시간 t4 에서, 스레드 (108) 는 배리어 동작 (116) 에 도달한다. 스레드들의 그룹에서의 모든 스레드 (102, 104, 106, 및 108) 가 배리어 동작에 도달했기 때문에, 스레드들 (102, 104, 106, 및 108) 의 각각은 이제 각각, 데이터의 셋트를 판독하기 위해 판독 동작들을 실행하도록 허용된다.
하지만, 그룹에서의 스레드들이 진행하도록 허용하기 전에, 스레드들의 그룹에서의 스레드들이, 스레드들의 그룹에서의 모든 스레드가 배리어 동작에 도달하기를 기다리도록 요구하는 배리어 동작은 비효율적일 수도 있다. 예를 들어, 기입의 실행 후에 수행될 판독 동작들은, 스레드들의 오직 일부 (하지만 전부가 아님) 가 그것의 기입 동작들의 각각의 실행을 마치는 것에 의존할 수도 있다. 따라서, 추가적인 동작들에 의해 의존되는 스레드들의 모두가 배리어 동작에 도달한 경우에도, 그들 스레드들은, 그룹에서의 모든 스레드가 그것의 각각의 기입 동작들을 실행하는 것을 마치고 배리어 동작에 도달할 때까지 그것의 각각의 판독 동작들을 실행할 수 없다.
배리어 동작의 이러한 이용을 나타내는 C 언어로 쓰여진 예시적인 코드 프래그먼트가 다음과 같이 나타내어진다:
local int * ptr; // 공유 메모리 리소스
// 사이즈 32 의 서브그룹들 사이에 리소스들을 공유
if (thread_id % 32) {
ptr[thread_id%32] = value; // 메모리 기입//
}
barrier(); // 모든 스레드들이 메모리 기입을 수행한 것을 확인
x = ptr[thread_id%32]; // 메모리 판독
상기 코드 프래그먼트에서 보는 바와 같이, 배리어 동작은 후속하는 x = ptr[thread_id%32] 이 수행되기 전에 if (thread_id % 32) { ptr[thread_id%32] = value; } 기입 동작을 각각 수행하는 스레드들의 그룹에 대한 동기화 포인트이고, 이에 의해, 그룹에서의 각 스레드가 if (thread_id % 32) { ptr[thread_id%32] = value; } 동작의 수행을 마치고 동기화 포인트에 도달한 후에만, ptr[thread_id%32] 가 판독되고 x 변수가 ptr[thread_id%32] 의 값을 할당받는 것을 보장한다. 하지만, thread_id%32 가 오직 0 내지 31 의 값들을 생성할 것이기 때문에, 그룹이 32 보다 더 많은 스레드들을 포함하는 경우에 스레드들의 그룹에서의 모든 스레드가, x = ptr[thread_id%32] 동작을 수행하기 전에 각 스레드가 배리어 동작을 수행할 때까지 대기할 필요가 없을 수도 있다. 오히려, 32 스레드들의 그룹들이 x = ptr[thread_id%32] 동작이 정확하게 동작할 것을 보장하기를 대기하는 것만이 필요할 수도 있다. 따라서, 스레드들의 그룹이 32 보다 많은 스레드들을 포함하는 경우에, 배리어 동작은 x = ptr[thread_id%32] 동작의 무결성을 보장하기 위해 필요한 것보다 더 많은 스레드들이 대기하도록 요구함에 있어 과도한 것일 수도 있다.
배리어 동작들의 비효율성을 감소시키기 위한 하나의 접근법은 배리어 동작의 폭을 명시하는 것을 포함할 수도 있다. 배리어 동작의 폭은, 스레드들이 배리어 동작을 지나서 진행하는 것을 허용하기 전에 배리어 동작에 도달하도록 요구되는 스레드들의 수일 수도 있고, 그 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 적도록 명시될 수도 있다. 예를 들어, 배리어 동작은 파라미터로서 폭을 취할 수도 있다. 다른 예에서, 폭은 상수로서 명시될 수도 있다. 컴파일 시간에서 배리어 동작에 대한 폭은 배리어 동작을 호출하는 컴퓨터 프로그램으로 하드코딩될 수도 있다. 예시적인 상기 코드 프래그먼트에 대해, 32 의 폭은 배리어 동작에 대해 컴파일 시에 명시될 수도 있다.
하지만, 컴파일 시에 배리어 동작의 폭을 하드코딩하는 것은, 배리어 동작들의 소망되는 폭이 컴파일 시에 알려져 있지 않은 상황들에 대해 그것은 유용하지 않을 수도 있기 때문에, 배리어 동작들의 유용성 및 유연성을 제한할 수도 있다. 또한, 데이터 병렬 코드를 쓰는 프로그래머들은 명시할 적절한 폭을 알지 못할 수도 있다. 따라서, 실행시간에서 배리어 동작들의 폭을 동적으로 계산하는 것이 바람직할 수도 있다.
도 2 는 본 개시의 몇몇 양태들에 따른, 데이터 병렬 코드를 실행하기 위한 병렬 프로세싱 컴퓨팅 시스템을 나타내는 블록도이다. 도 2 에서 도시된 바와 같이, 호스트 (220) 는 프로세싱 유닛 (202) 에 통신가능하게 커플링될 수도 있다. 프로세싱 유닛 (202) 은 계산 유닛들 (204A-204N) ("계산 유닛들 (204)") 을 포함할 수도 있고, 계산 유닛들 (204) 의 각각은 프로세싱 엘리먼트들 (206A-206N) ("프로세싱 엘리먼트들 (206)") 을 포함할 수도 있다.
일부 예들에서, 호스트 (220) 는, 병렬 프로세싱 컴퓨팅 시스템 내에서의 실행을 위해 컴퓨터 프로그램의 명령들을 프로세싱하도록 구성되는, 중앙 처리 유닛 (CPU) 과 같은, 마이크로프로세서일 수도 있다. 일부 예들에서, 호스트 (220) 는, 컴퓨터 프로그램의 실행 동안 데이터 병렬 코드에 맞닥뜨릴 때, 실행을 위해 프로세싱 유닛 (202) 에 데이터 병렬 코드를 통신할 수도 있다.
프로세싱 유닛 (202) 은, 그래픽 프로세싱 유닛 (GPU) 또는 컴퓨터 프로그램들의 명령들의 적어도 일부를 프로세싱하도록 구성되는 임의의 다른 적합한 프로세싱 유닛일 수도 있다. 프로세싱 유닛 (202) 은 호스트 (220) 에 동작가능하게 커플링될 수도 있고, 호스트 (220) 로부터 컴퓨터 프로그램의 데이터 병렬 코드를 수신할 수도 있다. 프로세싱 유닛 (202) 은 계산 유닛들 (204) 과 같은 하나 이상의 프로그래머블 (programmable) 프로세서들을 포함할 수도 있다. 계산 유닛들 (204) 은 프로세싱 엘리먼트들 (206) 을 각각 포함할 수도 있다. 계산 유닛들 (204) 은 로컬 메모리 (즉, 캐시) 를 각각 포함할 수도 있다. 프로세싱 엘리먼트들 (206) 은 각각의 계산 유닛들 (204) 의 프로세싱 코어들일 수도 있다. 예를 들어, 프로세싱 엘리먼트들 (206) 은 하나 이상의 산술 논리 유닛 (ALU) 들 또는 산술적 및 논리적 연산들을 수행하도록 구성된 다른 회로들을 각각 포함할 수도 있다.
다수의 데이터 포인트들 중 하나의 데이터 포인트 상에서 동작하기 위한 동일한 데이터 병렬 코드의 각각의 개별 호출이 스레드이고, 스레드들은 다수의 데이터 포인트들 상에서 동일한 명령들을 수행하기 위해 동시에 실행할 수도 있다. 일부 예들에서, 스레드들은 또한 작업 아이템들 (work items) 로서 알려져 있을 수도 있다. 프로세싱 유닛 (202) 은 스레드들을 블록들로 함께 그룹핑할 수도 있다. 통상적으로, 프로세싱 유닛 (202) 은 동일한 데이터 병렬 코드에 의해 산출되는 스레드들의 전부를 하나 이상의 블록들로 그룹핑할 수도 있다. 일부 예들에서, 블록들은 또한 작업그룹들로서 알려질 수도 있다. 일부 예들에서, 단일 블록에서의 스레드들의 전부는 계산 유닛들 (204) 중 하나 상에서 수행되도록 제한될 수도 있다. 일부 예들에서, 스레드들의 블록은 스레드들의 그룹일 수도 있고, 여기서, 배리어 동작은, 배리어 동작의 폭이 그룹에서의 스레드들의 수보다 더 작도록 명시되거나 결정되지 않는 경우에, 그룹에서의 각 스레드에 적용될 수도 있다. 따라서, 스레드들의 그룹에서의 스레드가 이러한 배리어에 도달하는 경우에는, 스레드가 배리어를 지나서 진행하도록 허용되기 전에 스레드는 그룹에서의 각 스레드가 또한 배리어에 도달하기를 기다려야만 할 수도 있다.
프로세싱 유닛 (202) 은 블록 내의 스레드들을 하나 이상의 워프들 (warps) 또는 웨이브프론트들 (wavefronts) 로 그룹핑할 수도 있다. 웨이브프론트는 계산 유닛들 (204) 에 대한 스케줄링 (scheduling) 의 기본 유닛이고, 통상적으로 블록에서 스레드들의 서브셋트를 포함할 수도 있다. 예를 들어, 512 개의 스레드들의 블록이 주어지면, 웨이브프론트는 32 개의 스레드들을 포함할 수도 있고, 블록에서의 스레드들은 512/32 = 16 워프들로 그룹핑될 수도 있다. 웨이브프론트는 통상적으로, 단일 계산 유닛 (즉, 계산 유닛 (204A)) 에서 프로세싱 엘리먼트들 (206) 이 존재하는 만큼 많은 스레드들을 포함할 수도 있어, 단일 계산 유닛의 프로세싱 엘리먼트들 (206) 은 웨이브프론트에서의 매 스레드를 동시에 프로세싱할 수 있다.
스레드들의 웨이브프론트가 데이터의 다수의 엘리먼트들에 대해 동일한 명령들을 실행하기 때문에, 호스트 (220) 는 웨이브프론트에 의해 프로세싱될 데이터를 데이터의 벡터로 벡터화할 수도 있고, 그 벡터를 프로세싱 유닛 (202) 에 통신할 수도 있다. 통상적으로, 데이터는, 단일 웨이브프론트에서 스레드들이 존재하는 만큼 많은 엘리먼트들을 갖는 벡터들로 그룹핑된다. 다르게 말하면, 웨이브프론트에서의 스레드들의 수는 그것이 위에서 동작하는 데이터의 벡터의 폭과 동일하다. 따라서, 웨이브프론트에서의 스레드들의 수는 웨이브프론트의 벡터 폭으로서 지칭될 수 있다.
상기 논의된 바와 같이, 웨이브프론트는 단일 계산 유닛에서 프로세싱 엘리먼트들 (206) 이 존재하는 많큼 많은 또는 그보다 더 적은 스레드들을 포함한다. 따라서, 웨이브프론트의 스레드들의 전부는, 웨이브프론트에서의 어떤 스레드들도 바쁜 프로세싱 유닛이 동일한 웨이브프론트에서의 다른 스레드를 프로세싱하는 것을 마칠 때까지 대기하여야 하지 않기 때문에, 동시에 단일 계산 유닛의 프로세싱 엘리먼트들 (206) 에 의해 병렬적으로 실행될 수 있다. 따라서, 단일 웨이브프론트의 스레드들은 실질적으로 병렬적으로 실행하도록 보장될 수도 있어, 배리어 동작은 단일 웨이브프론트 내의 스레드들을 동기화하도록 요구되지 않을 수도 있다.
계산 유닛 (204) 중 하나는 계산 유닛 (204) 의 프로세싱 엘리먼트들 (206) 을 이용하여 하나 이상의 웨이브프론트들을 병렬적으로 실행할 수도 있다. 블록의 스레드들이 실행될 때, 블록의 스레드들을 동기화하기 위해 배리어 동작들이 이용될 수도 있다. 상기 논의된 바와 같이, 배리어 동작은, 블록의 스레드들이, 블록의 모든 스레드들이 배리어 동작을 수행할 때까지 대기하도록 요구될 수도 있다.
시퀀서 (208) 는 계산 유닛들 (204) 사이에서의 데이터 병렬 코드의 실행을 관리 및 스케줄링하도록 구성될 수도 있다. 예를 들어, 시퀀서 (208) 는 계산 유닛들 (204) 의 웨이브프론트들 및 스레드들의 블록들의 실행을 스케줄링할 수도 있다. 시퀀서 (208) 는 또한 스레드들의 블록들을 동기화하도록 구성될 수도 있다. 예를 들어, 시퀀서 (208) 는, 그들 스레드들이, 배리어 동작을 수행하였고, 실행하기를 기다리고 있는 다른 스레드들이 프로세싱 엘리먼트들 (206) 에 의해 프로세싱되도록 허용하기 위해 그것의 블록의 다른 스레드들이 그들의 각각의 배리어 동작들을 수행하기를 기다리는 동안 휴지 상태에 있는 경우에, 프로세싱 엘리먼트들 (206) 로부터 스레드들을 언로드 (unload) 할 수도 있다. 시퀀서 (208) 는 또한, 블록의 스레드들이 모두 배리어 동작들을 수행하였다고 결정 시, 휴지 상태의 스레드들을 다시 프로세싱 엘리먼트들 (206) 에 리로드 (reload) 할 수도 있다.
시퀀서 (208) 는 그룹에서의 스레드들에 의해 실행되어야 하는 데이터 병렬 코드에 기초하여 다수의 데이터 포인트들 상에서 동일한 데이터 병렬 코드를 실행하고 있는 스레드들의 그룹에 대해 배리어 동작의 폭을 동적으로 결정할 수도 있고, 결정된 폭은 그룹에서의 스레드들의 총 수보다 더 작다. 일부 예들에서, 그룹은 스레드들의 블록일 수도 있다. 배리어 동작의 폭은, 스레드들 중 임의의 것이 배리어 동작에 후속하는 동작들을 실행하도록 허용되기 전에 배리어 동작에 도달하여야만 하는 블록에서의 스레드들의 수일 수도 있다. 결정된 폭은 그룹에서의 스레드들의 총 수보다 더 작기 때문에, 시퀀서 (208) 는, 배리어 폭을 결정함으로써, 그룹에서의 모든 스레드가 각각의 배리어 동작에 도달하지 않은 경우에도, 그룹의 스레드들로 하여금 배리어 동작들에 후속하는 동작들을 실행하도록 허용할 수도 있다.
시퀀서 (208) 는, 배리어 동작 이전의 및/또는 배리어 동작에 후속하는 그 양자의, 그룹에서의 스레드들에 의해 실행되어야 하는 데이터 병렬 코드에 기초하여 스레드들의 그룹에 대한 배리어 동작의 폭을 결정할 수도 있다. 예를 들어, 상기 코드 프래그먼트에 기초하여, 시퀀서 (208) 는, 배리어 동작 이전에 데이터 병렬 코드가 32 ptr 어레이 로케이션들을 기입할 것이고, 배리어 동작에 후속하여 데이터 병렬 코드가 32 ptr 어레이 로케이션들로부터 판독할 것이라고 결정할 수도 있다. 따라서, 시퀀서는 특정 배리어 동작에 대해 32 의 배리어 폭을 결정할 수도 있다.
하나의 예에서, 시퀀서 (208) 는 동적으로 결정된 배리어 동작들의 배리어 폭들을 하나 이상의 폭 레지스터들에 저장할 수도 있다. 스레드가 폭 레지스터에 저장된 그것의 배리어 폭을 갖는 배리어 동작들에 도달하는 것에 응답하여, 하나 이상의 폭 레지스터들에서의 수는 감분 (decrement) 된다. 하나 이상의 폭 레지스터들에서의 수가 제로에 도달하는 것에 응답하여, 배리어 동작에 도달한 후에 대기하고 있던 블록에서의 임의의 스레드들은 실행을 계속하도록 허용될 수도 있다. 다른 예에서, 시퀀서 (208) 는, 배리어 동작의 폭을 나타내는 수를 저장하는 폭 레지스터, 및 블록에서의 다른 스레드들이 배리어에 도달하기를 대기하고 있는 스레드들의 수를 저장하는 대기 레이스터 양자를 포함할 수도 있다. 스레드가 배리어 동작에 도달하는 것에 응답하여, 대기 레지스터에서의 수는 증분 (increment) 된다. 대기 레지스터에서의 수가 폭 레지스터에서의 수와 동일하게 되는 것에 응답하여, 배리어 동작에 도달한 후에 대기하고 있는 블록에서의 임의의 스레드들은 실행을 계속하도록 허용될 수도 있다.
일부 예들에서, 배리어 폭을 동적으로 결정하는 것은, 데이터 병렬 코드를 포함하는 컴퓨터 프로그램들의 개발자들로 하여금 다양한 병렬 컴퓨팅 시스템에 걸쳐 실행될 수도 있는 크로스-플랫폼 데이터 병렬 코드를 보다 쉽게 쓰는 것을 가능하게 할 수도 있다. 예를 들어, 일부 병렬 컴퓨팅 시스템들은, 단일 웨이브프론트에서의 모든 스레드가 동시에 실행할 수 있는 것을 보장할 수도 있어, 배리어의 폭이 웨이브프론트의 벡터 폭보다 더 적은 경우에는, 배리어 동작이 불필요하게 된다. 예를 들어, 웨이브프론트의 벡터 폭이 16 인 경우에, 계산 유닛이 16 개의 프로세싱 엘리먼트들을 포함하고 있는 등 때문에, 16 이하의 배리어 폭을 갖는 배리어 동작들은 불필요할 수도 있다. 하지만, 컴퓨터 프로그래머는, 그의 데이터 병렬 코드가 어느 병렬 컴퓨팅 시스템에서 실행될 것인지를 정확하게 알지 못할 수도 있고 따라서 병렬 프로세싱 시스템을 위해 계산 유닛이 얼마나 많은 프로세싱 엘리먼트들을 포함하는지를 알지 못할 수도 있기 때문에, 컴퓨터 프로그래머가 특정 병렬 컴퓨팅 시스템에 대해 웨이브프론트의 벡터 폭보다 적은 배리어 폭을 하드코딩하는 경우에는, 그 데이터 병렬 코드는, 그 특정 병렬 컴퓨팅 시스템 상에서 실행될 때, 관련없는 배리어 동작들을 수행할 수도 있고, 데이터 병렬 코드의 실행을 느리게 할 수도 있다. 반면, 시퀀서 (208) 는, 특정 병렬 컴퓨팅 시스템에 대해 웨이브프론트들의 벡터 폭 및 배리어 동작의 배리어 폭을 결정할 수도 있고, 그 결정된 배리어 폭이, 데이터 병렬 코드가 실행되는 병렬 컴퓨팅 시스템에 대한 웨이브프론트의 벡터 폭보다 더 적은 경우에, 그 배리어 동작을 수행하지 않도록 결정할 수도 있다. 일부 예들에서, 시퀀서 (208) 는 웨이브프론트들의 벡터 폭보다 더 큰 배리어 폭들을 결정할 수도 있다.
배리어 폭들을 동적으로 계산하는 것은 또한, 동적 제어 플로우의 조건문들 (conditional statements) 에서 배리어 동작들의 이용을 가능하게 할 수도 있고, 여기서, 조건문들은 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는다. 다음의 의사코드를 고려해보자:
if (x < y) {
// 참인 진술문들
barrier();
}
else {
// 거짓인 진술문들
}
통상적으로, 스레드들의 그룹에 대해, 조건 x<y 가 매 스레드에서 참으로서 평가되지 않는 경우에는, 조건 x<y 가 참으로 평가되는 경우에만 수행되도록 배리어 동작을 포함하는 것은, x<y 가 거짓으로서 평가되는 스레드들은 배리어 동작을 절대 수행하지 않을 것이기 때문에, 그룹에서의 스레드들의 그룹이 데드락 (deadlock) 하게끔 할 수도 있다. 반면, 본 개시물에서, 시퀀서 (208) 는, 값들 x 및 y 의 셋트에 대해 x<y 를 사전평가하는 등에 의해, x<y 가 참으로서 평가되는 횟수와 동일하게 배리어의 폭을 동적으로 설정할 수도 있다. 따라서, 배리어의 폭이 4 로서 설정되는 경우에는, 배리어된 스레드들은, 작업 아이템들의 그룹에서의 스레드들의 나머지가 배리어 동작을 실행하는 것을 기다릴 필요 없이 일단 4 개의 스레드들이 배리어 동작을 실행했으면 배리어를 지나서 계속할 수도 있다.
시퀀서 (208) 는 스레드들의 서브그룹들을 함께 동기화할 배리어 동작의 배리어 폭을 또한 결정할 수도 있고, 여기서, 서브그룹들의 스레드들은 블록의 연속적인 스레드들이다. 예를 들어, 16 개의 스레드들 t0, t1, … , t15 의 블록이 주어지면, 스레드들의 배리어 동작들에 대한 배리어 폭이 4 로서 특정되는 경우에, 블록의 제 1 의 4 개의 스레드들 t0 내지 t3 이 함께 동기화될 수도 있고, 블록의 제 2 의 4 개의 스레드들 t4 내지 t7 이 함께 동기화될 수도 있으며, 블록의 제 3 의 4 개의 스레드들 t8 내지 t11 이 함께 동기화될 수도 있고, 블록의 제 4 의 4 개의 스레드들 t12 내지 t15 이 함께 동기화될 수도 있다. 이 예에서, 스레드들 t0 내지 t3 의 그룹에서의 각 스레드는 그것의 실행에서 진행할 수 있게 되기 전에 그룹에서의 스레드들 t0 내지 t3 의 전부가 배리어 동작을 실행하는 것을 대기하도록만 요구될 수도 있고, 스레드들 t4 내지 t7 의 그룹에서의 각 스레드는 그것의 실행에서 진행할 수 있게 되기 전에 그룹에서의 스레드들 t4 내지 t7 의 전부가 배리어 동작을 실행하는 것을 대기하도록만 요구될 수도 있으며, 스레드들 t8 내지 t11 의 그룹에서의 각 스레드는 그것의 실행에서 진행할 수 있게 되기 전에 그룹에서의 스레드들 t8 내지 t11 의 전부가 배리어 동작을 실행하는 것을 대기하도록만 요구될 수도 있고, 스레드들 t12 내지 t15의 그룹에서의 각 스레드는 그것의 실행에서 진행할 수 있게 되기 전에 그룹에서의 스레드들 t12 내지 t15 의 전부가 배리어 동작을 실행하는 것을 대기하도록만 요구될 수도 있다. 따라서, 스레드들 t1, t8, t2, 및 t3 이 배리어 동작에 도달하는 처음 4 개의 스레드들인 경우에, t1, t2, 및 t3 은, 비록 16 개의 스레드들의 블록의 4 개의 스레드들이 배리어 동작에 도달하였음에도 불구하고, 그들 t1, t2, 및 t3 이 배리어 동작을 지나서 실행을 계속하도록 허용되기 전에 스레드 t4 가 배리어 동작에 도달하는 것을 기다리도록 요구될 수도 있다.
도 3 은 본 개시의 몇몇 양태들에 따른, 동적 배리어 폭을 이용한 스레드들의 동기화를 나타내는 개념도이다. 도 3 에서 나타낸 바와 같이, 도 2 에 도시된 시퀀서 (208) 와 같은 시퀀서는, 스레드들 (302 및 304) 이 함께 동기화될 수도 있음을, 그리고, 스레드들 (306 및 308) 이 함께 동기화될 수도 있음을 결정할 수도 있다. 따라서, 시퀀서는 데이터 병렬 코드를 병렬적으로 실행할 수도 있는 스레드들 (302, 304, 306, 및 308) 에 대해 2 의 배리어 폭을 결정할 수도 있다. 따라서, 스레드들 (302 및 304) 은 스레드들의 서브그룹으로 그룹핑되고, 스레드들 (306 및 308) 은 스레드들의 다른 서브그룹으로 그룹핑될 수도 있다. 시간 t1 에서, 스레드 (306) 는 그것의 기입 동작의 실행을 마쳤고, 배리어 동작 (310) 에 도달한다. 하지만, 그것의 서브그룹의 모든 스레드가 또한 그 각각의 기입 동작들의 실행을 마치고 배리어 동작에 도달하지는 못하였기 때문에, 스레드 (306) 는, 배리어 동작 (310) 에 후속하는 판독 동작을 실행하는 것으로 진행하기 전에, 서브그룹에서의 다른 스레드 (즉, 스레드 (308)) 가 또한 그것의 기입 동작의 실행을 마치고 배리어 동작에 도달할 때까지 대기하여야만 한다. 시간 t2 에서, 스레드 (302) 는 기입 동작을 실행하는 것을 마치고, 배리어 동작 (312) 에 도달한다. 유사하게, 스레드 (302) 의 서브그룹의 다른 멤버인 스레드 (304) 가 또한 아직 기입 동작의 실행을 마치고 배리어 동작에 도달한 것이 아니기 때문에, 스레드 (302) 는 또한 배리어 동작 (312) 에 후속하여 코드를 실행하는 것을 진행하기 전에 대기하여야만 한다. 시간 t3 에서, 스레드 (304) 는 배리어 동작 (314) 에 도달한다. 양 스레드들 (302 및 304) 이 배리어 동작들 (312 및 314) 에 도달하였기 때문에, 스레드들 (302 및 304) 은 배리어 동작 (314) 에 후속하여 각각의 판독 동작들을 실행하는 것을 진행할 수도 있다. 시간 t4 에서, 스레드 (308) 는 배리어 동작 (316) 에 도달한다. 양 스레드들 (306 및 308) 이 배리어 동작에 도달하였기 때문에, 스레드들 (306 및 308) 은 이제 그것의 각각의 배리어 동작들에 후속하여 각각의 판독 동작들을 실행하도록 허용된다. 도 3 에서 볼 수 있는 바와 같이, 스레드들의 그룹에서의 스레드들의 총 수보다 작은 배리어 폭을 설정함으로써, 스레드들은 훨씬 더 빨리 배리어를 지나 실행을 재개하는 것이 가능할 수도 있다. 실례로서, 스레드들의 그룹에서의 스레드들의 총 수보다 작은 배리어 폭을 설정하지 않음으로써, 스레드들 (302, 304, 및 306) 은, 시간들 t1, t2, 및 t3 보다 더 나중의 시간 t4 에서 스레드 (308) 가 배리어 동작 (316) 을 실행할 때까지, 각각의 배리어 동작들 (310, 312, 및 314) 을 실행한 후에 휴지 상태를 유지할 것이다.
배리어 동작의 폭을 동적으로 결정하는 것은, 특히 감소될 수들의 집합의 사이즈가 실행시간까지 알려지지 않을 때, 병렬적 감축에서 유용할 수도 있다. 감축 (reduction) 은 수들의 집합을 합산하기 위한 기술이고, 병렬적 감축은, 데이터 병렬 코드가 병렬적으로 감축의 엘리먼트들을 합산하기 위해 실행할 수 있는 감축일 수도 있다. 도 4 는 본 개시의 일부 양태들에 따른, 예시적인 병렬적 감축을 나타내는 개넘도이다. 도 4 에서 도시된 바와 같이, 어레이 (402) 는 함께 합산될 8 개의 수들의 집합을 포함할 수도 있다. 감축을 수행할 데이터 병렬 코드는 각 작업 아이템이 어레이 (402) 의 2 개의 연속적인 엘리먼트들을 함께 합산하도록 실행할 수도 있다. 따라서, 병렬적 감축의 제 1 패스 (pass) 에서, 합산 동작들 (sum operations) (404A-404D) ("합산 동작들 (404)") 은, 8 개의 엘리먼트 어레이 (402) 를 합산 동작들 (404) 의 각각으로부터 유래하는 4 개의 결과적인 합들을 포함하는 4 개의 엘리먼트 어레이 (406) 로 감소시키기 위해 어레이 (402) 의 엘리먼트들 중 2 개를 각각 합산하기 위해 4 개의 병렬적 스레드들을 통해 병렬적으로 실행될 수도 있다.
하지만, 집합의 사이즈가 실행시간에서 알려지지 않을 수도 있기 때문에, 프로그래머가 컴파일 시에 병렬적 감축을 수행하기 위해 데이터 병렬 코드에서 배리어 동작들을 위해 필요한 정확한 배리어 폭을 아는 것은 불가능할 수도 있다. 예를 들어, 집합의 사이즈는 사용자 입력에 의존할 수도 있어서, 사용자는 8 개의 수들, 20 개의 수들, 또는 임의의 다른 셋트들의 수들을 입력할 수도 있다. 도 4 에서 나타낸 특정 예에서, 도 2 에서 도시된 시퀀서 (208) 와 같은 시퀀서는 어레이 (402) 의 사이즈 (8) 에 기초하여, 합산 동작들 (404) 을 수행하는 것에 후속하여 4 개의 스레드들에 의해 수행될 배리어 동작들에 대해 4 의 배리어 폭을 결정할 수도 있다.
합산 동작들 (404) 을 통한 감축의 제 1 라운드는 4 개의 결과적인 엘리먼트들을 포함하는 어레이 (406) 를 생성할 수도 있다. 어레이 (406) 의 엘리먼트들을 추가적으로 감소시키기 위해, 오직 2 개의 스레드들만이 합산 동작들 (408A 및 408B) ("합산 동작들 (408)") 을 수행하기 위해 필요할 수도 있다. 따라서, 시퀀서는, 어레이 (406) 의 사이즈 (4) 에 기초하여, 합산 동작들 (408) 을 수행하는 것에 후속하여 2 개의 스레드들에 의해 수행될 배리어 동작들에 대해 2 의 배리어 폭을 결정할 수도 있다.
합산 동작들 (408) 을 통한 감축의 제 2 라운드는 2 개의 결과적인 엘리먼트들을 포함하는 어레이 (410) 를 생성할 수도 있다. 어레이 (410) 의 엘리먼트들을 추가적으로 감소시키기 위해, 오직 단일의 스레드만이 합산 동작 (412) 을 수행하기 위해 필요할 수도 있다. 따라서, 시퀀서는 배리어 동작이 수행될 필요가 없음을 결정할 수도 있다. 따라서, 시퀀서는 합산 동작 (412) 을 수행한 후에 코드에서 명시된 배리어 동작을 무시하도록 결정할 수도 있다.
합산 감축을 수행하기 위해 데이터 병렬 코드는 통상적으로 루프 (loop) 로서 쓰여져서, 배리어 동작은 루프 내에 포함된다. 따라서, 배리어 동작의 폭이 컴파일 시에 설정되어야 하는 경우, 프로그래머가 감소할 집합에서의 엘리먼트들의 초기 수를 안다고 가정하면, 프로그래머는 합산 동작들의 각 셋트 후에 특정 폭의 배리어 동작들을 수동으로 삽입하기 위해 루프를 펼쳐야만 할 수도 있다. 반면, 현재의 예에서, 합성기는 배리어 동작의 각 반복 (iteration) 에 대해 배리어 폭을 동적으로 결정할 수도 있다.
도 5 는 본 개시의 몇몇 양태들에 따른, 동적 배리어를 이용하여 스레드들을 동기화하는 예시적인 프로세스를 나타내는 플로우차트이다. 도 5 에 나타낸 바와 같이, 도 2 에서 도시된 시퀀서 (208) 와 같은 시퀀서는, 호스트에 동작가능하게 커플링된, 도 2 에서 도시된 프로세싱 유닛 (202) 과 같은 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는, 도 2 에서 도시된 호스트 (220) 와 같은 호스트 상에서 실행되는 컴퓨터 애플리케이션의 실행시간에서, 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정할 수도 있고, 여기서, 배리어 폭은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다 (502). 도 5 의 예에서, 스레드들의 그룹은 64 개의 스레드들을 포함할 수도 있고, 시퀀서는 32 의 배리어 폭을 결정할 수도 있다. 따라서, 64 개의 스레드들은 각각 32 개의 스레드들의 2 개의 서브그룹들을 포함할 수도 있고, 여기서, 서브그룹의 스레드들은 동일한 서브그룹의 다른 스레드들과 동기화된다. 제 1 시간에서, 스레드들의 그룹의 제 1 서브그룹의 제 1 스레드가 배리어에 도달할 수도 있고 (504), 제 1 서브그룹의 스레드들의 나머지가 또한 배리어에 도달하기를 기다릴 수도 있다. 제 2 시간에서, 스레드들의 그룹의 제 2 서브그룹의 제 1 스레드가 배리어에 도달할 수도 있고 (506), 제 2 서브그룹의 스레드들의 나머지가 또한 배리어에 도달하기를 기다릴 수도 있다.
제 3 시간에서, 제 1 서브그룹의 모든 스레드들이 배리어에 도달할 수도 있다 (508). 시퀀서는, 스레드들의 그룹의 제 1 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는 제 1 서브그룹은, 스레드들의 그룹의 제 1 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이, 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서 실행하도록 인에이블할 수도 있고, 여기서, 스레드들의 그룹에서의 제 1 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다 (510).
제 4 시간에서, 제 2 서브그룹의 모든 스레드들이 배리어에 도달할 수도 있다 (512). 시퀀서는, 스레드들의 그룹의 제 2 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 결정된 배리어 폭과 동일한 수의 스레드들을 포함하는 제 2 서브그룹은, 스레드들의 그룹의 제 2 서브그룹으로 하여금, 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이, 각각의 배리어 동작들에 후속하여 하나 이상의 계산 유닛들 상에서 실행하도록 인에이블할 수도 있고, 여기서, 스레드들의 그룹에서의 제 2 서브그룹은 스레드들의 그룹에서의 스레드들의 총 수보다 더 작다 (514).
일부 예들에서, 배리어 폭을 결정하는 것은, 데이터 병렬 코드에 적어도 부분적으로 기초하여 배리어 동작의 배리어 폭을 결정하는 것을 포함할 수도 있다. 일부 예들에서, 배리어 동작의 배리어 폭은 하나 이상의 프로세서들의 웨이브프론트의 벡터 폭보다 더 크다. 일부 예들에서, 시퀀서는 또한, 하나 이상의 프로세서들에 대해 배리어 동작의 배리어 폭이 웨이브프론트의 벡터 폭보다 더 작은 경우에, 배리어 동작을 수행하지 않도록 결정할 수도 있다. 일부 예들에서, 배리어 동작은 조건문에 포함되고, 그 조건문은 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는다. 일부 예들에서, 스레드들의 그룹의 서브그룹에서의 스레드들은 스레드들의 그룹에서 연속적인 스레드들이다. 일부 예들에서, 배리어 동작은 루프 내에 포함된다. 일부 예들에서, 시퀀서는 루프의 각각의 반복에 대해 배리어 동작의 배리어 폭을 동적으로 결정할 수도 있고, 여기서, 결정된 배리어 폭은 루프의 적어도 2 개의 반복들에서 상이하다.
도 6 은 본 개시의 하나 이상의 양태들을 구현하기 위해 구성될 수도 있는 디바이스의 일 예를 나타내는 블록도이다. 예를 들어, 도 6 은 디바이스 (602) 를 도시한다. 디바이스 (602) 의 예들은, 비디오 디바이스들, 미디어 플레이어들, 셋-톱 박스들, 모바일 전화기들 및 소위 스마트폰들과 같은 무선 핸드셋들, 휴대용 개인 정보 단말기 (PDA) 들, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 게이밍 콘솔들, 비디오 회의 유닛들, 태블릿 컴퓨팅 디바이스들 등을 포함하고, 하지만 이에 한정되는 것은 아니다.
도 6 의 예에서, 디바이스 (602) 는 호스트 (610), 시스템 메모리 (618), 및 프로세싱 유닛 (620) 을 포함할 수도 있다. 호스트 (610) 는 도 2 에 도시된 호스트 (220) 와 유사할 수도 있고, 프로세싱 유닛 (620) 은 도 2 에 도시된 프로세싱 유닛 (202) 과 유사할 수도 있다. 간략함을 위해, 호스트 (610), 시스템 메모리 (618), 및 프로세싱 유닛 (620) 은 도 6 과 관련하여 추가로 설명되지 않는다. 디바이스 (622) 는 또한, 디스플레이 프로세서 (624), 트랜시버 모듈 (626), 사용자 인터페이스 (628), 및 디스플레이 (630) 를 포함할 수도 있다. 트랜시버 모듈 (626) 및 디스플레이 프로세서 (624) 는 양자 모두, 호스트 (610) 및/또는 프로세싱 유닛 (620) 과 동일한 집적 회로 (IC) 의 일부일 수도 있고, 양자 모두 호스트 (610) 및/또는 프로세싱 유닛 (620) 을 포함하는 IC 또는 IC 들 외부에 있을 수도 있으며, 또는, 호스트 (610) 및/또는 프로세싱 유닛 (620) 을 포함하는 IC 외부에 있는 IC 에 형성될 수도 있다.
디바이스 (622) 는 명확성을 위해 도 6 에 도시되지 않은 부가적인 모듈들 또는 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (622) 는, 디바이스 (622) 가 모바일 무선 전화기인 예들에서 전화 통신들을 달성하기 위해, 도 6 에 도시되지 않은 스피커와 마이크로폰을 포함할 수도 있고, 또는 디바이스 (622) 가 미디어 플레이어인 경우에 스피커를 포함할 수도 있다. 디바이스 (622) 는 또한 비디오 카메라를 포함할 수도 있다. 또한, 디바이스 (622) 에 나타낸 다양한 모듈들 및 유닛들은 디바이스 (622) 의 모든 예에서 필수적인 것은 아닐 수도 있다. 예를 들어, 디바이스 (622) 가 데스크톱 컴퓨터이거나 외부 사용자 인터페이스 또는 디스플레이와 인터페이스하도록 구비된 다른 디바이스인 예들에서 사용자 인터페이스 (628) 및 디스플레이 (630) 는 디바이스 (622) 외부에 있을 수도 있다.
사용자 인터페이스 (628) 의 예들로는 트랙볼, 마우스, 키보드, 및 다른 타입들의 입력 디바이스들을 포함하지만, 이들로 제한되지 않는다. 사용자 인터페이스 (628) 는 또한 터치 스크린일 수도 있고 디스플레이 (630) 의 부분으로서 통합될 수도 있다. 트랜시버 모듈 (626) 은 디바이스 (622) 와 다른 디바이스 또는 네트워크 사이의 무선 또는 유선 통신을 허용하는 회로부를 포함할 수도 있다. 트랜시버 모듈 (626) 은 변조기들, 복조기들, 증폭기들 및 유선 또는 무선 통신을 위한 다른 이러한 회로부를 포함할 수도 있다.
일부 예들에서, 프로세싱 유닛 (620) 은 시스템 메모리 (618) 에서 충분히 형성된 이미지를 저장할 수도 있는 GPU 일 수도 있다. 디스플레이 프로세서 (624) 는 시스템 메모리 (618) 로부터 이미지를 취출할 수도 있고, 디스플레이 (630) 의 픽셀들로 하여금 이미지를 디스플레이하도록 빛나게 하는 값들을 출력할 수도 있다. 디스플레이 (630) 는 프로세싱 유닛 (620) 에 의해 생성된 이미지 콘텐츠를 디스플레이하는 디바이스 (622) 의 디스플레이일 수도 있다. 디스플레이 (630) 는 액정 디스플레이 (LCD), 유기 발광 다이오드 디스플레이 (OLED), 음극선관 (CRT) 디스플레이, 플라즈마 디스플레이, 또는 다른 타입의 디스플레이 디바이스일 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 그 기능들은 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장되거나 컴퓨터 판독가능 매체 상의 하나 이상의 명령들 또는 코드로 송신될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 데이터 저장 매체는 본 개시물에 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수도 있다. 제한이 아닌 예시로서, 이러한 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광 디스크 스토리지, 자기 디스크 스토리지, 또는 다른 자기 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 운반 또는 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 데이터 저장 매체 상에 저장된 소프트웨어는 동축 케이블, 광섬유 케이블, 트위스티드 페어, 디지털 가입자 회선 (DSL), 또는 적외선, 무선 및 마이크로파와 같은 무선 기술들을 이용하여 웹사이트, 서버 또는 다른 원격 소스로부터 송신될 수도 있고, 그러면, 동축 케이블, 광섬유 케이블, 트위스티드 페어, DSL, 또는 적외선, 무선 및 마이크로파와 같은 무선 기술들이 매체의 정의에 포함된다. 디스크 (disk) 및 디스크 (disc) 는, 본 명세서에서 사용된 바와 같이, 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서 디스크 (disk) 는 보통 데이터를 자기적으로 재생시키는 한편, 디스크 (disc) 는 레이저를 이용하여 데이터를 광학적으로 재생시킨다. 상기한 것들의 조합들이 또한 컴퓨터 판독가능 매체의 범주 내에 포함되어야 한다.
코드는 하나 이상의 프로세서들, 예컨대, 하나 이상의 디지털 신호 프로세서 (DSP) 들, 범용 마이크로프로세서들, 주문형 집적 회로 (ASIC) 들, 필드 프로그래머블 로직 어레이 (FPGA) 들, 또는 다른 등가의 집적 또는 이산 논리 회로부에 의해 실행될 수도 있다. 따라서, 용어 "프로세서" 는, 본 명세서에서 사용된 바와 같이, 임의의 전술한 구조 또는 본 명세서에서 설명된 기법들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 일부 양태들에서, 본 명세서에서 설명된 기능성은 전용 하드웨어 및/또는 소프트웨어 모듈들 내에 제공될 수도 있다. 또한, 그 기술들은 하나 이상의 회로들 또는 로직 엘리먼트들 내에 완전히 구현될 수 있을 것이다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 셋트 (예를 들어, 칩 셋트) 를 포함하는, 매우 다양한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시물에서 설명되지만, 반드시 상이한 하드웨어 유닛들에 의한 실현을 요구하지는 않는다. 오히려, 상술된 바와 같이, 다양한 유닛들은 코덱 하드웨어 유닛에 결합되거나, 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 상술된 바와 같은 하나 이상의 프로세서들을 포함하는, 상호동작적인 하드웨어 유닛들의 콜렉션에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 예들은 하기의 청구항들의 범주 내에 있다.

Claims (32)

  1. 스레드들을 동기화하는 방법으로서,
    호스트에 동작가능하게 커플링된 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는 상기 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 상기 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 상기 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 단계로서, 상기 배리어 폭은 상기 스레드들의 그룹에서의 스레드들의 총 수보다 더 작은, 상기 배리어 동작의 배리어 폭을 결정하는 단계; 및
    상기 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 상기 스레드들의 그룹의 상기 서브그룹으로 하여금, 상기 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 상기 각각의 배리어 동작들에 후속하는 상기 하나 이상의 계산 유닛들 상에서의 각각의 동작들을 실행하도록 인에이블하는 단계를 포함하고,
    상기 서브그룹은 결정된 상기 배리어 폭과 동일한 수의 스레드들을 포함하고, 상기 스레드들의 그룹의 상기 서브그룹은 상기 스레드들의 그룹에서의 상기 스레드들의 총 수보다 더 작은, 스레드들을 동기화하는 방법.
  2. 제 1 항에 있어서,
    상기 배리어 동작의 배리어 폭을 결정하는 단계는, 상기 데이터 병렬 코드에 적어도 부분적으로 기초하여 상기 배리어 동작의 상기 배리어 폭을 결정하는 단계를 포함하는, 스레드들을 동기화하는 방법.
  3. 제 1 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭은 상기 하나 이상의 계산 유닛들의 웨이브프론트 (wavefront) 의 벡터 폭보다 더 큰, 스레드들을 동기화하는 방법.
  4. 제 1 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭이 상기 하나 이상의 계산 유닛들에 대한 웨이브프론트의 벡터 폭보다 더 작은 경우에, 상기 배리어 동작을 수행하지 않도록 결정하는 단계를 더 포함하는, 스레드들을 동기화하는 방법.
  5. 제 1 항에 있어서,
    상기 배리어 동작은 조건문에 포함되고, 상기 조건문은 상기 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는, 스레드들을 동기화하는 방법.
  6. 제 1 항에 있어서,
    상기 스레드들의 그룹의 상기 서브그룹에서의 스레드들은 상기 스레드들의 그룹에서의 연속적인 스레드들인, 스레드들을 동기화하는 방법.
  7. 제 1 항에 있어서,
    상기 배리어 동작은 루프 내에 포함되는, 스레드들을 동기화하는 방법.
  8. 제 7 항에 있어서,
    상기 루프의 각각의 반복에 대해 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 단계로서, 결정된 상기 배리어 폭은 상기 루프의 적어도 2 개의 반복들에서 상이한, 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 단계를 더 포함하는, 스레드들을 동기화하는 방법.
  9. 스레드들을 동기화하기 위한 컴퓨팅 시스템으로서,
    호스트;
    상기 호스트에 동작가능하게 커플링된 프로세싱 유닛; 및
    시퀀서 모듈을 포함하고,
    상기 시퀀서 모듈은,
    상기 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는 상기 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 상기 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 상기 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 것으로서, 상기 배리어 폭은 상기 스레드들의 그룹에서의 스레드들의 총 수보다 더 작은, 상기 배리어 동작의 배리어 폭을 결정하는 것, 및
    상기 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 상기 스레드들의 그룹의 상기 서브그룹으로 하여금, 상기 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 상기 각각의 배리어 동작들에 후속하는 상기 하나 이상의 계산 유닛들 상에서의 각각의 동작들을 실행하도록 인에이블하는 것을 행하도록 구성되고,
    상기 서브그룹은 결정된 상기 배리어 폭과 동일한 수의 스레드들을 포함하고, 상기 스레드들의 그룹의 상기 서브그룹은 상기 스레드들의 그룹에서의 상기 스레드들의 총 수보다 더 작은, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  10. 제 9 항에 있어서,
    상기 배리어 동작의 배리어 폭을 결정하는 것은, 상기 데이터 병렬 코드에 적어도 부분적으로 기초하여 상기 배리어 동작의 상기 배리어 폭을 결정하는 것을 포함하는, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  11. 제 9 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭은 상기 하나 이상의 계산 유닛들의 웨이브프론트 (wavefront) 의 벡터 폭보다 더 큰, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  12. 제 9 항에 있어서,
    상기 시퀀서 모듈은, 상기 배리어 동작의 상기 배리어 폭이 상기 하나 이상의 계산 유닛들에 대한 웨이브프론트의 벡터 폭보다 더 작은 경우에, 상기 배리어 동작을 수행하지 않도록 결정하도록 더 구성되는, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  13. 제 9 항에 있어서,
    상기 배리어 동작은 조건문에 포함되고, 상기 조건문은 상기 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  14. 제 9 항에 있어서,
    상기 스레드들의 그룹의 상기 서브그룹에서의 스레드들은 상기 스레드들의 그룹에서의 연속적인 스레드들인, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  15. 제 9 항에 있어서,
    상기 배리어 동작은 루프 내에 포함되는, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  16. 제 15 항에 있어서,
    상기 시퀀서 모듈은, 상기 루프의 각각의 반복에 대해 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 것으로서, 결정된 상기 배리어 폭은 상기 루프의 적어도 2 개의 반복들에서 상이한, 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 것을 행하도록 더 구성되는, 스레드들을 동기화하기 위한 컴퓨팅 시스템.
  17. 병렬 프로세싱 장치로서,
    호스트에 동작가능하게 커플링된 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는 상기 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 상기 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 상기 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 수단으로서, 상기 배리어 폭은 상기 스레드들의 그룹에서의 스레드들의 총 수보다 더 작은, 상기 배리어 동작의 배리어 폭을 결정하는 수단; 및
    상기 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 상기 스레드들의 그룹의 상기 서브그룹으로 하여금, 상기 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 상기 각각의 배리어 동작들에 후속하는 상기 하나 이상의 계산 유닛들 상에서의 각각의 동작들을 실행하도록 인에이블하는 수단을 포함하고,
    상기 서브그룹은 결정된 상기 배리어 폭과 동일한 수의 스레드들을 포함하고, 상기 스레드들의 그룹의 상기 서브그룹은 상기 스레드들의 그룹에서의 상기 스레드들의 총 수보다 더 작은, 병렬 프로세싱 장치.
  18. 제 17 항에 있어서,
    상기 배리어 동작의 배리어 폭을 결정하는 수단은, 상기 데이터 병렬 코드에 적어도 부분적으로 기초하여 상기 배리어 동작의 상기 배리어 폭을 결정하는 수단을 포함하는, 병렬 프로세싱 장치.
  19. 제 17 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭은 상기 하나 이상의 계산 유닛들의 웨이브프론트 (wavefront) 의 벡터 폭보다 더 큰, 병렬 프로세싱 장치.
  20. 제 17 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭이 상기 하나 이상의 계산 유닛들에 대한 웨이브프론트의 벡터 폭보다 더 작은 경우에, 상기 배리어 동작을 수행하지 않도록 결정하는 수단을 더 포함하는, 병렬 프로세싱 장치.
  21. 제 17 항에 있어서,
    상기 배리어 동작은 조건문에 포함되고, 상기 조건문은 상기 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는, 병렬 프로세싱 장치.
  22. 제 17 항에 있어서,
    상기 스레드들의 그룹의 상기 서브그룹에서의 스레드들은 상기 스레드들의 그룹에서의 연속적인 스레드들인, 병렬 프로세싱 장치.
  23. 제 17 항에 있어서,
    상기 배리어 동작은 루프 내에 포함되는, 병렬 프로세싱 장치.
  24. 제 23 항에 있어서,
    상기 루프의 각각의 반복에 대해 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 수단으로서, 결정된 상기 배리어 폭은 상기 루프의 적어도 2 개의 반복들에서 상이한, 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 수단을 더 포함하는, 병렬 프로세싱 장치.
  25. 명령들을 포함한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 적어도 하나의 프로세서에 의해 실행될 때, 상기 적어도 하나의 프로세서로 하여금,
    호스트에 동작가능하게 커플링된 프로세싱 유닛에 의해 실행될 데이터 병렬 코드를 포함하는 상기 호스트 상에서 실행되는 애플리케이션의 실행시간에서, 상기 데이터 병렬 코드를 각각 실행하는 그룹 스레드들에 대한 배리어 동작의 배리어 폭을 결정하는 것으로서, 상기 배리어 폭은 상기 스레드들의 그룹에서의 스레드들의 총 수보다 더 작고, 상기 스레드들의 그룹에서의 스레드들은 상기 프로세싱 유닛의 하나 이상의 계산 유닛들 상에서 상기 데이터 병렬 코드를 실행하는, 상기 배리어 동작의 배리어 폭을 결정하는 것; 및
    상기 스레드들의 그룹의 서브그룹에서의 각 스레드가 각각의 배리어 동작들을 실행한 것에 응답하여, 상기 스레드들의 그룹의 상기 서브그룹으로 하여금, 상기 스레드들의 그룹에서의 다른 스레드들이 배리어 동작들을 실행하는 것을 대기함이 없이 상기 각각의 배리어 동작들에 후속하는 상기 하나 이상의 계산 유닛들 상에서의 각각의 동작들을 실행하도록 인에이블하는 것
    을 포함하는 동작들을 수행하게 하고,
    상기 서브그룹은 결정된 상기 배리어 폭과 동일한 수의 스레드들을 포함하고, 상기 스레드들의 그룹의 상기 서브그룹은 상기 스레드들의 그룹에서의 상기 스레드들의 총 수보다 더 작은, 컴퓨터 판독가능 저장 매체.
  26. 제 25 항에 있어서,
    상기 배리어 동작의 배리어 폭을 결정하는 것은, 상기 데이터 병렬 코드에 적어도 부분적으로 기초하여 상기 배리어 동작의 상기 배리어 폭을 결정하는 것을 포함하는, 컴퓨터 판독가능 저장 매체.
  27. 제 25 항에 있어서,
    상기 배리어 동작의 상기 배리어 폭은 상기 하나 이상의 계산 유닛들의 웨이브프론트 (wavefront) 의 벡터 폭보다 더 큰, 컴퓨터 판독가능 저장 매체.
  28. 제 25 항에 있어서,
    상기 동작들은, 상기 배리어 동작의 상기 배리어 폭이 상기 하나 이상의 계산 유닛들에 대한 웨이브프론트의 벡터 폭보다 더 작은 경우에, 상기 배리어 동작을 수행하지 않도록 결정하는 것을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  29. 제 25 항에 있어서,
    상기 배리어 동작은 조건문에 포함되고, 상기 조건문은 상기 스레드들의 그룹 전체에 걸쳐 균일하게 평가하지 않는, 컴퓨터 판독가능 저장 매체.
  30. 제 25 항에 있어서,
    상기 스레드들의 그룹의 상기 서브그룹에서의 스레드들은 상기 스레드들의 그룹에서의 연속적인 스레드들인, 컴퓨터 판독가능 저장 매체.
  31. 제 25 항에 있어서,
    상기 배리어 동작은 루프 내에 포함되는, 컴퓨터 판독가능 저장 매체.
  32. 제 31 항에 있어서,
    상기 동작들은, 상기 루프의 각각의 반복에 대해 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 것으로서, 결정된 상기 배리어 폭은 상기 루프의 적어도 2 개의 반복들에서 상이한, 상기 배리어 동작의 상기 배리어 폭을 동적으로 결정하는 것을 더 포함하는, 컴퓨터 판독가능 저장 매체.
KR1020167006600A 2013-08-13 2014-08-07 동적 폭 계산을 이용한 배리어 폭 동기화 KR101724247B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/965,818 2013-08-13
US13/965,818 US9218223B2 (en) 2013-08-13 2013-08-13 Barrier synchronization with dynamic width calculation
PCT/US2014/050143 WO2015023509A1 (en) 2013-08-13 2014-08-07 Barrier synchronization with dynamic width calculation

Publications (2)

Publication Number Publication Date
KR20160036067A true KR20160036067A (ko) 2016-04-01
KR101724247B1 KR101724247B1 (ko) 2017-04-06

Family

ID=51422147

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167006600A KR101724247B1 (ko) 2013-08-13 2014-08-07 동적 폭 계산을 이용한 배리어 폭 동기화

Country Status (8)

Country Link
US (1) US9218223B2 (ko)
EP (2) EP3033679A1 (ko)
JP (1) JP6130065B2 (ko)
KR (1) KR101724247B1 (ko)
CN (1) CN105453045B (ko)
BR (1) BR112016002637B1 (ko)
CA (1) CA2917609C (ko)
WO (1) WO2015023509A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9916162B2 (en) * 2013-12-26 2018-03-13 Intel Corporation Using a global barrier to synchronize across local thread groups in general purpose programming on GPU
DE102016203965A1 (de) * 2016-03-10 2017-09-14 Robert Bosch Gmbh Überwachung eines Rechensystems
US10324730B2 (en) * 2016-03-24 2019-06-18 Mediatek, Inc. Memory shuffle engine for efficient work execution in a parallel computing system
US10223436B2 (en) * 2016-04-27 2019-03-05 Qualcomm Incorporated Inter-subgroup data sharing
US20170357705A1 (en) * 2016-06-08 2017-12-14 Knuedge Incorporated Performing a synchronization operation on an electronic device
US10318355B2 (en) * 2017-01-24 2019-06-11 Oracle International Corporation Distributed graph processing system featuring interactive remote control mechanism including task cancellation
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10990453B2 (en) * 2018-04-12 2021-04-27 Advanced Micro Devices, Inc. Improving latency by performing early synchronization operations in between sets of program operations of a thread
GB2574817B (en) * 2018-06-18 2021-01-06 Advanced Risc Mach Ltd Data processing systems
JP7159696B2 (ja) * 2018-08-28 2022-10-25 富士通株式会社 情報処理装置,並列計算機システムおよび制御方法
US11449339B2 (en) * 2019-09-27 2022-09-20 Red Hat, Inc. Memory barrier elision for multi-threaded workloads
US11409579B2 (en) * 2020-02-24 2022-08-09 Intel Corporation Multiple independent synchonization named barrier within a thread group
KR102501187B1 (ko) * 2020-04-03 2023-02-17 서울대학교산학협력단 배리어 구현 방법 및 시스템
US11461130B2 (en) 2020-05-26 2022-10-04 Oracle International Corporation Methodology for fast and seamless task cancelation and error handling in distributed processing of large graph data
US11204774B1 (en) * 2020-08-31 2021-12-21 Apple Inc. Thread-group-scoped gate instruction
GB2604150B (en) * 2021-02-26 2023-06-14 Advanced Risc Mach Ltd Data processing systems
US20220342721A1 (en) * 2021-04-22 2022-10-27 EMC IP Holding Company, LLC System and Method for Efficient Snapshots Barrier Mechanism for System With Presorted Container-Based Log

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090240890A1 (en) * 2005-11-10 2009-09-24 Hewlett-Packard Development Company, L.P. Program thread syncronization
JP2011039666A (ja) * 2009-08-07 2011-02-24 Hitachi Ltd バリア同期方法及び計算機
US20110078417A1 (en) * 2009-09-25 2011-03-31 Brian Fahs Cooperative thread array reduction and scan operations

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6574725B1 (en) 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
JP3571976B2 (ja) 1999-11-08 2004-09-29 富士通株式会社 デバッグ装置及び方法並びにプログラム記録媒体
US7512950B1 (en) 2003-08-14 2009-03-31 Sun Microsystems, Inc. Barrier synchronization object for multi-threaded applications
JP4276028B2 (ja) * 2003-08-25 2009-06-10 株式会社日立製作所 マルチプロセッサシステムの同期方法
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7865911B2 (en) * 2005-11-08 2011-01-04 Microsoft Corporation Hybrid programming
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US8966488B2 (en) 2007-07-06 2015-02-24 XMOS Ltd. Synchronising groups of threads with dedicated hardware logic
US8866827B2 (en) * 2008-06-26 2014-10-21 Microsoft Corporation Bulk-synchronous graphics processing unit programming
JP5239751B2 (ja) * 2008-10-31 2013-07-17 富士通株式会社 ノード間同期装置、ノード間同期方法およびノード間同期プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090240890A1 (en) * 2005-11-10 2009-09-24 Hewlett-Packard Development Company, L.P. Program thread syncronization
JP2011039666A (ja) * 2009-08-07 2011-02-24 Hitachi Ltd バリア同期方法及び計算機
US20110078417A1 (en) * 2009-09-25 2011-03-31 Brian Fahs Cooperative thread array reduction and scan operations

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
J. Li 외 2명. 'The thrifty barrier: energy-aware synchronization in shared-memory multiprocessors.' IEE Proceedings-Software, Feb. 18, 2004, pp.14-23. *

Also Published As

Publication number Publication date
CA2917609A1 (en) 2015-02-19
US9218223B2 (en) 2015-12-22
CN105453045B (zh) 2017-04-12
CN105453045A (zh) 2016-03-30
JP2016525746A (ja) 2016-08-25
KR101724247B1 (ko) 2017-04-06
CA2917609C (en) 2017-10-24
EP3033679A1 (en) 2016-06-22
BR112016002637A2 (pt) 2017-08-01
JP6130065B2 (ja) 2017-05-17
WO2015023509A1 (en) 2015-02-19
BR112016002637B1 (pt) 2023-03-14
EP3964951A1 (en) 2022-03-09
BR112016002637A8 (pt) 2022-08-23
US20150052537A1 (en) 2015-02-19

Similar Documents

Publication Publication Date Title
KR101724247B1 (ko) 동적 폭 계산을 이용한 배리어 폭 동기화
US9430807B2 (en) Execution model for heterogeneous computing
KR101707289B1 (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
WO2015032282A1 (zh) 电子设备硬件性能的测试方法及装置
CN109154886B (zh) 用于处理数据的方法和设备
KR101558069B1 (ko) 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝
US20140157287A1 (en) Optimized Context Switching for Long-Running Processes
KR101941832B1 (ko) 그래픽스 프로세싱 유닛들에 대한 셰이더들에서의 균일한 프레디케이트들
JP2018517986A (ja) 階層的サブルーチン情報を含む中間コードからのオブジェクトコードの生成
US10133572B2 (en) Techniques for serialized execution in a SIMD processing system
KR20140039076A (ko) 셰이더 동작의 동기화
CN111930428B (zh) 一种条件分支指令的融合方法、装置及计算机存储介质
WO2016099890A1 (en) Trace buffer based replay for context switching
US9632783B2 (en) Operand conflict resolution for reduced port general purpose register
US20160055029A1 (en) Programmatic Decoupling of Task Execution from Task Finish in Parallel Programs
JP2022510805A (ja) レイトレーシングにおけるトライアングル及びボックスの交差テストのための統合されたデータパス
US20160019027A1 (en) Vector scaling instructions for use in an arithmetic logic unit

Legal Events

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