KR20080038301A - 차단 로컬 센스 동기화 배리어 - Google Patents

차단 로컬 센스 동기화 배리어 Download PDF

Info

Publication number
KR20080038301A
KR20080038301A KR1020087000957A KR20087000957A KR20080038301A KR 20080038301 A KR20080038301 A KR 20080038301A KR 1020087000957 A KR1020087000957 A KR 1020087000957A KR 20087000957 A KR20087000957 A KR 20087000957A KR 20080038301 A KR20080038301 A KR 20080038301A
Authority
KR
South Korea
Prior art keywords
thread
barrier
blocking
threads
last
Prior art date
Application number
KR1020087000957A
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 마이크로소프트 코포레이션
Publication of KR20080038301A publication Critical patent/KR20080038301A/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
    • 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
    • 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
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99938Concurrency, e.g. lock management in shared database

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Hardware Redundancy (AREA)

Abstract

차단 로컬 센스 동기화 배리어가 제공된다. 로컬 센스 변수는 개인적인 또는 글로벌 프로세스가 아니라 동기화 배리어 함수에의 진정한 로컬 변수이다. 안전한 제거는 스레드가 배리어 상에서 수행한 최후의 동작이 기입이라는 것을 확인함으로써 제공된다. 반환 직전에, 스레드들은 배리어를 떠난 스레드들의 카운트를 나타내는 필드를 증분한다. 차단은 일정한 구간에 대해 스레드가 스피닝하도록 지원되며, 이들이 차단하기로 결정한 때에는, 배리어에 도달할 최후의 스레드에 의해 조사되는, 스레드가 차단하고 있는지에 대한 표시를 조사하고 (이미 설정되지 않았다면) 설정하여 차단 스레드들을 릴리스하도록 이벤트를 설정할 것인지를 결정한다.
동기화 배리어 메소드, 소프트웨어 스레드

Description

차단 로컬 센스 동기화 배리어{BLOCKING LOCAL SENSE SYNCHRONIZATION BARRIER}
본 특허 문서의 개시의 일부는 저작권 보호를 받는 내용을 포함할 수 있다. 저작권 소유자는 특허 문서 또는 특허 개시 중 어느 것에 의한 팩스 재생에 반대하지 않으며, 이는 특허청 특허 파일 및 기록에 나타나 있으며, 그렇지 않으면 무엇이든 모든 저작권을 보유한다. 이하의 통지는 본 문서에 적용될 것이다: Copyrightⓒ2005, Microsoft Corp.
동기화 배리어들(배리어들)은, 프로그래머로 하여금, 임의의 스레드가 다음 페이즈를 시작할 수 있게 되기 전에 모든 스레드들이 그들의 작업의 하나의 페이즈를 완료하는 것을 보장할 수 있게 하는 병렬 컴퓨팅에서 사용되는 프리미티브(primitive)이다. 동기화 배리어는 모든 스레드들이 호출에 진입하기 전에는 어떠한 스레드도 그 호출로부터 반환되지 않는 속성을 갖는 함수를 구현한다. 설명을 위해, 프로그래머가 모두 Work1()를 처리하는 동일한 코드를 실행하는 몇개의 스레드를 갖고, 모든 스레드들이 Work1()을 완료하기 전에는 어떠한 스레드도 Work2()를 시작하는 것을 원하지 않는 예를 고려하자. 배리어를 이용하면, 코드는 이하와 같이 보일 수 있다:
Work1();
Barrier();
Work2();
여기에서, 스레드들이 Barrier() 호출에 도달하면, 모든 스레드들이 Work2()가 되도록 릴리스되는 지점에 모든 스레드들이 도달할 때까지, 스레드들은 일시 중지된다(스피닝(spinning) 또는 차단). 동기화 배리어가 재사용될 수 있어야 한다는 것에 유의해야 한다. 각각의 스레드가 Work2()를 완료한 후에 동일한 구조 상에 Barrier()를 다시 호출할 수 있어야 한다.
이러한 프리미티브들은 과학적 및 수학적 컴퓨팅과 기타 고도의 병렬 작업 부하에 종종 사용된다. 동기화 배리어 프리미티브가 존재하지 않는 시스템에서, 이러한 기능을 필요로 하는 개발자들은 그들 자체의 배리어들을 구현해야만 한다. 이는 이중의 작업과 때때로 부정확한 코드를 만들게 한다. 또한, 이는 배리어의 제거를 효율적으로 다룸으로써, 빠를 뿐만 아니라 실제 이용을 더욱 양호하게 지원하는 동기화 배리어를 구축함으로써, 가치가 더해질 수 있는 영역이다.
이 점에서, 기존의 배리어들을 더욱 빠른 구현체로 대체하고 차단 및 제거를 위한 지원을 갖는 고성능 동기화 배리어의 사양을 지원하는 빠르고 강인한 프리미티브가 필요하다.
<개요>
본 개요는 이하의 상세한 설명에서 더욱 설명될 개념의 선택을 간단한 형태로 안내하기 위해 제공된다. 본 개요는 청구된 청구물의 핵심 특징 또는 본질적인 특징을 식별하거나 청구된 청구물의 범위를 결정하는 데 도움이 되는 것으로서 이용되려 한 것이 아니다.
상술한 기술의 결점을 고려하여, 차단 로컬 센스 동기화 배리어가 제공된다. 몇몇 실시예들에서, 동기화 배리어 메소드를 통해 구현된 동기화 배리어를 통해 소프트웨어 스레드를 동기화시키는 것은, 소프트웨어 스레드가 릴리스되어야 하는 때를 결정하기 위하여 조사되고 동기화 배리어 메소드 내에서 변화되는, 동기화 배리어 메소드에 대한 로컬 변수를 이용함으로써 일부 수행된다. 또한, 배리어의 안전한 제거를 보장하기 위해 동기화 배리어 메소드 동안 스레드가 수행하는 최후의 동작이 기입이라는 것을 확인함으로써 배리어의 안전한 제거가 제공된다. 이는 동기화 배리어를 떠난 변수들의 카운트를 보유함으로써 이루어진다.
스레드에 의한 차단은 스레드가 차단하고 있는지를 결정하기 위해 표시를 이용하는 단계, 배리어에 도달할 최후의 스레드에 의해 이전의 이벤트를 재설정하는 단계, 표시를 조사하여 배리어에 도달할 최후의 스레드에 의해 현재 이벤트를 설정할지를 결정하는 단계, 배리어에 도달할 최후의 스레드를 기다리는 스피닝 스레드들을 릴리스하는 단계에 의해 지원된다. 마지막으로, 표시를 조사함으로써, 만일 차단하도록 표시되었다면, 최후의 스레드가 도달하기를 기다리며 차단하고 있는 스레드들을 릴리스하도록, 배리어에 도달할 최후의 스레드에 의해 현재의 이벤트가 설정된다. 본 발명의 다른 이점들 및 특징들을 이하 설명한다.
도 1은 다양한 시점에서 동기화 배리어에 도달하고 떠나는 스레드들을 도시 하는 차트이다.
도 2는 센스 역전 집중 배리어에 따른 프로세스를 도시하는 흐름도이다.
도 3은 배리어의 안전한 제거를 지원하는 로컬 센스 동기화 배리어에 따른 프로세스를 도시하는 흐름도이다.
도 4는 차단 동기화 배리어에 따른 프로세스를 도시하는 흐름도이다.
도 5는 추가적인 최적화를 갖는 도 4의 차단 동기화 배리어에 따른 프로세스를 도시하는 흐름도이다.
도 6은 도 1 내지 도 5의 동기화 배리어 프로세서를 구현하는 것과 연계되어 사용하기에 적절한 예시적인 컴퓨팅 장치를 도시하는 블록도이다.
도 7은 다수의 컴퓨터로 처리된 프로세스들이 도 1 내지 도 5의 동기화 배리어 프로세스를 수행하도록 구현될 수 있는 예시적인 네트워크화된 컴퓨팅 환경을 도시한다.
특정의 구체적인 상세한 설명이 이하의 설명 및 도면에서 제시되어 본 발명의 각종 실시예의 완전한 이해를 제공한다. 본 발명의 각종 실시예들을 불필요하게 모호하게 하는 것을 피하기 위해 컴퓨팅 및 소프트웨어 기술과 종종 연관된 특정의 잘 알려진 상세사항은 이하의 설명에서 제시되지 않는다. 또한, 관련 기술분야의 당업자라면, 이하 설명된 하나 이상의 상세사항 없이도 본 발명의 다른 실시예들이 실시될 수 있음을 이해할 것이다. 마지막으로, 이하의 설명에서 각종 방법들이 단계 및 시퀀스에 관하여 설명되지만, 그와 같은 설명은 본 발명의 실시예들 의 명확한 구현을 제공하기 위한 것이며, 단계들 및 단계들의 시퀀스가 본 발명을 실시하는 데 필수적인 것으로 이해되어서는 안된다.
도 1에서는, 다양한 시점에서 동기화 배리어에 도달하고 떠나는 스레드들의 개념을 설명하는 차트가 도시된다. 시간선(5), 동기화 배리어(배리어)(7), 제1 스레드(9), 제2 스레드(11) 및 제3 스레드(13)가 도시된다. 본 차트는 배리어에서 무엇이 발생하는가를 그래픽으로 설명하는 예일 뿐이므로, 예를 들어 스레드의 개수 및 시간 간격과 같은 항목들은 스케일대로가 아니며, 광범위하게 변할 수 있다.
T1에서, 제1 스레드(9)가 배리어(7)에 도달하여, 모든 다른 스레드들이 도달할 때까지 배리어(7)에서 대기 또는 스피닝하고 있다. T2에서, 제1 스레드(9)가 여전히 배리어(7)에서 대기하고 있는 한편, 제2 스레드(11)가 막 도달하는 것으로 도시된다. T3에서, 제3 스레드(13)가 막 도달하려고 하는 한편, 제1 스레드(9) 및 제2 스레드(11) 둘은 대기하고 있는 것으로 도시된다. T4에서, 모든 스레드들(9, 11, 13)이 배리어(7)에 도달해 있다. 이 때, 모든 스레드들이 배리어(7)에 도달하였으므로, 3개의 모든 스레드들(9, 11, 13)은 릴리스된다. T5에서, 3개의 모든 스레드들이 막 배리어(7)를 떠났다.
이하의 동기화 배리어 예들을 설계하는 데 있어서, 2개의 원칙적인 가정이 이루어진다. 첫째로, 배리어 구조 자체의 사이즈(즉, 바이트 개수)는 중요하지 않다는 것이 가정된다. 락(lock)들과는 달리, 배리어는 통상적으로 다른 구조에 삽입되지 않는다. 두번째로, 최적화를 위한 사용 시나리오는 (1)프로세서당 단일 스레드 및 (2)모든 스레드들이 거의 동시에 배리어에 도달한다는 것이다. 이러한 가 정은 배리어에 대한 최적의 사용 패턴이 되리라 여겨지는 것을 강조한다. 프로세서 당 하나보다 많은 스레드를 갖는 호출자는 스레드들이 배리어에서 만날 때마다 컨텍스트 교환을 할 것이다. 스레드들이 거의 동시에 배리어에 도달한다면, 동기화 오버헤드는 작을 것이다. 반대로, 스레드들이 만남들 사이에서 해야 할 작업량이 매우 달라서 그들의 도달들 사이에 큰 간격을 갖는다면, 최초로 도달하는 스레드는 오랫동안 스피닝하거나(소모성 작업) 차단(컨텍스트 교환을 함)할 것이다. 프리미티브는 차선의(suboptimal) 사용 패턴을 지원해야 하지만, 최적의 사용 패턴에 대해 최적화되어야 한다.
도 2에서, 배경기술에서 제공된 알려진 센스 역전 집중 배리어(sense-reversing centralized barrier)에 따른 프로세스를 도시하는 흐름도가 도시된다. 도 2의 프로세스는 센스 역전 집중 배리어(프로세서 당 단일 스레드를 가정함)에 대한 이하의 알고리즘을 수반한다.
shared count : Integer := P
shared sense : Boolean := true
processor private local_sense : Boolean := true
procedure central.barrier
local_sense : = not local-sense
// 각각의 프로세서는 그 자신의 센스를 토글링함
If fetch_and_decrement (&count) = 1
count := P
sense := local_sense
// 최후 프로세서가 글로벌 센스를 토글링함
else
repeat until sense = local_sense
상술한, 그리고 도 2에서의 배리어는 배리어에 이미 도달한 스레드들의 개수와 만남 당 한번씩 토글링되는 센스 비트를 저장하는 글로벌 카운트 변수를 사용하여 모든 스레드들이 도달했으며 계속될 수 있음을 신호한다. 스레드들은 그들 자신의 로컬 센스 변수를 저장한다. 도달하는 스레드들(15)은 그들의 로컬 센스 비트를 토글링하여(17) 카운트를 감분한다(19). 현재 도달하는 스레드가 도달할 최후의 스레드인지를 확인하기 위한 판정이 이루어진다. 만일 스레드가 도달해야 할 최후의 스레드라면(23), 카운트를 재설정하고 글로벌 센스 비트를 토글링하여 스피닝 스레드들을 릴리스한다(27). 스레드가 도달해야 할 최후의 스레드가 아니라면(29), 릴리스될 것을 대기하며 스피닝한다(31).
상술한 프로세스는 2개의 스핀과 2개의 연동된 동작을 필요로 하는, 이전의 작업들에서 설명한 배리어에 대해 개선된 것이다. 이러한 배리어는 단지 단일의 스핀과 단일의 연동된 감분("fetch_and_decrement")을 필요로 한다.
그러나, API 설계 관점에서, 각각의 스레드/프로세서가 호출들에 걸쳐 그 자신의 local_sense 변수를 유지해야 할 필요가 있기 때문에, 이러한 배리어는 문제 가 된다. 예를 들어, 이를 위한 API를 설계하기 위해, (커널 배리어에 대한) PRCB 또는 (사용자모드 배리어에 대한) TEB에서 local_sense를 저장하거나, 이러한 함수로 하여금 로컬 센스 변수를 반환하게 하고, 호출자가 다음 만남때까지 이 값을 저장할 것을 요구할 수 있다. 두 경우 모두에 있어서, 이는 API를 복잡하게 한다. 그러나 추가적인 분석은 이것이 불필요함을 나타낸다. 배리어의 센스 비트는, 최후의 스레드가 배리어에 도달하고, 비트를 역전시켜 스피닝하고 있는 스레드들을 릴리스할 때만 변한다. 이러한 속성은 local_sense를 로컬 변수로 만드는 것을 가능하게 한다. 동기화 배리어 내의 이러한 양태의 구현의 예가 이하의 코드에 나타내어진다.
#define SENSE_BIT 0x80000000
typeofstruct _BARRIER {
ULONG Barrier;
ULONG TotalProcessors; // 상술한 P와 동등함
} BARRIER, *PBARRIER;
LOGICAL Barrier (PBARRIER Barrier)
{
ULONG LocalSense, CaptureValue:
CaptureValue = InterlockedDecrement(
&Barrier ->Barrier);
LocalSense = ((~CapturedValue) & SENSE_BIT);
if ((CapturedValue & (~SENSE_BIT)) == 0) {
Barrier->Barrier =
LocalSense | Barrier->TotalProcessors;
return TRUE;
}
while ((Barrier->Barrier & SENSE_BIT) != LocalSense) {
}
return FALSE;
}
상술한 예는 배리어의 하이 비트(high bit)는 센스이고, 하위의 31개는 카운트이도록, 센스 및 카운트 변수들을 배리어로 결합한다. 이는 스레드 id가 24 비트이고, 따라서 224 스레드들보다 많은 스레드들이 배리어 상에서 대기하고 있을 수 없기 때문에 가능하다. 그러나 상술한 사항은 Microsoft Windows® 운영 체제에 특정된 것이며, 이는 상이한 운영 체제(OS)들에서 변할 수 있다. 각각의 스레드가 스택, 레지스터 공간 등을 위해 이와 연관된 저장 공간의 일정량을 가져야만 하므로, 스레드들의 개수는 일반적으로 포인터의 사이즈보다 적어도 2x만큼 더 작다(따 라서, 64 비트 머신에 대해 많아 봐야 263 스레드들이 있을 수 있음). 따라서, 다른 OS들 및 아키텍쳐 상에서, 센스 비트로서 사용될 수 있는 자유 비트가 있을 것이다. 상술한 이런 예는 호출들에 걸쳐 스레드 당 로컬 센스를 반드시 저장하지 않고도 로컬 센스 배리어의 성능 이점을 제공한다.
또한, 타이브레이커(tiebreaker)가 반환값으로 추가되었다는 것에 유의해야 한다. 하나의 스레드의 호출은 TRUE를 반환할 것이지만, 나머지는 FALSE를 반환한다. 정확하게 1회만 수행되어야 하는 일정한 추가적인 작업을 수행하는 하나의 스레드를 선택하는 호출자에 의해 이것이 때때로 사용된다.
다음으로 도 3에서, 배리어의 안전한 제거를 지원하는 로컬 센스 동기화 배리어에 따른 프로세스를 설명하는 흐름도가 도시된다. 제거 시맨틱(semantic)을 지원하는 것은, 고객을 위해 적절한 성능 이상으로 가치가 더해질 수 있는 영역이다. 이러한 지원을 제공하는 것이 곤란해질 수 있는 하나의 원인은 배리어가 리클레임(reclaim)될 수 있기 전에, 모든 스레드들이 배리어를 떠났다는 것을 알 필요가 있기 때문이다. 상술한 배리어 예들에서는, 배리어를 떠난 스레드가, Barrier->Barrier 상에서 스피닝하는 동안 선점되었던(preempted) 스레드로부터 분간될 수 없기 때문에 이는 불가능하다. 스레드가 그 스핀 동안 일시중단(suspend)되고, 배리어가 깨어나 Barrier->Barrier의 값을 조사하기를 시도할 때, 실행될 기회를 잡기 전에 배리어가 리클레임되었다면, 메모리는 다른 무엇인가를 위해 비워지거나 사용될 수 있으므로, 이에 액세스하는 것은 안전하지 않다. 규정을 준수하 는 엄격한 POSIX 및 다른 알려진 구현체에서, 스레드가 여전히 배리어에 있는 동안 제거가 호출된다면, 결과는 정의되지 않는다. 이는 언제 스레드들이 배리어를 떠났는지와 제거하기에 안전한지에 대해 알기 위해, 개발자들로 하여금 배리어 주위에 일정한 래퍼(wrapper) 동기화를 사용하게 한다.
배리어의 안전한 제거를 지원하기 위하여, 프로세스는 스레드가 배리어 상에서 수행한 최후의 동작이 기입이라는 것을 확인한다. 상술한 코드에서 최후의 동작이 기입이라면, 언제 스레드가 배리어를 떠났는지에 대한 표시가 존재하지 않는다. 배리어 상의 최후의 동작을 기입으로 하기 위해서, 상술한 프로세스가 수정된다. TotalProcessors 필드가 배리어를 떠난 스레드들의 카운트로서 사용된다. 스레드가 배리어에 도달한 후에(33), 그 스레드가 도달할 최후의 스레드라면(35), 다른 스레드들을 릴리스하기 전에(39), TotalProcessors 필드를 1로 설정한다(37). 그 후에, 그 스레드가 떠날 최후의 스레드인지에 대한 결정이 이루어진다(41). 그 스레드가 떠날 최후의 스레드가 아니라면(43), 복귀 직전에 TotalProcessors 필드를 증분한다(45). 그 스레드가 떠날 최후의 스레드라면(47), TotalProcessors 필드는 재설정된다(49). 다른 스레드들이 릴리스될 때(39), 각각이 떠날 최후의 스레드인지에 대해 결정되고(41), 상술한 바에 따라 TotalProcessors 필드가 증분한다(45).
따라서, TotalProcessors는 2개의 역할을 수행하는데, 배리어에 결합한 스레드들의 전체 개수를 저장하는 것과 만남 이후에 배리어를 떠난 스레드들의 개수를 카운트하는 것이다. 스레드들의 개수는 최후의 스레드가 카운트를 재설정할 때 단 지 필요되므로 TotalProcessors는 2개의 역할에 대해 이용될 수 있다. 스레드가 배리어에 도달할 최후의 스레드이므로, (스레드들이 현재의 만남에 도달했기 때문에) 모든 다른 스레드들은 이전의 만남을 떠난 것이 분명하고, 따라서 스레드들 각각은 카운트를 증분시켰을 것이 분명하다. 최후의 스레드가 도달한 때에, TotalProcessors는 각각의 스레드에 의해 1회 증분되며, 따라서 배리어 상의 스레드들의 전체 개수를 저장한다.
최후의 스레드 도달에 대한 정렬이 중요하다는 것에 유의해야 한다. 일단 센스 비트가 토글링되면, 다른 스레드들은 배리어를 떠날 수 있고(39), 토글링 스레드는 스와핑 아웃될 수 있으므로, 다른 스레드들을 릴리스하기 전에, Barrier->TotalProcessors가 적절히 설정되었는지를 확인하는 것이 필요하다. 일단 TotalProcessors가 P로 다시 증분되고 나면, 이는 모든 스레드들이 배리어를 떠났으며, 따라서 배리어가 리클레임될 수 있음을 나타내는 것이므로 DeleteBarrier 호출은 이제는 구현하기에 안전하다.
다음으로 도 4에서, 차단 동기화 배리어에 따른 프로세스를 설명하는 흐름도가 도시된다. 흐름도는 상술한 로컬 센스 배리어의 확장인 프로세스를 도시한다. 통지 이벤트가 상술한 배리어 구조에 추가된다. "통지 이벤트"는 Microsoft Windows® 운영 체제 고유의 용어이지만, 이와 같은 프리미티브는 다른 플랫폼 상에서 이용가능하며, 따라서, 본 명세서에서 설명한 동기화 배리어의 구현체에서의 용법에 대해서도 역시 이용가능하다.
차단을 추가하는데 있어서 한가지 문제점은 매 만남에 대해 2개의 커널 호출 을 추가한다는 것이다. 이는 호출자가 상술한 가정에 따라 정확하게 배리어를 사용한 경우에 특히 부담스럽다. 모든 스레드들이 스피닝하고 있고, 어떠한 것도 차단하고 있지 않더라도, 호출자는 사용하고 있지 않는 차단 지원의 비용을 지불해야만 한다. 스핀만의 경우에서는, 스레드가 차단하고 있는지를 결정하는 표시를 이용함으로써 이러한 비용이 제거된다.
스레드가 도달한 후에(51), 이 스레드가 도달할 최후의 스레드인지에 대해 결정된다(53). 이 스레드가 도달할 최후의 스레드라면, 이전의 이벤트를 재설정하고(57), 스피닝하고 있는 대기자들을 릴리스하도록 배리어 구조 내의 TotalProcessors 및 배리어 변수들을 설정한다(59). 그 후에, (이하 설명할 이전의 스레드들에 의해) 스레드가 차단하고 있는지에 대한 표시가 설정되었는지에 대해 결정된다(61). 설정되었다면, 현재의 이벤트는 모든 차단하고 있는 대기자들을 릴리스하도록 설정된다(65). 설정되지 않았다면, 현재의 이벤트는 모든 차단하고 있는 대기자들을 릴리스하도록 설정되지 않는다(69).
스레드가 도달할 최후의 것이 아니라면(71), 스레드들은 도달할 최후의 스레드를 기다리며 일정 구간동안 스피닝하고(73), 스레드들이 차단하기로 결정한 경우에(75), 스레드가 차단하고 있는지에 대한 표시가 설정되었는지를 조사한다(77). 스레드가 차단하고 있는지에 대한 표시가 설정되지 않았다면(79), 스레드들은 도달할 최후의 스레드가 이벤트를 설정해야만 하는 것을(65) 나타내도록 표시를 설정한다(81). 그렇지 않다면, 표시는 설정되지 않는다(83). 그 후에, 차단 스레드는 센스 비트(85)를 다시 주목하고, 센스 비트가 여전히 토글링되지 않았다면(87) 이 벤트를 기다린다(89). 센스 비트가 토글링되었다면(91), 스레드는 릴리스된다(93). 상술한 바와 같이, 도달할 최후의 스레드가(55) 센스 비트를 토글링한 후에(59), 스레드가 차단하고 있는지에 대한 표시가 설정되었는지를 체크하고(61), 표시가 설정되었다면(65) 이벤트를 설정한다(65). 이러한 프로세스에 있어서, 스레드들이 차단하고 있을 때에만 커널은 이벤트 호출들을 설정/재설정하게 되며, 스핀의 경우를 느리게 하지 않는다.
다음으로 도 5에서, 추가적인 최적화를 갖는 도 4의 차단 동기화 배리어에 따른 프로세스를 설명하는 흐름도가 도시된다. 스핀의 경우를 팽창시키는 것으로부터 차단의 경우를 유지하기 위한 최후의 최적화로서, 스레드가 차단할 필요가 있을 때까지 스레드가 차단하고 있는지에 대한 표시가 생성되지 않는다. 스레드가 차단할 필요가 있다면(75), 스레드가 차단하고 있는지에 대한 표시가 생성되었는지에 대한 결정이 이루어진다(95). 생성되지 않았다면(97), 이러한 표시가 생성된다(99). 따라서, 차단하지 않는 호출자들은 이러한 불필요한 표시들을 생성하기 위해 리소스들을 낭비할 필요가 없다.
다음으로 도 6에서, 상술한 프로세스와 도 1 내지 도 5의 동기화 배리어를 구현하는 것과 연계하여 사용하기에 적절한 예시적인 컴퓨팅 장치를 나타내는 블록도가 도시된다. 예를 들어, 동기화 배리어들을 위한 프로세스 및 방법을 수행하는 컴퓨터 실행가능 명령어들은 도 6에 도시한 이러한 컴퓨팅 환경에 상주하고/하거나 실행될 수 있다. 컴퓨팅 시스템 환경(220)은 적합한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(220)이 예시적인 운영 환경(220)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
본 발명의 양태들은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명에서 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
본 발명의 양태들은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘다에 위치할 수 있다.
본 발명의 양태들을 구현하는 예시적인 시스템은 컴퓨터(241) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(241)의 컴포넌트들은 처리 장치(259), 시스템 메모리(222), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(259) 에 연결시키는 시스템 버스(221)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(221)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(241)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(241)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(241)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반 송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(222)는 판독 전용 메모리(ROM)(223) 및 랜덤 액세스 메모리(RAM)(260)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(241) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(224)은 통상적으로 ROM(223)에 저장되어 있다. RAM(260)은 통상적으로 처리 장치(259)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 6은 운영 체제(225), 애플리케이션 프로그램(226), 기타 프로그램 모듈(227) 및 프로그램 데이터(228)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(241)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매체를 포함한다. 단지 예로서, 도 6은 비이동식·비휘발성 자기 매체에 기록을 하 거나 그로부터 판독을 하는 하드 디스크 드라이브(238), 이동식·비휘발성 자기 디스크(254)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(239), CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(253)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(240)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(238)는 통상적으로 인터페이스(234)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(221)에 접속되고, 자기 디스크 드라이브(239) 및 광 디스크 드라이브(240)는 통상적으로 인터페이스(235)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(221)에 접속된다.
위에서 설명되고 도 6에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(241)를 위해, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 6에서, 예를 들어, 하드 디스크 드라이브(238)는 운영 체제(258), 애플리케이션 프로그램(257), 기타 프로그램 모듈(256), 및 프로그램 데이터(255)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(225), 애플리케이션 프로그램(226), 기타 프로그램 모듈(227), 및 프로그램 데이터(228)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(258), 애플리케이션 프로그램(257), 기타 프로그램 모듈(256) 및 프로그램 데이터(255)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(251), 및 마우스, 트랙볼(trackball) 또는 터치 패드와 같은 포인팅 장치(252) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(241)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(236)를 통해 처리 장치(259)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(242) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(232) 등의 인터페이스를 통해 시스템 버스(221)에 접속될 수 있다. 모니터 외에, 컴퓨터는 스피커(244) 및 프린터(243) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(233)를 통해 접속될 수 있다.
컴퓨터(241)는 원격 컴퓨터(246)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 메모리 저장 장치(247)만이 도 6에 도시되었지만, 원격 컴퓨터(246)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(241)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 6에 도시된 논리적 접속으로는 LAN(245) 및 WAN(249)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(241)는 네트워크 인터페이스 또는 어댑터(237)를 통해 LAN(245)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(241)는 통상적으로 인터넷과 같은 WAN(249)을 통해 통신을 설정하기 위한 모뎀(250) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(250)은 사용자 입력 인터페이스(236) 또는 기타 적절한 메커니즘을 통해 시스템 버스(221)에 접속된다. 네트워크화된 환경에서, 컴퓨터(241) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 6은 원격 애플리케이션 프로그램(248)이 메모리 장치(247)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
본 명세서에 설명된 각종 기술들이 하드웨어 또는 소프트웨어, 또는 적절하다면 둘의 결합과 연계되어 구현될 수 있음이 이해되어야 한다. 따라서 본 발명의 방법과 장치, 또는 특정 양태들 또는 그 일부는 플로피 디스켓, CD-ROM, 하드 드라이브, 또는 임의의 기타 머신 판독가능 저장 매체와 같은 유형의 매체에 구현된 프로그램 코드(즉, 명령어들)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 머신에 의해 로딩 및 실행되는 경우에 그 머신이 본 발명을 실시하는 장치가 된다. 프로그램가능한 컴퓨터 상에서의 프로그램 코드 실행의 경우에, 컴퓨팅 장치는 일반적으로 프로세서, 프로세서에 의해 판독가능한 저장 매체(휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함함), 적어도 하나의 입력 장치 및 적어도 하 나의 출력 장치를 포함한다. 하나 이상의 프로그램이 API, 재사용가능한 컨트롤 또는 유사한 것을 통해 발명과 연계되어 설명된 프로세스를 구현 또는 이용할 수 있다. 이러한 프로그램들은 하이 레벨의 절차 언어 또는 개체 지향적 프로그래밍 언어로 구현되어 컴퓨터 시스템과 통신하는 것이 바람직하다. 그러나, 프로그램(들)은 필요하다면 어셈블리 또는 기계어로 구현될 수 있다. 어떠한 경우에도, 언어는 컴파일링되거나 인터프리팅된 언어일 수 있으며, 하드웨어 구현체와 결합될 수 있다.
예시적인 실시예들이 본 발명의 이용 양태를 하나 이상의 독립적인 컴퓨터 시스템의 관점에서 언급할 수 있지만, 본 발명은 이에 제한되지 않으며, 오히려 네트워크 또는 분산형 컴퓨팅 환경과 같은 임의의 컴퓨팅 환경과 연계되어 구현될 수 있다. 또한, 본 발명의 양태들은 복수의 프로세싱 칩들 또는 장치들에서, 또는 이들에 걸쳐 구현될 수 있으며, 저장은 복수의 장치들에 걸쳐 유사하게 영향을 받을 수 있다. 이러한 장치들은 퍼스널 컴퓨터, 네트워크 서버, 핸드헬드 장치, 슈퍼컴퓨터, 또는 자동차 및 항공기와 같은 다른 시스템에 통합된 컴퓨터를 포함할 수 있다.
다음으로 도 7에서, 도시된 동기화 배리어의 도 1 내지 도 5와 상술한 프로세스를 수행하도록 다수의 컴퓨터로 처리된 프로세스가 구현될 수 있는 예시적인 네트워크화된 컴퓨팅 환경을 도시한다. 예를 들어, 병렬 컴퓨팅이 이러한 네트워크화된 환경의 일부일 수 있으며, 도 7의 네트워크 상의 다양한 클라이언트들이 도 3 내지 도 5의 동기화 배리어와 같은 동기화 배리어를 이용한다. 본 기술분야의 당업자라면, 네트워크가 임의의 컴퓨터 또는 기타 클라이언트 또는 서버 장치, 또는 분산형 컴퓨팅 환경에서 접속될 수 있음을 이해할 수 있을 것이다. 이에 대해, 임의의 개수의 프로세싱, 메모리 또는 저장 유닛, 그리고 동시에 발생하는 임의의 개수의 애플리케이션 및 프로세스들을 갖는 임의의 컴퓨터 시스템 또는 환경은 제공된 시스템 및 방법과의 연계된 사용에 적절한 것으로 고려된다.
분산형 컴퓨팅은 컴퓨팅 장치들과 시스템들 사이의 교환에 의해 컴퓨터 리소스 및 서비스의 공유를 제공한다. 이러한 리소스 및 서비스들은 정보의 교환, 캐시 저장 및 파일을 위한 디스크 저장을 포함한다. 분산형 컴퓨팅은 네트워크 접속을 이용하며, 클라이언트들로 하여금 전체 계획에 이익을 주는 그들의 수집 능력을 투자할 수 있게 한다. 이에 대해, 다양한 장치들이 본 명세서에 설명된 프로세스에 연관될 수 있는 애플리케이션, 개체 또는 리소스들을 가질 수 있다.
도 7은 예시적인 네트워크화 또는 분산된 컴퓨팅 환경의 개략도를 제공한다. 환경은 개체들(273, 274, 275)과 데이터베이스(278) 뿐만 아니라 컴퓨팅 장치들(271, 272, 276, 277)을 포함한다. 각각의 엔티티들(271, 272, 273, 274, 275, 276, 277, 278)은 프로그램, 방법, 데이터 저장, 프로그램가능한 로직 등을 포함하거나 이용할 수 있다. 엔티티들(271, 272, 273, 274, 275, 276, 277, 278)은 PDA, 오디오/비디오 장치들, MP3 플레이어, 퍼스널 컴퓨터 등과 같은 동일하거나 상이한 장치들의 일부에 미칠 수 있다. 각각의 엔티티(271, 272, 273, 274, 275, 276, 277, 278)는 통신 네트워크(270)에 의해 다른 엔티티(271, 272, 273, 274, 275, 276, 277, 278)와 통신할 수 있다. 이에 대해, 임의의 엔티티가 데이터베이 스(278) 또는 기타 저장 요소의 유지 및 업데이트를 담당할 수 있다.
이러한 네트워크(270)는 그 자체가 도 7의 시스템에 서비스를 제공하는 다른 컴퓨팅 엔티티를 포함할 수 있으며, 그 자체가 복수의 상호접속 네트워크를 나타낼 수 있다. 본 발명의 양태에 따르면, 각각의 엔티티(271, 272, 273, 274, 275, 276, 277, 278)는 API, 또는 다른 개체, 소프트웨어, 펌웨어 및/또는 하드웨어를 이용할 수 있는 별개의 기능 프로그램 모듈들을 포함하여 하나 이상의 다른 엔티티들(271, 272, 273, 274, 275, 276, 277, 278)의 서비스를 요청할 수 있다.
275와 같은 개체는 다른 컴퓨팅 장치(276) 상에서 호스팅될 수 있다는 것이 또한 이해되어야 한다. 따라서, 도시된 물리적 환경이 컴퓨터와 같은 접속된 장치들을 나타낼 수 있지만, 이러한 도시는 단지 예일 뿐이며 물리적 환경은 PDA, 텔레비젼, MP3 플레이어 등과 같은 각종 디지털 장치, 인터페이스 COM 개체 등과 같은 소프트웨어 개체를 포함하는 것으로 다르게 도시되거나 설명될 수 있다.
분산형 컴퓨팅 환경을 지원하는 각종 시스템, 컴포넌트 및 네트워크 구성이 존재한다. 예를 들어, 컴퓨팅 시스템은 유선 또는 무선 시스템에 의해, 로컬 네트워크 또는 광범위하게 분산된 네트워크에 의해 함께 접속될 수 있다. 일반적으로, 다수의 네트워크들은 인터넷에 결합되며, 인터넷은 광범위하게 분산된 컴퓨팅을 위한 하부 구조를 제공하고 다수의 상이한 네트워크들을 포함한다. 인터넷에 결합되었든 혹은 되지 않았든, 이러한 임의의 하부 구조는 제공된 시스템 및 방법과 연계되어 사용될 수 있다.
네트워크 하부 구조는 클라이언트/서버, 피어 투 피어 또는 하이브리드 아키 텍쳐와 같은 많은 네트워크 토폴로지를 활성화할 수 있다. "클라이언트"는 관련되지 않은 다른 클래스 또는 그룹의 서비스들을 이용하는 클래스 또는 그룹의 멤버이다. 컴퓨팅에서, 클라이언트는 다른 프로그램에 의해 제공되는 서비스를 요청하는 프로세스, 즉 대략 명령어 또는 작업의 세트이다. 클라이언트 프로세스는 다른 프로그램 또는 서비스 자체에 대한 어떠한 작업 상세사항을 반드시 "알지(know)" 않고도 요청된 서비스를 이용한다. 클라이언트/서버 아키텍쳐에서, 특히 네트워크화된 시스템에서, 클라이언트는 통상적으로 다른 컴퓨터(예를 들어, 서버)에 의해 제공된 공유된 네트워크 리소스들에 액세스하는 컴퓨터이다. 도 7의 예에서, 임의의 엔티티(271, 272, 273, 274, 275, 276, 277, 278)는 환경에 따라 클라이언트, 서버 또는 둘 다로 고려될 수 있다.
반드시 그런 것은 아니지만, 서버는 통상적으로 인터넷과 같은 원격 또는 로컬 네트워크를 통해 액세스가능한 원격 컴퓨터 시스템이다. 클라이언트 프로세스는 제1 컴퓨터 시스템에서 능동 상태일 수 있고, 서버 프로세스는 제2 컴퓨터 시스템에서 능동 상태일 수 있으며, 통신 매체를 통해 서로 통신하여, 분산된 기능을 제공하며, 복수의 클라이언트로 하여금 서버의 정보 수집 능력을 이용할 수 있게 한다. 임의의 소프트웨어 개체는 복수의 컴퓨팅 장치 또는 개체에 걸쳐 분산될 수 있다.
클라이언트(들) 및 서버(들)는 프로토콜 레이어(들)에 의해 제공된 기능을 이용하여 서로 통신한다. 예를 들어, HTTP(Hyper Text Transfer Protocol)는 WWW(World Wide Web) 또는 "the Web"과 연계되어 이용되는 통상적인 프로토콜이다. 통상적으로, IP(Internet Protocol) 어드레스와 같은 컴퓨터 네트워크 어드레스 또는 URL(Universal Resource Locator)과 같은 다른 레퍼런스가 서버 또는 클라이언트 컴퓨터들을 서로 식별하는 데 이용될 수 있다. 네트워크 어드레스는 URL 어드레스로 칭해질 수 있다. 통신은 통신 매체를 통해 제공될 수 있으며, 예를 들어 클라이언트(들) 및 서버(들)는 고용량 통신을 위하여 TCP/IP 접속(들)을 통해 서로 결합될 수 있다.
도 7에 제공된 일반적인 프레임워크에 따라 구축될 수 있는 다양한 컴퓨팅 환경 및 도 7에서와 같은 네트워크 환경에서의 컴퓨팅에서 발생할 수 있는 추가적인 변화의 관점에서, 본 명세서에 제공된 시스템 및 방법은 특정 컴퓨팅 아키텍쳐를 제한하는 것으로는 절대로 해석될 수 없다. 대신에, 본 발명은 임의의 하나의 실시예에 제한되어서는 안되며, 오히려 첨부된 청구항에 따른 폭과 범위로 해석되어야 한다.

Claims (20)

  1. 동기화 배리어 메소드(method)를 통해 구현된 동기화 배리어를 통한 소프트웨어 스레드들을 동기화하는 단계; 및
    상기 동기화 배리어 메소드 내에서 변화되고 상기 소프트웨어 스레드들이 릴리스되어야 하는 때를 결정하기 위해 판독되는 변수를 제공하는 단계
    를 포함하고,
    상기 변수는 상기 동기화 배리어 메소드에 대한 로컬 변수인 방법.
  2. 제1항에 있어서,
    상기 변수는 상기 메소드와 연관된 코드의 블록 내에서는 알려지지만, 상기 블록 외부의 코드에 액세스할 수 없는 방법.
  3. 제1항에 있어서,
    상기 변수의 값은 상기 메소드의 외부에 저장되지 않는 방법.
  4. 제1항에 있어서,
    상기 변수의 값은 상기 동기화 배리어 메소드로의 호출들에 걸쳐 저장되지 않는 방법.
  5. 동기화 배리어 메소드를 통해 구현된 동기화 배리어를 통해 소프트웨어 스레드들을 동기화하는 단계; 및
    상기 배리어의 안전한 제거를 보장하기 위해, 상기 동기화 배리어 메소드 동안 스레드가 수행한 최후의 동작이 기입이라는 것을 확인하는 단계
    를 포함하는 방법.
  6. 제5항에 있어서,
    상기 확인하는 단계는,
    상기 동기화 배리어를 떠난 변수들의 카운트를 보유하는 단계
    를 포함하는 방법.
  7. 제5항에 있어서,
    상기 보유하는 단계는,
    상기 배리어로부터 다른 스레드들을 릴리스하기 전에, 상기 배리어에 도달할 최후 스레드에 의해 소정값이 되도록 필드를 설정하는 단계; 및
    각각의 반환 전에 다른 스레드들에 의해 상기 필드를 증분하는 단계
    를 포함하는 방법.
  8. 제5항에 있어서,
    스레드가 차단하고 있는지를 결정하기 위해 상기 스레드가 차단하고 있는지 에 대한 표시를 이용하는 단계;
    상기 배리어에 도달할 최후의 스레드에 의해 이전의 이벤트를 재설정하는 단계;
    상기 스레드가 차단하고 있는지에 대한 표시를 조사함으로써 상기 배리어에 도달하는 최후의 스레드에 의해 현재의 이벤트를 재설정할지를 결정하는 단계;
    상기 스레드가 차단하고 있는지에 대한 표시를 조사함으로써, 만일 차단하도록 표시되었다면, 상기 최후의 스레드가 도달하기를 기다리며 차단하고 있는 스레드들을 릴리스하도록, 상기 배리어에 도달하는 상기 최후의 스레드에 의해 현재의 이벤트를 설정하는 단계를 더 포함하는 방법.
  9. 제8항에 있어서,
    상기 스레드가 차단하고 있는지를 결정하기 위해 상기 스레드가 차단하고 있는지에 대한 표시를 이용하는 단계는,
    차단하기를 결정하는 스레드에 의해 상기 스레드가 차단하고 있는지에 대한 표시를 조사하는 단계;
    상기 스레드가 차단하고 있는지에 대한 표시가 설정되지 않았다면, 배리어에 도달할 최후의 스레드가 이벤트를 설정해야만 한다는 것을 나타내기 위해 차단하기를 결정하는 스레드에 의해 상기 스레드가 차단하고 있는지에 대한 표시를 설정하는 단계;
    상기 최후의 스레드가 상기 배리어에 도달했는지를 나타내는 변수를, 차단하 기를 결정하는 스레드에 의해 조사하는 단계;
    상기 조사된 변수가 상기 최후의 스레드가 상기 배리어에 도달하지 않았다는 것을 나타낸다면, 상기 이벤트가 설정될 때까지 차단에 의해 대기하는 단계
    를 포함하는 방법.
  10. 동기화 배리어 메소드를 통해 구현된 동기화 배리어를 통한 소프트웨어 스레드들을 동기화하는 단계;
    상기 동기화 배리어 메소드 내에서 변화되고 상기 소프트웨어 스레드들이 릴리스되어야 하는 때를 결정하기 위해 조사되고, 상기 동기화 배리어 메소드에 대해 로컬 변수인 변수를 제공하는 단계;
    동기화 배리어를 떠난 변수들의 카운트를 보유함으로써, 배리어의 안전한 제거를 보장하기 위해, 상기 동기화 배리어 메소드 동안 스레드가 수행한 최후의 동작이 기입이라는 것을 확인하는 단계;
    스레드가 차단하고 있는지를 결정하기 위해 상기 스레드가 차단하고 있는지에 대한 표시를 이용하는 단계;
    상기 배리어에 도달할 최후의 스레드에 의해 이전의 이벤트를 재설정하는 단계;
    상기 스레드가 차단하고 있는지에 대한 표시를 조사함으로써, 상기 배리어에 도달할 최후의 스레드에 의해 현재의 이벤트를 재설정할지를 결정하는 단계;
    상기 배리어에 도달할 최후의 스레드를 기다리는 스피닝 스레드들을 릴리스 하는 단계; 및
    상기 스레드가 차단하기를 결정하는 때에만 생성되는, 상기 스레드가 차단하고 있는지에 대한 표시를 조사함으로써, 만일 차단하도록 표시되었다면, 상기 최후의 스레드가 도달하기를 기다리며 차단하고 있는 스레드들을 릴리스하도록, 상기 배리어에 도달하는 상기 최후의 스레드에 의해 현재의 이벤트를 설정하는 단계
    를 더 포함하는 방법.
  11. 제1항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  12. 제2항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  13. 제3항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  14. 제4항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  15. 제5항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매 체.
  16. 제6항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  17. 제7항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  18. 제8항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  19. 제9항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
  20. 제10항에 기재된 방법을 수행하기 위한 명령어들을 갖는 컴퓨터 판독가능 매체.
KR1020087000957A 2005-07-12 2006-07-12 차단 로컬 센스 동기화 배리어 KR20080038301A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/180,338 2005-07-12
US11/180,338 US7770170B2 (en) 2005-07-12 2005-07-12 Blocking local sense synchronization barrier

Publications (1)

Publication Number Publication Date
KR20080038301A true KR20080038301A (ko) 2008-05-06

Family

ID=37637963

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087000957A KR20080038301A (ko) 2005-07-12 2006-07-12 차단 로컬 센스 동기화 배리어

Country Status (7)

Country Link
US (1) US7770170B2 (ko)
KR (1) KR20080038301A (ko)
CN (1) CN101501643A (ko)
AU (1) AU2006268125A1 (ko)
BR (1) BRPI0613107A2 (ko)
MX (1) MX2008000517A (ko)
WO (1) WO2007009032A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015683B2 (en) 2009-12-30 2015-04-21 Samsung Electronics Co., Ltd. Method and apparatus for transforming program code

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0613289D0 (en) * 2006-07-04 2006-08-16 Imagination Tech Ltd Synchronisation of execution threads on a multi-threaded processor
US8060881B2 (en) * 2007-05-15 2011-11-15 Microsoft Corporation Small barrier with local spinning
US8924984B2 (en) 2009-06-26 2014-12-30 Microsoft Corporation Lock-free barrier with dynamic updating of participant count
US8832712B2 (en) * 2009-09-09 2014-09-09 Ati Technologies Ulc System and method for synchronizing threads using shared memory having different buffer portions for local and remote cores in a multi-processor system
US9342379B2 (en) * 2011-01-21 2016-05-17 Wind River Systems, Inc. Lock free acquisition and release of a semaphore in a multi-core processor environment
US8910178B2 (en) * 2011-08-10 2014-12-09 International Business Machines Corporation Performing a global barrier operation in a parallel computer
US9507638B2 (en) * 2011-11-08 2016-11-29 Nvidia Corporation Compute work distribution reference counters
US9495135B2 (en) 2012-02-09 2016-11-15 International Business Machines Corporation Developing collective operations for a parallel computer
US10013290B2 (en) 2012-09-10 2018-07-03 Nvidia Corporation System and method for synchronizing threads in a divergent region of code
US9086933B2 (en) * 2012-10-01 2015-07-21 Nvidia Corporation System and method for launching callable functions
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US11449339B2 (en) * 2019-09-27 2022-09-20 Red Hat, Inc. Memory barrier elision for multi-threaded workloads
CN113641506A (zh) * 2021-07-02 2021-11-12 的卢技术有限公司 基于Golang语言的多协程同步屏障方法、装置

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE68927946T2 (de) * 1988-08-02 1997-10-16 Philips Electronics Nv Verfahren und Vorrichtung für die Synchronisierung von parallelen Prozessoren unter Verwendung einer unscharf definierten Sperre
US5442758A (en) * 1993-07-19 1995-08-15 Sequent Computer Systems, Inc. Apparatus and method for achieving reduced overhead mutual exclusion and maintaining coherency in a multiprocessor system utilizing execution history and thread monitoring
US5434995A (en) * 1993-12-10 1995-07-18 Cray Research, Inc. Barrier synchronization for distributed memory massively parallel processing systems
US5732247A (en) * 1996-03-22 1998-03-24 Sun Microsystems, Inc Interface for interfacing simulation tests written in a high-level programming language to a simulation model
US6117181A (en) * 1996-03-22 2000-09-12 Sun Microsystems, Inc. Synchronization mechanism for distributed hardware simulation
US6785888B1 (en) * 1997-08-29 2004-08-31 International Business Machines Corporation Memory allocator for a multiprocessor computer system
JP3636871B2 (ja) * 1997-09-16 2005-04-06 株式会社日立製作所 並列プロセッサシステム
US6085303A (en) * 1997-11-17 2000-07-04 Cray Research, Inc. Seralized race-free virtual barrier network
US6112222A (en) * 1998-08-25 2000-08-29 International Business Machines Corporation Method for resource lock/unlock capability in multithreaded computer environment
US6216174B1 (en) * 1998-09-29 2001-04-10 Silicon Graphics, Inc. System and method for fast barrier synchronization
US6223335B1 (en) * 1998-12-09 2001-04-24 Sun Microsystems, Inc. Platform independent double compare and swap operation
JP3571976B2 (ja) * 1999-11-08 2004-09-29 富士通株式会社 デバッグ装置及び方法並びにプログラム記録媒体
US6854108B1 (en) * 2000-05-11 2005-02-08 International Business Machines Corporation Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
JP3810631B2 (ja) * 2000-11-28 2006-08-16 富士通株式会社 情報処理プログラムを記録した記録媒体
US7571439B1 (en) * 2002-05-31 2009-08-04 Teradata Us, Inc. Synchronizing access to global resources
US7454749B2 (en) * 2002-11-12 2008-11-18 Engineered Intelligence Corporation Scalable parallel processing on shared memory computers
JP4187151B2 (ja) * 2003-01-08 2008-11-26 ソニー株式会社 情報処理装置および方法、並びにプログラム
US7228545B2 (en) * 2003-01-23 2007-06-05 Hewlett-Packard Development Company, L.P. Methods and apparatus for managing the execution of a task among a plurality of autonomous processes
CA2419340A1 (en) * 2003-02-20 2004-08-20 Ibm Canada Limited - Ibm Canada Limitee Software barrier synchronization
US7073043B2 (en) * 2003-04-28 2006-07-04 International Business Machines Corporation Multiprocessor system supporting multiple outstanding TLBI operations per partition
US7376744B2 (en) * 2003-05-09 2008-05-20 Oracle International Corporation Using local locks for global synchronization in multi-node systems
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 株式会社日立製作所 マルチプロセッサシステムの同期方法
US7487501B2 (en) * 2004-08-30 2009-02-03 International Business Machines Corporation Distributed counter and centralized sensor in barrier wait synchronization

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015683B2 (en) 2009-12-30 2015-04-21 Samsung Electronics Co., Ltd. Method and apparatus for transforming program code

Also Published As

Publication number Publication date
MX2008000517A (es) 2008-03-19
AU2006268125A1 (en) 2007-01-18
BRPI0613107A2 (pt) 2010-12-21
US7770170B2 (en) 2010-08-03
US20070016905A1 (en) 2007-01-18
WO2007009032A3 (en) 2009-04-16
WO2007009032A2 (en) 2007-01-18
CN101501643A (zh) 2009-08-05

Similar Documents

Publication Publication Date Title
KR20080038301A (ko) 차단 로컬 센스 동기화 배리어
US10599551B2 (en) Automatically detecting distributed concurrency errors in cloud systems
US7818743B2 (en) Logging lock data
Alistarh et al. Threadscan: Automatic and scalable memory reclamation
US8185874B2 (en) Automatic and systematic detection of race conditions and atomicity violations
US8763012B2 (en) Scalable, parallel processing of messages while enforcing custom sequencing criteria
US20100100889A1 (en) Accelerating mutual exclusion locking function and condition signaling while maintaining priority wait queues
CN109743411B (zh) 一种在分布式环境下动态调度ip代理池的方法、装置及存储介质
US7865901B2 (en) Managing memory resident objects to optimize a runtime environment
JP2004295882A (ja) マルチスレッド・コンピュータにおけるコンピュータ・データの割振り解除
EP3295293B1 (en) Thread safe lock-free concurrent write operations for use with multi-threaded in-line logging
JP2018028907A (ja) 要求オリジネータを識別するためのリモートプロシージャリンケージにわたるシステム動作のトレーシング
KR20160148672A (ko) 트랜잭셔널 미들웨어 머신 환경에서 분산 트랜잭션 락을 제공하는 시스템 및 방법
US8135690B2 (en) Concurrency object classification
Haas et al. Local linearizability for concurrent container-type data structures
US20120204148A1 (en) Managing an application software partition
KR20080067642A (ko) 컴퓨터 프로그램 코드를 번역하기 위한 방법, 시스템 및상기 방법을 수행하기 위한 명령어가 저장된 컴퓨터판독가능 매체
US20090089788A1 (en) System and method for handling resource contention
US7882508B1 (en) Tracing information flow using a signature
EP2726985B1 (fr) Dispositif et procede de synchronisation de taches executees en parallele sur une plateforme comprenant plusieurs unites de calcul
US10970132B2 (en) Deadlock resolution between distributed processes
US10831563B2 (en) Deadlock resolution between distributed processes using process and aggregated information
US10037242B2 (en) Failure detection in a processing system
CN111782410B (zh) 锁堵塞的监控方法、装置、电子设备及计算机可读介质
CN113535412B (zh) 用于跟踪锁的方法、设备和计算机程序产品

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid