KR102519580B1 - 다수 코어 처리를 위한 고속 동기화 장벽 기술 - Google Patents

다수 코어 처리를 위한 고속 동기화 장벽 기술 Download PDF

Info

Publication number
KR102519580B1
KR102519580B1 KR1020177012878A KR20177012878A KR102519580B1 KR 102519580 B1 KR102519580 B1 KR 102519580B1 KR 1020177012878 A KR1020177012878 A KR 1020177012878A KR 20177012878 A KR20177012878 A KR 20177012878A KR 102519580 B1 KR102519580 B1 KR 102519580B1
Authority
KR
South Korea
Prior art keywords
thread
threads
computing device
synchronization
value
Prior art date
Application number
KR1020177012878A
Other languages
English (en)
Other versions
KR20170093800A (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 KR20170093800A publication Critical patent/KR20170093800A/ko
Application granted granted Critical
Publication of KR102519580B1 publication Critical patent/KR102519580B1/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

다수 코어 프로세서를 갖는 컴퓨팅 장치를 포함하는 다중 스레딩 동기화를 위한 기술. 각각의 프로세서 코어는 다수의 하드웨어 스레드를 포함한다. 프로세서 코어에 의해 실행되는 하드웨어 스레드는 동기화 장벽에 진입하고, 동일한 프로세서 코어에 의해 실행되는 다른 하드웨어 스레드와 동기화한다. 동기화 후에, 하드웨어 스레드는 상이한 프로세서 코어에 의해 실행될 수 있는 소스 하드웨어 스레드와 동기화한다. 소스 하드웨어 스레드는 모든 하드웨어 스레드의 n 웨이 셔플을 사용하여 할당될 수 있으며, 여기서 n은 프로세서 코어당 하드웨어 스레드의 수이다. 하드웨어 스레드는 동일한 프로세서 코어에 의해 실행되는 다른 하드웨어 스레드와 재동기화한다. 하드웨어 스레드는 모든 하드웨어 스레드가 동기화할 때까지 소스 하드웨어 스레드 및 동일한 프로세서 코어에 의해 실행되는 다른 하드웨어 스레드와 교대로 동기화한다. 컴퓨팅 장치는 동기화 장벽을 통해 부울 값을 감소시킬 수 있다. 다른 실시예가 설명되고 청구된다.

Description

다수 코어 처리를 위한 고속 동기화 장벽 기술{TECHNOLOGIES FOR FAST SYNCHRONIZATION BARRIERS FOR MANY-CORE PROCESSING}
관련 미국 특허 출원의 상호 참조
본원은 2014년 12월 03일자로 출원된 "다수 코어 처리를 위한 고속 동기화 장벽 기술(TECHNOLOGIES FOR FAST SYNCHRONIZATION BARRIERS FOR MANY-CORE PROCESSING)"이라는 명칭의 미국 실용 특허 출원 제14/568,890호에 대해 우선권을 주장한다.
현재의 컴퓨팅 장치 및 애플리케이션의 경우, 효율적인 다중 스레딩 성능이 점점 중요해지고 있다. OpenMP는 공유 메모리 병렬 프로그래밍을 위한 보급형 애플리케이션 프로그래밍 인터페이스(API)이다. OpenMP는 스레드 팀에서 실행되는 다수의 스레드를 조정하는 데 사용될 수 있는 동기화 장벽 특징을 지정한다. 일반적으로, 스레드 팀의 모든 스레드는 프로그램의 실행이 진행될 수 있기 전에 장벽에 도달해야 한다. OpenMP는 스레드가 태스크를 생성하고 실행할 수 있는 태스킹 시스템도 지정한다. 모든 태스크는 스레드가 동기화 장벽을 벗어날 수 있기 전에 완료되어야 한다. 따라서, 태스크는 종종 스레드가 동기화 장벽에서 대기하는 동안에 실행된다.
동기화 장벽은 통상적으로 스레드가 소정 패턴으로 서로 대기하게 함으로써 구현된다. 예를 들어, 트리 장벽에서, 스레드는 리프(leaf)에서 시작하여 루트(root)까지 팬 인(fan in)한 후에 역으로 루트로부터 리프를 향해 아래로 팬 아웃(fan out)하는 트리 패턴으로 서로 대기한다. 다른 예로서, 계층적 장벽에서, 스레드는 또한 트리 패턴으로 서로 대기하지만, 동일한 프로세서 코어에 의해 실행되는 스레드는 트리에서 서로 가까이 있는 리프 노드로서 그룹화된다. 세 번째 예로서, 산포 장벽에서, 스레드는 본질적으로 중첩 트리 그룹을 형성하는 더 복잡한 패턴으로 서로 대기한다. 캐시 기반 프로세서 아키텍처에서, 장벽 동작을 완료하는 데 필요한 시간은 스레드가 동기화 장벽을 가로지르기 위해 다른 스레드와 통신할 때 각각의 스레드에 의해 유발되는 캐시 미스의 수에 의해 좌우되거나 달리 제한될 수 있다.
본 명세서에 설명된 개념은 첨부 도면에 한정이 아니라 예시적으로 도시된다. 도시의 간명화를 위해, 도면에 도시된 요소는 반드시 축척대로 그려진 것은 아니다. 적절한 것으로 간주되는 경우, 대응하는 요소 또는 유사한 요소를 나타내기 위해 도면 사이에서 참조 부호가 반복되었다.
도 1은 고속 다중 스레딩 동기화를 위한 컴퓨팅 장치의 적어도 하나의 실시예의 간이 블록도이다.
도 2는 도 1의 컴퓨팅 장치에 의해 설정될 수 있는 환경의 적어도 하나의 실시예의 간이 블록도이다.
도 3a 및 도 3b는 도 1 및 도 2의 컴퓨팅 장치에 의해 실행될 수 있는 고속 다중 스레딩 동기화 방법의 적어도 하나의 실시예의 간이 흐름도이다.
도 4는 도 1 및 도 2의 컴퓨팅 장치에 의해 설정될 수 있는 장벽 통신 네트워크를 도시하는 개략도이다.
도 5a-5c는 도 1 및 도 2의 컴퓨팅 장치에 의해 실행될 수 있는 고속 다중 스레딩 동기화 방법의 적어도 하나의 실시예를 도시하는 의사 코드이다.
본 개시의 개념은 다양한 변경 및 대안적인 형태가 가능하지만, 그의 특정 실시예가 도면에 예시적으로 도시되었으며 본 명세서에서 상세히 설명될 것이다. 그러나, 본 개시의 개념을 개시된 특정 형태로 제한하는 것을 의도하는 것이 아니라, 그와는 반대로 본 개시 및 첨부된 청구범위에 따른 모든 변경, 균등물 및 대안을 커버하는 것을 의도한다는 것을 이해해야 한다.
명세서에서 "일 실시예", "실시예", "예시적인 실시예" 등에 대한 언급은 설명된 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 그러한 특정 특징, 구조 또는 특성을 포함할 수 있거나 반드시 포함하지는 않을 수 있다는 것을 지시한다. 더욱이, 그러한 표현은 반드시 동일한 실시예를 지칭하는 것은 아니다. 또한, 특정 특징, 구조 또는 특성이 실시예와 관련하여 설명될 때, 명시적으로 설명되는지의 여부에 관계없이 다른 실시예와 관련하여 그러한 특징, 구조 또는 특성을 성취하는 것은 본 기술분야의 기술자의 지식 내에 있다는 점을 말하고 싶다. 또한, "A, B 및 C 중 적어도 하나"의 형태로 리스트에 포함된 아이템은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B 및 C)를 의미할 수 있음을 이해해야 한다. 마찬가지로, "A, B 또는 C 중 적어도 하나"의 형태로 나열된 아이템은 (A); (B); (C); (A 및 B); (A 및 C); (B 및 C); 또는 (A, B 및 C)를 의미할 수 있다.
개시된 실시예는, 일부 경우에, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 개시된 실시예는 또한 하나 이상의 프로세서에 의해 판독되고 실행될 수 있는 하나 이상의 일시적 또는 비일시적 머신 판독가능(예를 들어, 컴퓨터 판독가능) 저장 매체에 의해 운반되거나 그에 저장되는 명령어로서 구현될 수 있다. 머신 판독가능 저장 매체는 머신에 의해 판독가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 저장 장치, 메커니즘 또는 다른 물리 구조(예를 들어, 휘발성 또는 비휘발성 메모리, 매체 디스크 또는 다른 매체 장치)로서 구현될 수 있다.
도면에서, 일부 구조 또는 방법 특징은 특정 배열 및/또는 순서로 도시될 수 있다. 그러나, 이러한 특정 배열 및/또는 순서는 요구되지 않을 수 있음을 알아야 한다. 오히려, 일부 실시예에서, 이러한 특징은 예시적인 도면에 도시된 것과 다른 방식 및/또는 순서로 배열될 수 있다. 또한, 특정 도면 내의 구조 또는 방법 특징의 포함은 이러한 특징이 모든 실시예에서 요구된다는 것을 암시하도록 의도되지 않으며, 일부 실시예에서는 포함되지 않을 수 있거나 다른 특징과 결합될 수 있다.
이제, 도 1을 참조하면, 예시적인 실시예에서, 고속 다중 스레딩 동기화를 위한 컴퓨팅 장치(100)는 프로세서(120), I/O 서브시스템(126), 메모리(128) 및 데이터 저장 장치(130)를 포함한다. 사용시에, 아래에서 더 상세히 설명되는 바와 같이, 컴퓨팅 장치(100)는 하드웨어 스레드 및/또는 프로세서 서브코어와 같은 프로세서(120)의 하드웨어 자원을 사용하여 많은 태스크를 동시에 실행하도록 구성된다. 스레드가 동기화 장벽에 진입한 후, 스레드는 동일한 프로세서 코어에서 실행되는 다른 스레드와의 로컬 동기화를 수행한다. 동일한 프로세서 코어에서의 로컬 동기화는 예로서 프로세서 코어의 사설 캐시를 사용하여 신속하게 발생할 수 있다. 로컬 동기화 후에, 각각의 스레드는 프로세서(120)의 상이한 프로세서 코어에 의해 실행될 수 있는 소스 스레드와의 원격 동기화를 수행한다. 소스 스레드는 n 웨이 완전 셔플 구성(n-way perfect shuffle configuration)에 따라 할당되며, 여기서 n은 각각의 프로세서 코어의 하드웨어 스레드의 수이다. 원격 동기화 후에, 각각의 스레드는 동일한 프로세서 코어에서 실행되는 다른 스레드와의 로컬 동기화를 다시 수행한다. 컴퓨팅 장치(100)는 모든 스레드가 동기화될 때까지 원격 동기화와 로컬 동기화 사이에서 계속 교번한다.
원격 동기화와 로컬 동기화를 교번함으로써, 컴퓨팅 장치(100)는 동기화 장벽의 실행 중에 발생하는 캐시 미스의 수를 감소시킬 수 있다. 또한, 컴퓨팅 장치(100)는 여러 스레드에 대한 캐시 미스를 병렬로 발생시킬 수 있으며, 이는 성능을 향상시키고 전체 지연을 감소시킬 수 있다. 컴퓨팅 장치(100)는 동기화 장벽의 모든 레벨에 대해(즉, 원격 동기화 및 로컬 동기화의 각각의 반복에 대해) 그러한 성능 향상을 제공할 수 있다. Intel® Xeon Phi™ 코프로세서를 사용하여 테스트된 컴퓨팅 장치(100)의 소정 실시예의 경우, 동기화 장벽 성능은 통상적인 트리 장벽보다 거의 2배 정도 빠를 수 있다. 부울 플래그 파라미터에 대한 모두-감소 OR(reduce-all OR)에 대한 지원을 포함함으로써, 컴퓨팅 장치(100)는 "작업 도용 지원을 갖는 효율적인 동기화 장벽 기술(Technologies for Efficient Synchronization Barriers with Work Stealing Support)"이라는 명칭의 함께 계류중인 미국 특허 출원 제XX/XXX,XXX호에 더 설명된 바와 같이 OpenMP 태스킹 시맨틱과 호환 가능한 트랜잭션 동기화 장벽의 구현을 지원할 수 있다.
컴퓨팅 장치(100)는 컴퓨터, 다중 프로세서 시스템, 서버, 선반 탑재형 서버, 블레이드 서버, 랩탑 컴퓨터, 노트북 컴퓨터, 네트워크 설비, 웹 설비, 분산형 컴퓨팅 시스템, 프로세서 기반 시스템 및/또는 소비자 전자 장치를 포함하지만 이에 한정되지 않는, 본 명세서에서 설명된 기능을 수행할 수 있는 임의의 유형의 계산 또는 컴퓨터 장치로서 구현될 수 있다. 도 1에 도시된 바와 같이, 컴퓨팅 장치(100)는 예시적으로 프로세서(120), 입출력 서브시스템(126), 메모리(128) 및 데이터 저장 장치(130)를 포함한다. 물론, 컴퓨팅 장치(100)는 다른 실시예에서 서버 장치에서 일반적으로 발견되는 것과 같은 다른 또는 추가적인 컴포넌트(예를 들어, 다양한 입력/출력 장치)를 포함할 수 있다. 또한, 일부 실시예에서, 예시적인 컴포넌트 중 하나 이상은 다른 컴포넌트에 통합되거나 달리 다른 컴포넌트의 일부를 형성할 수 있다. 예를 들어, 메모리(128) 또는 그 일부는 일부 실시예에서 프로세서(120)에 통합될 수 있다.
프로세서(120)는 본 명세서에 설명된 기능을 수행할 수 있는 임의의 유형의 다중 코어 프로세서로서 구현될 수 있다. 예를 들어, 프로세서(120)는 다중 코어 프로세서(들), 다수 코어 프로세서(들), 코프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 다른 프로세서 또는 처리/제어 회로로서 구현될 수 있다. 프로세서(120)는 2개 이상의 프로세서 코어(122)를 포함하며, 각각의 프로세서 코어는 프로그래밍된 명령어를 실행할 수 있는 독립적인 처리 유닛이다. 각각의 프로세서 코어(122)는 전용 사설 캐시 메모리를 포함하거나 그와 결합될 수 있다. 예시적인 프로세서(120)는 2개의 프로세서 코어(122a 및 122b)를 포함하며; 일부 실시예에서 프로세서(120)는 더 많은 프로세서 코어(122)(예를 들어, 57개의 프로세서 코어(122), 60개의 프로세서 코어(122), 61개의 프로세서 코어(122) 또는 더 많은 프로세서 코어(122))를 포함할 수 있다. 각각의 프로세서 코어(122)는 2개 이상의 하드웨어 스레드(124)를 포함하며; 예시적인 실시예에서 각각의 프로세서 코어(122)는 4개의 하드웨어 스레드(124)를 포함한다. 각각의 하드웨어 스레드(124)는 프로그래밍된 명령어를 실행할 수 있는 임의의 논리 프로세서, 서브코어, 하드웨어 스레드 또는 다른 실행 자원으로서 구현될 수 있다. 따라서, 각각 4개의 하드웨어 스레드(124)를 갖는 60개의 프로세서 코어(122)를 갖는 프로세서(120)의 실시예에서, 프로세서(120)는 총 240개의 하드웨어 스레드(124)를 포함할 수 있다. 프로세서 코어(122)의 각각의 하드웨어 스레드(124)는 동일한 사설 캐시를 공유할 수 있다. 또한, 예시적인 컴퓨팅 장치(100)는 단일 다수 코어 프로세서(120)를 포함하지만, 본 명세서에 개시된 기술은 2개 이상의 프로세서(120)(예를 들어, 다수 코어 코프로세서에 결합된 서버 프로세서)를 갖는 컴퓨팅 장치(100)에도 적용될 수 있다.
메모리(128)는 본 명세서에서 설명된 기능을 수행할 수 있는 임의의 유형의 휘발성 또는 비휘발성 메모리 또는 데이터 저장소로서 구현될 수 있다. 동작시에, 메모리(128)는 운영 체제, 애플리케이션, 프로그램, 라이브러리 및 드라이버와 같이 컴퓨팅 장치(100)의 동작 중에 사용되는 다양한 데이터 및 소프트웨어를 저장할 수 있다. 메모리(128)는 컴퓨팅 장치(100)의 프로세서(120), 메모리(128) 및 다른 컴포넌트와의 입출력 동작을 용이하게 하는 회로 및/또는 컴포넌트로서 구현될 수 있는 I/O 서브시스템(126)을 통해 프로세서(120)에 통신적으로 결합된다. 예를 들어, I/O 서브시스템(126)은 입출력 동작을 용이하게 하기 위해 메모리 제어기 허브, 입출력 제어 허브, 펌웨어 장치, 통신 링크(즉, 점대점 링크, 버스 링크, 와이어, 케이블, 광 가이드, 인쇄 회로 보드 트레이스 등) 및/또는 다른 컴포넌트 및 서브시스템으로서 구현되거나 달리 이들을 포함할 수 있다. 일부 실시예에서, I/O 서브시스템(126)은 시스템 온 칩(SoC)의 일부를 형성할 수 있고, 컴퓨팅 장치(100)의 프로세서(120), 메모리(128) 및 다른 컴포넌트와 함께 단일 집적 회로 칩 상에 통합될 수 있다. 데이터 저장 장치(130)는 예를 들어, 메모리 장치 및 회로, 메모리 카드, 하드 디스크 드라이브, 고체 상태 드라이브 또는 다른 데이터 저장 장치와 같이 데이터의 단기 또는 장기 저장을 위해 구성된 임의 유형의 장치 또는 장치들로서 구현될 수 있다.
컴퓨팅 장치(100)는 컴퓨터 네트워크(도시되지 않음)를 통한 컴퓨팅 장치(100)와 다른 원격 장치 사이의 통신을 가능하게 할 수 있는 임의의 통신 회로, 장치 또는 이들의 집합으로서 구현될 수 있는 통신 서브시스템(132)도 포함할 수 있다. 통신 서브시스템(132)은 이러한 통신을 수행하기 위해 임의의 하나 이상의 통신 기술(예를 들어, 유선 또는 무선 통신) 및 연관된 프로토콜(예를 들어, 이더넷, 블루투스(등록상표), 와이파이(등록상표), 와이맥스 등)을 사용하도록 구성될 수 있다.
이제, 도 2를 참조하면, 예시적인 실시예에서, 컴퓨팅 장치(100)는 동작 중에 환경(200)을 설정한다. 예시적인 환경(200)은 스레드 관리 모듈(202), 로컬 장벽 모듈(206), 원격 장벽 모듈(210) 및 장벽 네트워크 모듈(214)을 포함한다. 환경(200)의 다양한 모듈은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로서 구현될 수 있다. 예를 들어, 환경(200)의 모듈, 논리, 및 다른 컴포넌트 각각은 컴퓨팅 장치(100)의 프로세서(120) 또는 다른 하드웨어 컴포넌트의 일부를 형성하거나 달리 그에 의해 설정될 수 있다. 따라서, 일부 실시예에서, 환경(200)의 모듈 중 하나 이상은 전기 장치의 회로 또는 집합(예를 들어, 스레드 관리 회로, 로컬 장벽 회로, 원격 장벽 회로 등)으로서 구현될 수 있다.
스레드 관리 모듈(202)은 하나 이상의 스레드(204)를 생성, 실행 및 달리 관리하도록 구성된다. 스레드(204) 각각은 운영 체제 스레드, 관리형 실행가능 스레드, 애플리케이션 스레드, 작업자 스레드, 경량 스레드, 또는 하드웨어 스레드(124)에 의해 실행될 수 있는 다른 프로그램으로서 구현될 수 있다. 스레드(204) 각각은 하드웨어 스레드(124) 중 하나 상에서 실행하도록 고정되거나 달리 제한될 수 있다. 따라서, 환경(200)은 2개의 스레드(204a, 204b)를 포함하는 것으로 도시되지만, 더 많은 스레드(204)(예를 들어, 각각의 하드웨어 스레드(124)에 대한 하나의 스레드(204))를 포함할 수 있다. 스레드 관리 모듈(202)은 또한 스레드(204)가 동기화 장벽에 들어가고 동기화 장벽의 실행을 관리하게 함으로써 스레드 동기화를 관리하도록 구성된다.
로컬 장벽 모듈(206)은 단일 프로세서 코어(122)에 의해 실행되는 스레드(204)의 제1 그룹을 동기화하도록 구성된다. 로컬 동기화는 최소한의 지연으로 신속하게 완료될 수 있다. 로컬 장벽 모듈(206)은 코어내 통신을 위해 사용되는 각각의 프로세서 코어(122)에 대한 메모리 구조를 유지할 수 있다. 메모리 구조는 로컬 캐시 라인 영역(208)에 유지되는 구조의 어레이로서 구현될 수 있다. 각각의 프로세서 코어(122)에 대한 메모리 구조는 프로세서(120)에 의해 어드레싱 가능한 단일 메모리 캐시 라인 내에 삽입될 수 있다.
원격 장벽 모듈(210)은 하나의 프로세서 코어(122) 상에서 실행되는 스레드(204a)를 다른 프로세서 코어(122) 상에서 실행될 수 있는 소스 스레드(204b)와 동기화하도록 구성된다. 원격 동기화는 하나 이상의 캐시 미스를 초래할 수 있으며, 따라서 지연을 유발할 수 있다. 원격 장벽 모듈(210)은 코어간 통신에 사용되는 각각의 스레드(204)에 대한 메모리 구조를 유지할 수 있다. 메모리 구조는 글로벌 캐시 라인 영역(212)에 유지되는 구조의 어레이로서 구현될 수 있다. 각각의 스레드(204)에 대한 메모리 구조는 프로세서(120)에 의해 어드레싱 가능한 단일 메모리 캐시 라인 내에 삽입될 수 있다. 원격 장벽 모듈(210)은 또한 동일 프로세서 코어(122) 상에서 실행되는 스레드(204)를 동기화하도록 구성될 수 있다.
장벽 네트워크 모듈(214)은 모든 스레드(204)의 동기화를 허용하기 위해 상이한 프로세서 코어(122) 상에서 실행하는 스레드(204) 간의 접속의 네트워크를 설정하도록 구성된다. 장벽 네트워크 모듈(214)은 스레드(204)에 대한 n 웨이 셔플을 설정할 수 있으며, 여기서 n은 각각의 프로세서 코어(122)에 대한 하드웨어 스레드(124)의 수(예를 들어, 프로세서 코어(122)당 4개의 하드웨어 스레드(124)에 대한 4 웨이 셔플)이다. 하드웨어 스레드(124) 간의 관계는 네트워크 테이블(216)에 미리 정의될 수 있다. 예를 들어, 네트워크 테이블(216)은 각각의 스레드(204a)에 대한 소스 스레드(204b)를 식별할 수 있다.
스레드 관리 모듈(202)은 모든 스레드(204)가 동기화될 때까지 원격 장벽 모듈(210) 및 이어서 로컬 장벽 모듈(206)과의 동기화를 교대로 반복하도록 더 구성된다. 예를 들어, 60개의 프로세서 코어(122) 및 각각 4개의 하드웨어 스레드(124)를 갖는 프로세서(120)의 경우(총 240개의 스레드(204)의 경우), 스레드 관리 모듈(202)은 원격 동기화 및 이어서 로컬 동기화를 4번 교대로 반복할 수 있다.
이제, 도 3a를 참조하면, 사용시에, 컴퓨팅 장치(100)는 고속 다중 스레딩 동기화를 위한 방법(300)을 실행할 수 있다. 방법(300)은 예를 들어 하드웨어 스레드(124a)에 고정된 스레드(204a)를 실행함으로써 컴퓨팅 장치(100)의 하드웨어 스레드(124)에 의해 실행될 수 있다. 따라서, 방법(300)의 다수의 인스턴스는 프로세서(120)의 하드웨어 스레드(124)에 의해 동시에 실행될 수 있다. 방법(300)은 블록 302에서 시작하며, 여기서 컴퓨팅 장치(100)의 하드웨어 스레드(124a)가 동기화 장벽에 진입한다. 하드웨어 스레드(124a)는 하드웨어 명령어, 함수 호출, 시스템 호출, 트랩, 또는 하드웨어 스레드(124a)에 의해 처리되는 다른 이벤트에 응답하여 동기화 장벽에 진입할 수 있다. 일부 실시예에서, 블록 304에서, 하드웨어 스레드(124a)는 부울 플래그 파라미터를 이용하여 동기화 장벽에 진입할 수 있다. 플래그 파라미터는 사용자에 의해 또는 다중 스레딩 프레임워크에 의해 제공될 수 있다. 더 후술되는 바와 같이, 컴퓨팅 장치(100)는 동기화 장벽의 실행 중에 다수의 하드웨어 스레드(124)의 부울 플래그 값의 논리합 감소를 수행할 수 있다. 이러한 능력은 "작업 도용 지원을 갖는 효율적인 동기화 장벽 기술(Technologies for Efficient Synchronization Barriers with Work Stealing Support)"이라는 명칭의 함께 계류중인 미국 특허 출원 제XX/XXX,XXX호에 더 설명된 바와 같이 OpenMP 태스킹 시맨틱과 호환 가능한 트랜잭션 동기화 장벽의 구현을 지원할 수 있다.
블록 306에서, 하드웨어 스레드(124a)는 코어간 통신을 위한 소스 및 목적지 종단점을 식별한다. 소스 및 목적지 종단점은 하드웨어 스레드(124a)("목적지" 하드웨어 스레드(124a))와 상이한 프로세서 코어(122)에 의해 실행될 수 있는 다른 하드웨어 스레드(124b)("소스" 하드웨어 스레드(124b)) 사이에서 데이터를 통신할 수 있는 임의의 메모리 위치 또는 다른 통신 채널로서 구현될 수 있다. 또한, 이하에서 더 설명되는 바와 같이, 일부 실시예에서, 소스 및/또는 목적지 종단점은 장벽 네트워크의 상이한 레벨과 연관된 다수의 메모리 위치 또는 통신 채널을 포함할 수 있다. 일부 실시예에서, 블록 308에서, 컴퓨팅 장치(100)는 미리 정의된 장벽 네트워크 테이블(216)을 이용하여 소스 하드웨어 스레드(124b)를 식별할 수 있다. 프로세서 코어(122)당 4개의 하드웨어 스레드(124)를 갖는 예시적인 실시예에서, 소스 하드웨어 스레드(124)의 할당은 프로세서(120)의 모든 하드웨어 스레드(124)의 4 웨이 완전 셔플을 형성할 수 있다. 예를 들어, 일부 실시예에서, 프로세서(120)는 N개의 스레드(204)(예를 들어, 240개의 스레드)를 실행할 수 있고, 각각의 스레드(204)는 0 내지 N-1(예로서, 0 내지 239)의 정수 스레드 ID 번호에 의해 식별될 수 있다. N개의 스레드(204) 각각은 하드웨어 스레드(124) 중 하나 상에 고정되거나 달리 실행될 수 있으며, 따라서 연관된 프로세서 코어(122) 및 하드웨어 스레드(124)에 의해 식별될 수 있다. 각각의 하드웨어 스레드(124)는 0 내지 3의 서브코어 식별자에 의해 식별될 수 있으며, 각각의 프로세서 코어(122)는 0 내지 N/4 - 1(예로서, 0 내지 59)의 정수 코어 ID 번호에 의해 식별될 수 있다. 그러한 예에서, 목적지 스레드 ID k에 대한 소스 스레드 ID j는 이하의 수학식 1을 사용하여 결정될 수 있다. 장벽 네트워크 테이블(216)은 수학식 1의 결과로 채워질 수 있다. 따라서, 예시적인 실시예에서, 각각의 하드웨어 스레드(124)는 그 자신의 스레드 ID를 사용하여 장벽 네트워크 테이블(216)을 인덱싱하여 그의 할당된 소스 하드웨어 스레드(124)의 스레드 ID를 결정할 수 있다.
Figure 112017045185173-pct00001
예를 들어, 이제, 도 4를 참조하면, 개략도(400)는 (대응하는 스레드 ID 0 내지 15를 갖는) 스레드 t0 내지 t15로서 도시된 16개의 하드웨어 스레드(124)에 대한 장벽 네트워크의 하나의 잠재적인 실시예를 나타낸다. 로컬 동기화(402)에서, 스레드 t0 내지 t15는 이하에서 더 설명되는 바와 같이 동일한 프로세서 코어(122) 상의 스레드 t와 국지적으로 동기화된다. 원격 동기화(404)에서, 스레드 t0 내지 t15는 장벽 네트워크 테이블(216)에 설명된 완전 셔플 네트워크 토폴로지를 사용하여 상이한 프로세서 코어(122) 상에서 실행되는 소스 스레드와 동기화될 수 있다. 예를 들어, 스레드 t0은 0의 서브코어 번호 및 0의 코어 번호를 갖는다. 따라서, t0에 대한 소스 스레드 ID는 0인데, 즉 t0에 대한 소스 스레드는 t0이며, 이는 스레드 t0이 그 자신과 동기화됨을 의미한다. 스레드 t1은 1의 서브코어 번호와 0의 코어 번호를 갖는다. 따라서 t1에 대한 소스 스레드 ID는 4이며, 이는 t1에 대한 소스 스레드가 t4임을 의미한다. 다른 예로서, 스레드 t4는 0의 서브코어 번호 및 1의 코어 번호를 갖는다. 따라서, t4에 대한 소스 스레드 ID는 1이며, 이는 t4에 대한 소스 스레드가 t1임을 의미한다. 소스 스레드는 나머지 스레드에 대해 유사하게 결정될 수 있다.
4 웨이 완전 셔플로 도시되지만, 장벽 네트워크 테이블(216)은 상이한 토폴로지를 설명할 수 있음을 이해해야 한다. 예를 들어, 장벽 네트워크 테이블(216)은 n 웨이 완전 셔플을 설명할 수 있으며, 여기서 n은 각각의 프로세서 코어(122)에 대한 하드웨어 스레드(124)의 수이다. 또한, 완전 셔플 이외의 토폴로지가 사용될 수 있다. 그러나, 완전 셔플 토폴로지는 각각의 동기화 레벨에 대해 동일한 소스 하드웨어 스레드(124)를 사용할 수 있으며; 다른 토폴로지는 각각의 동기화 레벨에 대해 상이한 소스 하드웨어 스레드(124)를 할당하거나 달리 결정할 필요가 있을 수 있다.
도 3a를 다시 참조하면, 일부 실시예에서, 블록 310에서, 하드웨어 스레드(124a)는 소스 및 목적지 종단점을 글로벌 메모리 구조 내의 위치로서 식별할 수 있다. 예를 들어, 소스 및 목적지 종단점은 글로벌 캐시 라인 영역(212) 내의 위치와 같은 시스템 메모리(128) 내의 위치를 가리킬 수 있다. 컴퓨팅 장치(100)에 의해 실행되는 각각의 하드웨어 스레드(124)는 메모리(128) 내의 특정 종단점과 연관될 수 있다. 하드웨어 스레드(124a)는 목적지 종단점을 현행 하드웨어 스레드(124a)와 연관된 종단점으로서 식별할 수 있고, 소스 종단점을 소스 하드웨어 스레드(124b)와 연관된 종단점으로서 식별할 수 있다.
일부 실시예에서, 블록 312에서, 하드웨어 스레드(124a)는 동기화 장벽의 모든 호출 후에 2개의 상이한 통신 채널 사이에서 교번할 수 있다. 예를 들어, 글로벌 메모리 구조는 각각의 하드웨어 스레드(124)와 연관된 2개의 종단점을 포함할 수 있고, 하드웨어 스레드(124a)는 동기화 장벽이 진입될 때마다 그러한 종단점 사이에서 교번할 수 있다. 2개의 통신 채널을 포함하는 것은 컴퓨팅 장치(100)가 동기화 장벽의 실행 중에 논리합 감소를 수행하는 것을 가능하게 할 수 있다.
블록 314에서, 하드웨어 스레드(124a)는 동일한 프로세서 코어(122) 상에서 실행되는 하드웨어 스레드(124)와 동기화된다. 하드웨어 스레드(124a)는 예를 들어 프로세서 코어(122)의 사설 캐시에 저장될 수 있는, 프로세서 코어(122)의 다른 하드웨어 스레드(124)와 공유되는 코어별 메모리 구조로부터 판독하고/하거나 그에 기입함으로써 동기화를 수행할 수 있다. 예를 들어, 일부 실시예에서, 하드웨어 스레드(124a)는 로컬 캐시 라인 영역(208)에 저장된 메모리 구조에 기입할 수 있다. 따라서, 하드웨어 스레드(124a)는 시스템 메모리(128)에 대한 캐시 미스 없이 그리고 연관된 캐시 미스 지연 없이 동기화를 수행할 수 있다.
블록 316에서, 하드웨어 스레드(124a)는 코어별 메모리 구조에 감지 값을 저장한다. 감지 값은 하드웨어 스레드(124a)가 동기화 장벽에 진입할 때마다 교번하는 임의의 값(예를 들어, 홀수/짝수, 1/0 등)으로서 구현될 수 있다. 일부 실시예에서, 블록 318에서, 하드웨어 스레드(124a)는 코어별 메모리 구조에 부울 플래그 파라미터를 저장할 수 있다. 예를 들어, 하드웨어 스레드(124a)는 코어별 메모리 구조의 하나의 비트에 부울 플래그 파라미터를 인코딩할 수 있다.
블록 320에서, 하드웨어 스레드(124a)는 코어별 메모리 구조로부터 다른 감지 값을 판독한다. 다른 감지 값은 프로세서 코어(122)에 의해 실행되는 다른 하드웨어 스레드(124)에 의해 기입되었거나 기입될 것이다. 블록 322에서, 하드웨어 스레드(124a)는 다른 하드웨어 스레드(124)에 의해 기입된 모든 감지 값이 블록 316에서 전술한 바와 같이 하드웨어 스레드(124a)에 의해 저장된 감지 값과 일치할 때까지 일시 정지한다. 즉, 하드웨어 스레드(124a)는 프로세서 코어(122)의 모든 하드웨어 스레드(124)가 코어별 메모리 구조에 동일한 감지 값을 기입할 때까지 대기한다. 하드웨어 스레드(124a)는 분주하여 대기하거나, 공전하거나, 양보하거나, 자거나, 또는 임의의 다른 적절한 기술을 수행하여 실행을 일시 정지할 수 있다.
블록 324에서, 일부 실시예에서, 하드웨어 스레드(124a)는 동일한 프로세서 코어(122)의 하드웨어 스레드(124)로부터 수신된 플래그 파라미터 값을 단일 플래그 파라미터 값으로 감소시킬 수 있다. 일부 실시예에서, 하드웨어 스레드(124a)는 예를 들어 각각의 감지 값으로부터 비트 값을 결정함으로써 하드웨어 스레드(124)에 의해 저장된 각각의 감지 값으로부터 플래그 파라미터 값을 복구할 수 있다. 하드웨어 스레드(124a)는 논리합 연산을 수행하여 감소 값을 결정함으로써 그러한 플래그 파라미터 값을 감소시킬 수 있다.
블록 326에서, 동일한 프로세서 코어(122)에 의해 실행되는 하드웨어 스레드(124)와 동기화한 후에, 하드웨어 스레드(124a)는 추가적인 동기화 레벨이 동기화를 완료하기 위해 남아 있는지를 결정한다. 동기화 레벨의 수는 동일한 프로세서 코어(122)에 의해 실행되는 하드웨어 스레드(124)와의 로컬 동기화를 수행할 횟수를 설명할 수 있다. 동기화 레벨 수 N_level은 컴퓨팅 장치(100)에 의해 실행되는 스레드의 총 수(N)의 밑수 n 로그의 올림(작지 않은 최소 정수)으로서 결정될 수 있으며, 여기서 n은 프로세서 코어(122)당 하드웨어 스레드(124)의 수이다. N_level은 아래의 수학식 2를 사용하여 결정될 수 있다. 예를 들어, 프로세서 코어(122)당 4개의 하드웨어 스레드(124)를 갖고 총 240개의 스레드(204)를 갖는 실시예에서,
Figure 112017045185173-pct00002
레벨이다. 다른 예로서, 도 4에 도시된 바와 같이, 프로세서 코어(122)당 4개의 하드웨어 스레드(124)를 갖고 총 16개의 스레드(204)를 갖는 실시예에서,
Figure 112017045185173-pct00003
레벨이다. 도 4의 개략도(400)에 도시된 바와 같이, 동기화 장벽은 로컬 동기화(402), 원격 동기화(404) 및 다른 로컬 동기화(406)를 포함하며, 이는 2와 동일한 N_level에 대응한다.
Figure 112017045185173-pct00004
도 3a를 다시 참조하면, 블록 328에서, 하드웨어 스레드(124a)는 추가적인 동기화 레벨이 남아 있는지를 결정한다. 그러한 경우, 방법(300)은 도 3b에 도시된 블록 334로 분기하여, 후술하는 바와 같은 원격 동기화를 수행한다. 추가적인 동기화 레벨이 남아 있지 않으면, 방법(300)은 블록 330으로 진행한다.
블록 330에서, 하드웨어 스레드(124a)는 동기화 장벽을 벗어난다. 일부 실시예에서, 블록 332에서, 하드웨어 스레드(124a)는 감소 값이라고 하는 논리합 감소 플래그 파라미터 값을 반환할 수 있다. 감소 값은 "작업 도용 지원을 갖는 효율적인 동기화 장벽 기술(Technologies for Efficient Synchronization Barriers with Work Stealing Support)"이라는 명칭의 함께 계류중인 미국 특허 출원 제XX/XXX,XXX호에 더 설명된 바와 같이 OpenMP 태스킹 시맨틱과 호환 가능한 트랜잭션 동기화 장벽의 구현을 지원할 수 있다. 동기화 장벽을 벗어난 후에, 방법(300)은 블록 302로 되돌아가서, 다중 스레딩 실행을 계속하고, 다른 동기화 장벽에 잠재적으로 진입한다.
다시 블록 328을 참조하면, 추가적인 동기화 레벨이 남아 있는 경우, 방법(300)은 도 3b에 도시된 블록 334로 분기한다. 이제, 도 3b를 참조하면, 블록 334에서, 목적지 하드웨어 스레드(124a)로 알려진 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b)로 알려진 하드웨어 스레드(124b)와 동기화된다. 블록 308과 관련하여 전술한 바와 같이, 목적지 하드웨어 스레드(124a) 및 소스 하드웨어 스레드(124b)는 통상적으로(그러나 항상은 아니고) 컴퓨팅 장치(100)의 상이한 프로세서 코어(122) 상에서 실행되는 상이한 하드웨어 스레드(124)이다. 목적지 하드웨어 스레드(124a)는 예를 들어 시스템 메모리(128) 내의 글로벌 메모리 구조로부터 판독하고/하거나 그에 기입함으로써 동기화를 수행할 수 있다. 글로벌 메모리 구조는 예를 들어 글로벌 캐시 라인 영역(212)에 저장될 수 있다. 따라서, 목적지 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b)와의 동기화 동안 하나 이상의 캐시 미스(예를 들어, 기입에 대한 캐시 미스 및 판독에 대한 캐시 미스)를 유발할 수 있다. 그러나, 캐시 미스 및 연관된 지연은 동일한 프로세서 코어(122) 상에서 실행되는 모든 하드웨어 스레드(124)에 의해 병렬로 유발될 수 있으며, 이는 전체 지연을 감소시킬 수 있다.
블록 336에서, 목적지 하드웨어 스레드(124a)는 목적지 종단점에 티켓 번호를 기입한다. 하드웨어 스레드(124a)는 메모리 위치, 통신 채널, 또는 현행 동기화 레벨과 연관된 목적지 종단점의 다른 필드에 티켓 번호를 기입할 수 있다. 티켓 번호는 동기화 장벽의 진입에 응답하여 하드웨어 스레드(124a)에 의해 증분되는 정수 카운터로서 구현될 수 있다. 일부 실시예에서, 티켓 번호는 임계값, 예로서 랩핑 모듈로 256을 초과한 후에 0으로 랩핑 어라운드될 수 있다. 블록 338에서, 목적지 하드웨어 스레드(124a)는 시스템 메모리(128) 내의 글로벌 메모리 위치에 티켓 번호를 기입하며, 이는 캐시 미스를 유발할 수 있다. 예를 들어, 목적지 하드웨어 스레드(124a)는 시스템 메모리(128)에 저장된 글로벌 캐시 라인 영역(212) 내의 현행 동기화 레벨과 연관된 목적지 종단점 필드에 기입하여 캐시 미스를 유발할 수 있다. 일부 실시예에서, 블록 340에서, 하드웨어 스레드(124a)는 또한 플래그 파라미터 값을 글로벌 메모리 위치에 기입할 수 있다. 예를 들어, 하드웨어 스레드(124a)는 플래그 파라미터 값을 티켓 번호의 비트로서 인코딩할 수 있다.
블록 342에서, 목적지 하드웨어 스레드(124a)는 소스 종단점으로부터 티켓 번호를 판독한다. 하드웨어 스레드(124a)는 메모리 위치, 통신 채널, 또는 현행 동기화 레벨과 연관된 소스 종단점의 다른 필드로부터 티켓 번호를 판독할 수 있다. 전술한 바와 같이, 소스 종단점은 소스 종단점에 티켓 번호를 기입하거나 이미 기입했을 수 있는 소스 하드웨어 스레드(124b)와 연관된다. 블록 344에서, 목적지 하드웨어 스레드(124a)는 시스템 메모리(128) 내의 글로벌 메모리 위치로부터 티켓 번호를 판독하며, 이는 캐시 미스를 유발할 수 있다. 예를 들어, 목적지 하드웨어 스레드(124a)는 시스템 메모리(128)에 저장된 글로벌 캐시 라인 영역(212) 내의 현행 동기화 레벨과 연관된 소스 종단점 필드로부터 판독하여 캐시 미스를 유발할 수 있다. 일부 실시예에서, 블록 346에서, 하드웨어 스레드(124a)는 또한 글로벌 메모리 위치로부터 플래그 파라미터 값을 판독할 수 있다. 예를 들어, 목적지 하드웨어 스레드(124a)는 티켓 번호의 비트를 플래그 파라미터 값으로서 디코딩할 수 있다.
블록 348에서, 목적지 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b)로부터 판독된 소스 티켓 번호가 위의 블록 336에서 결정된 현행 티켓 번호와 일치할 때까지 일시 정지한다. 즉, 목적지 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b)가 동일한 티켓 번호를 글로벌 메모리 구조에 기입할 때까지 대기한다. 목적지 하드웨어 스레드(124a)는 분주하여 대기하거나, 공전하거나, 양보하거나, 자거나, 또는 임의의 다른 적절한 기술을 수행하여 실행을 일시 정지할 수 있다.
일부 실시예에서, 블록 350에서, 목적지 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b)로부터 수신된 플래그 파라미터 값을 그 자신의 플래그 파라미터 값으로 감소시킬 수 있다. 예를 들어, 목적지 하드웨어 스레드(124a)는 소스 하드웨어 스레드(124b) 및 목적지 하드웨어 스레드(124a)의 플래그 파라미터 값으로 논리합 연산을 수행할 수 있다. 도 3a의 블록 324과 관련하여 전술한 바와 같이, 후속 반복에서, 목적지 하드웨어 스레드(124a)는 동일한 프로세서 코어(122)에 의해 실행되는 각각의 하드웨어 스레드(124)로부터의 플래그 파라미터 값으로 그 자신의 플래그 파라미터 값을 감소시킬 수 있다. 따라서, 플래그 파라미터 값은 상이한 프로세서 코어(122) 상에서 실행되는 하드웨어 스레드(124) 사이에서 전파될 수 있다.
블록 352에서, 하드웨어 스레드(124a)가 소스 하드웨어 스레드(124b)와 동기화된 후, 하드웨어 스레드(124a)는 동기화 레벨을 증분시킨다. 블록 326, 328과 관련하여 전술한 바와 같이, 동기화 레벨은 동기화 장벽이 완료되었는지를 결정하는 데 사용된다. 또한, 블록 336, 342와 관련하여 전술한 바와 같이, 동기화 레벨은 원격 동기화 동안 데이터를 판독 및 기입하기 위한 메모리 위치, 통신 채널 또는 다른 위치를 식별하는 데 사용될 수도 있다. 동기화 레벨을 증분시킨 후에, 방법(300)은 도 3a에 도시된 블록 314로 복귀하여, 동일한 프로세서 코어(122)에 의해 실행되는 하드웨어 스레드(124)와 동기화한다. 따라서, 컴퓨팅 장치(100)는 상이한 프로세서 코어(122) 상에서 실행되는 하드웨어 스레드(124)를 포함할 수 있는 원격 동기화를 수행하고, 이어서 각각의 프로세서 코어(122) 상에서 로컬 동기화를 수행하는 것을 교대로 계속할 수 있다.
이제, 도 5a-5c를 참조하면, 의사 코드(500)는 방법(300)의 하나의 잠재적인 실시예를 나타낸다. 도 5a에 도시된 바와 같이, 의사 코드(500)는 각각 도 2의 로컬 캐시 라인 영역(208), 글로벌 캐시 라인 영역(212) 및 장벽 네트워크 테이블(216)의 하나의 예시적인 실시예에 각각 대응하는 데이터 구조(208', 212', 216')를 나타낸다. 도 5b 및 도 5c에 도시된 바와 같이, 의사 코드(500)는 또한 각각 도 3a 및 도 3b의 블록 302 내지 352의 하나의 예시적인 실시예에 각각 대응하는 동작 302' 내지 352'를 나타낸다. 특히, 도 5b에 도시된 바와 같이, 의사 코드(500)는 동작 316', 318'에서 다른 하드웨어 스레드(124)와 공유되는 LocalCacheLine 객체에 감지 값을 기입한 다음에 동작 320', 322'에서 모든 감지 값이 일치할 때까지 엄격한 루프에서 그러한 LocalCacheLine 객체로부터 판독함으로써 동작 314'에서 동일 프로세서 코어(122) 상에서 실행되는 그러한 다른 하드웨어 스레드(124)와 동기화한다. 도시된 바와 같이, 의사 코드(500)는 동작 318'에서 플래그 파라미터 및 감지 값으로 비트별 OR 연산을 수행한 다음에 동작 324'에서 다른 프로세서 코어(122)로부터 플래그 비트를 테스트함으로써 플래그 파라미터를 감소시킨다.
도 5c에 도시된 바와 같이, 의사 코드(500)는 동작 336', 338'에서 GlobalCacheLine 객체의 목적지 종단점에 티켓 번호를 기입한 다음에 동작 342', 344', 348'에서 소스 종단점이 티켓 번호와 일치할 때까지 엄격한 루프에서 GlobalCacheLine 객체의 소스 종단점으로부터 판독함으로써 상이한 프로세서 코어(122)에 의해 실행될 수 있는 소스 하드웨어 스레드(124b)와 동기화한다. 소스 및 목적지 GlobalCacheLine 객체 양자는 통상적으로 프로세서 코어(122)의 로컬 캐시에 있지 않으며, 따라서 동작 336', 338' 및 342', 344'에서의 그러한 객체에 대한 판독 및 기입은 각각 캐시 미스를 유발할 수 있다. 도시된 바와 같이, 의사 코드(500)는 동작 340'에서 플래그 파라미터 및 티켓 값으로 비트별 OR 연산을 수행한 다음에 동작 346', 350'에서 소스 종단점으로부터 판독된 티켓으로부터 플래그 값을 추출하고 그 플래그 값을 플래그 파라미터로 감소시킴으로써 플래그 파라미터를 감소시킨다.
본 명세서에 개시된 기술의 예시적인 예가 아래에 제공된다. 본 기술의 실시예는 이하에 설명되는 예 중 임의의 하나 이상 및 임의의 조합을 포함할 수 있다.
예 1은 다중 스레딩 동기화를 위한 컴퓨팅 장치를 포함하며, 컴퓨팅 장치는 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 스레드에 의해, 동기화 장벽에 진입하기 위한 스레드 관리 모듈; 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 복수의 스레드와 동기화하기 위한 로컬 장벽 모듈; 및 제1 스레드에 의해, 제1 복수의 스레드와의 동기화에 응답하여 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하기 위한 원격 장벽 모듈을 포함하며, 로컬 장벽 모듈은 또한 제1 스레드에 의해, 제2 스레드와의 동기화에 응답하여 제1 복수의 스레드와 재동기화한다.
예 2는 예 1의 내용을 포함하고, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함한다.
예 3은 예 1 또는 2의 내용을 포함하고, 컴퓨팅 장치에 의해 실행될 스레드의 총 수의 n 웨이 완전 셔플을 이용하여 제2 스레드를 식별하기 위한 장벽 네트워크 모듈을 더 포함하며, n은 제1 사전결정된 수와 동일하다.
예 4는 예 1-3 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4를 포함한다.
예 5는 예 1-4 중 어느 하나의 내용을 포함하며, 스레드 관리 모듈은 또한 제1 스레드에 의해, 동기화 장벽을 벗어나며; 제1 스레드에 의해, 동기화 장벽을 벗어날 때까지 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복한다.
예 6은 예 1-5 중 어느 하나의 내용을 포함하며, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함하고; 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복하는 것은 제2 사전결정된 횟수만큼 교대로 반복하는 것을 포함하며, 제2 사전결정된 수는 컴퓨팅 장치에 의해 실행될 전체 스레드의 제3 사전결정된 수 및 제1 사전결정된 수의 함수로서 결정된다.
예 7은 예 1-6 중 어느 하나의 내용을 포함하며, 제2 사전결정된 수는 제3 사전결정된 수의 로그 함수의 올림 함수로서 결정되며, 로그 함수는 제1 사전결정된 수를 밑수로 사용한다.
예 8은 예 1-7 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4이고, 제2 사전결정된 수는 4이고, 제3 사전결정된 수는 240이다.
예 9는 예 1-8 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하는 것은 제1 복수의 스레드에 의해 공유되는 메모리 구조에 감지 값을 저장하고 - 감지 값은 동기화 장벽의 진입에 기초하여 제1 값과 제2 값 사이에서 교번함 -; 제1 복수의 스레드에 의해 공유되는 메모리 구조로부터 복수의 감지 값을 판독하고 - 복수의 감지 값 각각은 복수의 스레드 중 대응하는 스레드에 의해 저장됨 -; 복수의 감지 값이 서로 일치할 때까지 제1 스레드의 실행을 일시 정지하는 것을 포함한다.
예 10은 예 1-9 중 어느 하나의 내용을 포함하며, 스레드 관리 모듈은 또한 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 값과 제2 값 사이에서 감지 값을 교번한다.
예 11은 예 1-10 중 어느 하나의 내용을 포함하며, 감지 값을 저장하는 것은 제1 프로세서 코어의 캐시 메모리에 저장된 메모리 구조에 감지 값을 저장하는 것을 포함한다.
예 12는 예 1-11 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하는 것은 제1 티켓 번호를 글로벌 메모리 구조의 목적지 필드에 저장하고 - 목적지 필드는 제1 스레드와 연관됨 -; 글로벌 메모리 구조의 소스 필드로부터 제2 티켓 번호를 판독하고 - 소스 필드는 제2 스레드와 연관되고, 제2 티켓 번호는 제2 스레드에 의해 저장됨 -; 제2 티켓 번호가 제1 티켓 번호와 일치할 때까지 제1 스레드의 실행을 일시 정지하는 것을 포함한다.
예 13은 예 1-12 중 어느 하나의 내용을 포함하며, 글로벌 메모리 구조는 컴퓨팅 장치의 주 메모리에 저장된다.
예 14는 예 1-13 중 어느 하나의 내용을 포함하며, 제1 티켓 번호를 저장하는 것은 캐시 미스를 유발하는 것을 포함하고; 제2 티켓 번호를 판독하는 것은 캐시 미스를 유발하는 것을 포함한다.
예 15는 예 1-14 중 어느 하나의 내용을 포함하며, 스레드 관리 모듈은 또한 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 통신 채널과 제2 통신 채널 사이에서 활성 통신 채널을 교번하며; 목적지 필드에 제1 티켓 번호를 저장하는 것은 목적지 필드의 활성 통신 채널에 제1 티켓 번호를 저장하는 것을 포함하고; 소스 필드로부터 제2 티켓 번호를 판독하는 것은 소스 필드의 활성 통신 채널로부터 제2 티켓 번호를 판독하는 것을 포함한다.
예 16은 예 1-15 중 어느 하나의 내용을 포함하며, 동기화 장벽에 진입하는 것은 제1 스레드의 플래그 파라미터로 동기화 장벽에 진입하는 것을 포함하고; 제1 복수의 스레드와 동기화하는 것은 플래그 파라미터 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제1 감소 값을 생성하는 것을 포함하고; 제2 스레드와 동기화하는 것은 제1 감소 값 및 제2 스레드와 대응하는 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제2 감소 값을 생성하는 것을 포함하고; 제1 복수의 스레드와 재동기화하는 것은 제2 감소 값 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제3 감소 값을 생성하는 것을 포함한다.
예 17은 예 1-16 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하는 것은 또한 제1 복수의 스레드에 의해 공유되는 메모리 구조에 플래그 파라미터 값을 저장하는 것을 포함한다.
예 18은 예 1-17 중 어느 하나의 내용을 포함하고, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하는 것은 또한 제1 감소 값을 글로벌 메모리 구조의 목적지 필드에 저장하고 - 목적지 필드는 제1 스레드와 연관됨 -; 글로벌 메모리 구조의 소스 필드로부터 제2 스레드와 대응하는 플래그 파라미터를 판독하는 것 - 소스 필드는 제2 스레드와 연관됨 - 을 포함한다.
예 19는 다중 스레딩 동기화를 위한 방법을 포함하며, 방법은 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 스레드에 의해, 동기화 장벽에 진입하는 단계; 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 복수의 스레드와 동기화하는 단계; 제1 스레드에 의해, 제1 복수의 스레드와의 동기화에 응답하여 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하는 단계; 및 제1 스레드에 의해, 제2 스레드와의 동기화에 응답하여 제1 복수의 스레드와 재동기화하는 단계를 포함한다.
예 20은 예 19의 내용을 포함하고, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함한다.
예 21은 예 19 또는 20의 내용을 포함하고, 제2 스레드는 컴퓨팅 장치에 의해 실행될 스레드의 총 수의 n 웨이 완전 셔플을 이용하여 식별되며, n은 제1 사전결정된 수와 동일하다.
예 22는 예 19-21 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4를 포함한다.
예 23은 예 19-22 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽을 벗어나는 단계; 및 제1 스레드에 의해, 동기화 장벽을 벗어날 때까지 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복하는 단계를 더 포함한다.
예 24는 예 19-23 중 어느 하나의 내용을 포함하며, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함하고; 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복하는 단계는 제2 사전결정된 횟수만큼 교대로 반복하는 단계를 포함하며, 제2 사전결정된 수는 컴퓨팅 장치에 의해 실행될 전체 스레드의 제3 사전결정된 수 및 제1 사전결정된 수의 함수로서 결정된다.
예 25는 예 19-24 중 어느 하나의 내용을 포함하며, 제2 사전결정된 수는 제3 사전결정된 수의 로그 함수의 올림 함수로서 결정되며, 로그 함수는 제1 사전결정된 수를 밑수로 사용한다.
예 26은 예 19-25 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4이고, 제2 사전결정된 수는 4이고, 제3 사전결정된 수는 240이다.
예 27은 예 19-26 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하는 단계는 제1 복수의 스레드에 의해 공유되는 메모리 구조에 감지 값을 저장하는 단계 - 감지 값은 동기화 장벽의 진입에 기초하여 제1 값과 제2 값 사이에서 교번함 -; 제1 복수의 스레드에 의해 공유되는 메모리 구조로부터 복수의 감지 값을 판독하는 단계 - 복수의 감지 값 각각은 복수의 스레드 중 대응하는 스레드에 의해 저장됨 -; 및 복수의 감지 값이 서로 일치할 때까지 제1 스레드의 실행을 일시 정지하는 단계를 포함한다.
예 28은 예 19-27 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 값과 제2 값 사이에서 감지 값을 교번하는 단계를 더 포함한다.
예 29는 예 19-28 중 어느 하나의 내용을 포함하며, 감지 값을 저장하는 단계는 제1 프로세서 코어의 캐시 메모리에 저장된 메모리 구조에 감지 값을 저장하는 단계를 포함한다.
예 30은 예 19-29 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하는 단계는 제1 티켓 번호를 글로벌 메모리 구조의 목적지 필드에 저장하는 단계 - 목적지 필드는 제1 스레드와 연관됨 -; 글로벌 메모리 구조의 소스 필드로부터 제2 티켓 번호를 판독하는 단계 - 소스 필드는 제2 스레드와 연관되고, 제2 티켓 번호는 제2 스레드에 의해 저장됨 -; 및 제2 티켓 번호가 제1 티켓 번호와 일치할 때까지 제1 스레드의 실행을 일시 정지하는 단계를 포함한다.
예 31은 예 19-30 중 어느 하나의 내용을 포함하며, 글로벌 메모리 구조는 컴퓨팅 장치의 주 메모리에 저장된다.
예 32는 예 19-31 중 어느 하나의 내용을 포함하며, 제1 티켓 번호를 저장하는 단계는 캐시 미스를 유발하는 단계를 포함하고; 제2 티켓 번호를 판독하는 단계는 캐시 미스를 유발하는 단계를 포함한다.
예 33은 예 19-32 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 통신 채널과 제2 통신 채널 사이에서 활성 통신 채널을 교번하는 단계를 더 포함하며; 목적지 필드에 제1 티켓 번호를 저장하는 단계는 목적지 필드의 활성 통신 채널에 제1 티켓 번호를 저장하는 단계를 포함하고; 소스 필드로부터 제2 티켓 번호를 판독하는 단계는 소스 필드의 활성 통신 채널로부터 제2 티켓 번호를 판독하는 단계를 포함한다.
예 34는 예 19-33 중 어느 하나의 내용을 포함하며, 동기화 장벽에 진입하는 단계는 제1 스레드의 플래그 파라미터로 동기화 장벽에 진입하는 단계를 포함하고; 제1 복수의 스레드와 동기화하는 단계는 플래그 파라미터 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제1 감소 값을 생성하는 단계를 포함하고; 제2 스레드와 동기화하는 단계는 제1 감소 값 및 제2 스레드와 대응하는 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제2 감소 값을 생성하는 단계를 포함하고; 제1 복수의 스레드와 재동기화하는 단계는 제2 감소 값 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제3 감소 값을 생성하는 단계를 포함한다.
예 35는 예 19-34 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하는 단계는 제1 복수의 스레드에 의해 공유되는 메모리 구조에 플래그 파라미터 값을 저장하는 단계를 더 포함한다.
예 36은 예 19-35 중 어느 하나의 내용을 포함하고, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하는 단계는 제1 감소 값을 글로벌 메모리 구조의 목적지 필드에 저장하는 단계 - 목적지 필드는 제1 스레드와 연관됨 -; 및 글로벌 메모리 구조의 소스 필드로부터 제2 스레드와 대응하는 플래그 파라미터를 판독하는 단계 - 소스 필드는 제2 스레드와 연관됨 - 를 더 포함한다.
예 37은 컴퓨팅 장치를 포함하며, 컴퓨팅 장치는 프로세서; 및 프로세서에 의해 실행될 때 컴퓨팅 장치로 하여금 예 19-36 중 어느 하나의 방법을 수행하게 하는 복수의 명령어들이 저장된 메모리를 포함한다.
예 38은 실행되는 것에 응답하여 컴퓨팅 장치가 예 19-36 중 어느 하나의 방법을 수행하게 하는 저장된 복수의 명령어들을 포함하는 하나 이상의 머신 판독가능 저장 매체를 포함한다.
예 39는 예 19-36 중 어느 하나의 방법을 수행하기 위한 수단을 포함하는 컴퓨팅 장치를 포함한다.
예 40은 다중 스레딩 동기화를 위한 컴퓨팅 장치를 포함하며, 컴퓨팅 장치는 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 스레드에 의해, 동기화 장벽에 진입하기 위한 수단; 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 복수의 스레드와 동기화하기 위한 수단; 제1 스레드에 의해, 제1 복수의 스레드와의 동기화에 응답하여 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하기 위한 수단; 및 제1 스레드에 의해, 제2 스레드와의 동기화에 응답하여 제1 복수의 스레드와 재동기화하기 위한 수단을 포함한다.
예 41은 예 40의 내용을 포함하고, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함한다.
예 42는 예 40 또는 41의 내용을 포함하고, 제2 스레드는 컴퓨팅 장치에 의해 실행될 스레드의 총 수의 n 웨이 완전 셔플을 이용하여 식별되며, n은 제1 사전결정된 수와 동일하다.
예 43은 예 40-42 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4를 포함한다.
예 44는 예 40-43 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽을 벗어나기 위한 수단; 및 제1 스레드에 의해, 동기화 장벽을 벗어날 때까지 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복하기 위한 수단을 더 포함한다.
예 45는 예 40-44 중 어느 하나의 내용을 포함하며, 제1 프로세서 코어는 제1 사전결정된 수의 서브코어를 포함하고; 제1 복수의 스레드는 제1 사전결정된 수의 스레드를 포함하고; 제2 스레드와의 동기화 및 제1 복수의 스레드와의 재동기화를 교대로 반복하기 위한 수단은 제2 사전결정된 횟수만큼 교대로 반복하기 위한 수단을 포함하며, 제2 사전결정된 수는 컴퓨팅 장치에 의해 실행될 전체 스레드의 제3 사전결정된 수 및 제1 사전결정된 수의 함수로서 결정된다.
예 46은 예 40-45 중 어느 하나의 내용을 포함하며, 제2 사전결정된 수는 제3 사전결정된 수의 로그 함수의 올림 함수로서 결정되며, 로그 함수는 제1 사전결정된 수를 밑수로 사용한다.
예 47은 예 40-46 중 어느 하나의 내용을 포함하며, 제1 사전결정된 수는 4이고, 제2 사전결정된 수는 4이고, 제3 사전결정된 수는 240이다.
예 48은 예 40-47 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하기 위한 수단은 제1 복수의 스레드에 의해 공유되는 메모리 구조에 감지 값을 저장하기 위한 수단 - 감지 값은 동기화 장벽의 진입에 기초하여 제1 값과 제2 값 사이에서 교번함 -; 제1 복수의 스레드에 의해 공유되는 메모리 구조로부터 복수의 감지 값을 판독하기 위한 수단 - 복수의 감지 값 각각은 복수의 스레드 중 대응하는 스레드에 의해 저장됨 -; 및 복수의 감지 값이 서로 일치할 때까지 제1 스레드의 실행을 일시 정지하기 위한 수단을 포함한다.
예 49는 예 40-48 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 값과 제2 값 사이에서 감지 값을 교번하기 위한 수단을 더 포함한다.
예 50은 예 40-49 중 어느 하나의 내용을 포함하며, 감지 값을 저장하기 위한 수단은 제1 프로세서 코어의 캐시 메모리에 저장된 메모리 구조에 감지 값을 저장하기 위한 수단을 포함한다.
예 51은 예 40-50 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하기 위한 수단은 제1 티켓 번호를 글로벌 메모리 구조의 목적지 필드에 저장하기 위한 수단 - 목적지 필드는 제1 스레드와 연관됨 -; 글로벌 메모리 구조의 소스 필드로부터 제2 티켓 번호를 판독하기 위한 수단 - 소스 필드는 제2 스레드와 연관되고, 제2 티켓 번호는 제2 스레드에 의해 저장됨 -; 및 제2 티켓 번호가 제1 티켓 번호와 일치할 때까지 제1 스레드의 실행을 일시 정지하기 위한 수단을 포함한다.
예 52는 예 40-51 중 어느 하나의 내용을 포함하며, 글로벌 메모리 구조는 컴퓨팅 장치의 주 메모리에 저장된다.
예 53은 예 40-52 중 어느 하나의 내용을 포함하며, 제1 티켓 번호를 저장하기 위한 수단은 캐시 미스를 유발하기 위한 수단을 포함하고; 제2 티켓 번호를 판독하기 위한 수단은 캐시 미스를 유발하기 위한 수단을 포함한다.
예 54는 예 40-53 중 어느 하나의 내용을 포함하며, 제1 스레드에 의해, 동기화 장벽의 진입에 응답하여 제1 통신 채널과 제2 통신 채널 사이에서 활성 통신 채널을 교번하기 위한 수단을 더 포함하며; 목적지 필드에 제1 티켓 번호를 저장하기 위한 수단은 목적지 필드의 활성 통신 채널에 제1 티켓 번호를 저장하기 위한 수단을 포함하고; 소스 필드로부터 제2 티켓 번호를 판독하기 위한 수단은 소스 필드의 활성 통신 채널로부터 제2 티켓 번호를 판독하기 위한 수단을 포함한다.
예 55는 예 40-54 중 어느 하나의 내용을 포함하며, 동기화 장벽에 진입하기 위한 수단은 제1 스레드의 플래그 파라미터로 동기화 장벽에 진입하기 위한 수단을 포함하고; 제1 복수의 스레드와 동기화하기 위한 수단은 플래그 파라미터 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제1 감소 값을 생성하기 위한 수단을 포함하고; 제2 스레드와 동기화하기 위한 수단은 제1 감소 값 및 제2 스레드와 대응하는 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제2 감소 값을 생성하기 위한 수단을 포함하고; 제1 복수의 스레드와 재동기화하기 위한 수단은 제2 감소 값 및 제1 복수의 스레드와 대응하는 복수의 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제3 감소 값을 생성하기 위한 수단을 포함한다.
예 56은 예 40-55 중 어느 하나의 내용을 포함하며, 제1 복수의 스레드와 동기화하기 위한 수단은 제1 복수의 스레드에 의해 공유되는 메모리 구조에 플래그 파라미터 값을 저장하기 위한 수단을 더 포함한다.
예 57은 예 40-56 중 어느 하나의 내용을 포함하고, 제1 스레드에 의해, 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 제2 스레드와 동기화하기 위한 수단은 제1 감소 값을 글로벌 메모리 구조의 목적지 필드에 저장하기 위한 수단 - 목적지 필드는 제1 스레드와 연관됨 -; 및 글로벌 메모리 구조의 소스 필드로부터 제2 스레드와 대응하는 플래그 파라미터를 판독하기 위한 수단 - 소스 필드는 제2 스레드와 연관됨 -을 더 포함한다.

Claims (25)

  1. 다중 스레딩 동기화(multithreaded synchronization)를 위한 컴퓨팅 장치로서,
    복수의 프로세서 코어들을 포함하는 프로세서 - 상기 복수의 프로세서 코어들의 각 프로세서 코어는 제1 사전결정된 수의 서브코어들을 포함함 -;
    상기 컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 스레드에 의해, 동기화 장벽에 진입하기 위한 스레드 관리 모듈;
    상기 제1 스레드에 의해, 상기 동기화 장벽의 진입에 응답하여 상기 컴퓨팅 장치의 상기 제1 프로세서 코어에 의해 실행되는 제1 복수의 스레드들과 동기화하기 위한 로컬 장벽 모듈 - 상기 제1 복수의 스레드들은 상기 제1 사전결정된 수의 스레드들을 포함함 -;
    상기 컴퓨팅 장치에 의해 실행될 스레드들의 총 수의 n 웨이 완전 셔플(n-way perfect shuffle)을 이용하여 제2 스레드를 식별하기 위한 장벽 네트워크 모듈 - n은 상기 제1 사전결정된 수와 동일하고, 상기 n 웨이 완전 셔플을 이용하여 상기 제2 스레드를 식별하는 것은 아래 식을 이용하여 상기 제2 스레드의 스레드 식별자 j를 결정하는 것을 포함하고,
    Figure 112022093134761-pct00013
    ;
    위 식에서 N은 상기 스레드들의 총 수와 동일하고, subcorek는 상기 제1 스레드의 서브코어 식별자와 동일하고, corek는 상기 제1 스레드의 코어 식별자와 동일함 -; 및
    상기 제1 스레드에 의해, 상기 제1 복수의 스레드들과의 동기화에 응답하고 상기 제2 스레드의 식별에 응답하여 상기 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 상기 제2 스레드와 동기화하기 위한 원격 장벽 모듈
    을 포함하며,
    상기 로컬 장벽 모듈은 또한 상기 제1 스레드에 의해, 상기 제2 스레드와의 동기화에 응답하여 상기 제1 복수의 스레드들과 재동기화하는, 컴퓨팅 장치.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서, 상기 스레드 관리 모듈은 또한
    상기 제1 스레드에 의해, 상기 동기화 장벽을 벗어나며;
    상기 제1 스레드에 의해, 상기 동기화 장벽을 벗어날 때까지 상기 제2 스레드와의 동기화 및 상기 제1 복수의 스레드들과의 재동기화를 교대로 반복하는, 컴퓨팅 장치.
  5. 제4항에 있어서,
    상기 제2 스레드와의 동기화 및 상기 제1 복수의 스레드들과의 재동기화를 교대로 반복하는 것은 제2 사전결정된 횟수만큼 교대로 반복하는 것을 포함하며, 상기 제2 사전결정된 수는 상기 컴퓨팅 장치에 의해 실행될 전체 스레드들의 제3 사전결정된 수 및 상기 제1 사전결정된 수의 함수로서 결정되는, 컴퓨팅 장치.
  6. 제5항에 있어서, 상기 제2 사전결정된 수는 상기 제3 사전결정된 수의 로그 함수의 올림 함수(ceiling function)로서 결정되며, 상기 로그 함수는 상기 제1 사전결정된 수를 밑수(base)로 사용하는, 컴퓨팅 장치.
  7. 제6항에 있어서, 상기 제1 사전결정된 수는 4이고, 상기 제2 사전결정된 수는 4이고, 상기 제3 사전결정된 수는 240인, 컴퓨팅 장치.
  8. 제1항, 제4항 내지 제7항 중 어느 한 항에 있어서, 상기 제1 복수의 스레드들과 동기화하는 것은
    상기 제1 복수의 스레드들에 의해 공유되는 메모리 구조에 감지 값(sense value)을 저장하고 - 상기 감지 값은 상기 동기화 장벽의 진입에 기초하여 제1 값과 제2 값 사이에서 교번함 -;
    상기 제1 복수의 스레드들에 의해 공유되는 상기 메모리 구조로부터 복수의 감지 값들을 판독하고 - 상기 복수의 감지 값들 각각은 상기 복수의 스레드들 중 대응하는 스레드에 의해 저장됨 -;
    상기 복수의 감지 값들이 서로 일치할 때까지 상기 제1 스레드의 실행을 일시 정지하는 것을 포함하는, 컴퓨팅 장치.
  9. 제8항에 있어서, 상기 스레드 관리 모듈은 또한
    상기 제1 스레드에 의해, 상기 동기화 장벽의 진입에 응답하여 상기 제1 값과 상기 제2 값 사이에서 상기 감지 값을 교번하는, 컴퓨팅 장치.
  10. 제8항에 있어서, 상기 감지 값을 저장하는 것은 상기 제1 프로세서 코어의 캐시 메모리에 저장된 메모리 구조에 상기 감지 값을 저장하는 것을 포함하는, 컴퓨팅 장치.
  11. 제1항, 제4항 내지 제7항 중 어느 한 항에 있어서, 상기 제1 스레드에 의해, 상기 컴퓨팅 장치의 상기 제2 프로세서 코어에 의해 실행되는 상기 제2 스레드와 동기화하는 것은
    제1 티켓 번호를 글로벌 메모리 구조의 목적지 필드에 저장하고 - 상기 목적지 필드는 상기 제1 스레드와 연관됨 -;
    상기 글로벌 메모리 구조의 소스 필드로부터 제2 티켓 번호를 판독하고 - 상기 소스 필드는 상기 제2 스레드와 연관되고, 상기 제2 티켓 번호는 상기 제2 스레드에 의해 저장됨 -;
    상기 제2 티켓 번호가 상기 제1 티켓 번호와 일치할 때까지 상기 제1 스레드의 실행을 일시 정지하는 것을 포함하는, 컴퓨팅 장치.
  12. 제11항에 있어서,
    상기 글로벌 메모리 구조는 상기 컴퓨팅 장치의 주 메모리에 저장되고;
    상기 제1 티켓 번호를 저장하는 것은 캐시 미스를 유발하는 것을 포함하고;
    상기 제2 티켓 번호를 판독하는 것은 캐시 미스를 유발하는 것을 포함하는, 컴퓨팅 장치.
  13. 제11항에 있어서, 상기 스레드 관리 모듈은 또한
    상기 제1 스레드에 의해, 상기 동기화 장벽의 진입에 응답하여 제1 통신 채널과 제2 통신 채널 사이에서 활성 통신 채널을 교번하며;
    상기 목적지 필드에 상기 제1 티켓 번호를 저장하는 것은 상기 목적지 필드의 상기 활성 통신 채널에 상기 제1 티켓 번호를 저장하는 것을 포함하고;
    상기 소스 필드로부터 상기 제2 티켓 번호를 판독하는 것은 상기 소스 필드의 상기 활성 통신 채널로부터 상기 제2 티켓 번호를 판독하는 것을 포함하는, 컴퓨팅 장치.
  14. 제1항, 제4항 내지 제7항 중 어느 한 항에 있어서,
    상기 동기화 장벽에 진입하는 것은 상기 제1 스레드의 플래그 파라미터로 상기 동기화 장벽에 진입하는 것을 포함하고;
    상기 제1 복수의 스레드들과 동기화하는 것은 상기 플래그 파라미터 및 상기 제1 복수의 스레드들과 대응하는 복수의 플래그 파라미터들에 대해 논리합 감소 연산(logical-OR reduction operation)을 수행하여 제1 감소 값을 생성하는 것을 포함하고;
    상기 제2 스레드와 동기화하는 것은 상기 제1 감소 값 및 상기 제2 스레드와 대응하는 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제2 감소 값을 생성하는 것을 포함하고;
    상기 제1 복수의 스레드들과 재동기화하는 것은 상기 제2 감소 값 및 상기 제1 복수의 스레드들과 대응하는 복수의 플래그 파라미터들에 대해 논리합 감소 연산을 수행하여 제3 감소 값을 생성하는 것을 포함하는, 컴퓨팅 장치.
  15. 제14항에 있어서, 상기 제1 복수의 스레드들과 동기화하는 것은 상기 제1 복수의 스레드들에 의해 공유되는 메모리 구조에 플래그 파라미터 값을 저장하는 것을 더 포함하는, 컴퓨팅 장치.
  16. 제14항에 있어서, 상기 제1 스레드에 의해, 상기 컴퓨팅 장치의 상기 제2 프로세서 코어에 의해 실행되는 상기 제2 스레드와 동기화하는 것은 또한
    상기 제1 감소 값을 글로벌 메모리 구조의 목적지 필드에 저장하고 - 상기 목적지 필드는 상기 제1 스레드와 연관됨 -;
    상기 글로벌 메모리 구조의 소스 필드로부터 상기 제2 스레드와 대응하는 상기 플래그 파라미터를 판독하는 것 - 상기 소스 필드는 상기 제2 스레드와 연관됨 - 을 포함하는, 컴퓨팅 장치.
  17. 다중 스레딩 동기화를 위한 방법으로서,
    컴퓨팅 장치의 제1 프로세서 코어에 의해 실행되는 제1 스레드에 의해, 동기화 장벽에 진입하는 단계 - 상기 제1 프로세서 코어는 제1 사전결정된 수의 서브코어들을 포함함 -;
    상기 제1 스레드에 의해, 상기 동기화 장벽의 진입에 응답하여 상기 컴퓨팅 장치의 상기 제1 프로세서 코어에 의해 실행되는 제1 복수의 스레드들과 동기화하는 단계 - 상기 제1 복수의 스레드들은 상기 제1 사전결정된 수의 스레드들을 포함함 -;
    상기 제1 스레드에 의해, 상기 컴퓨팅 장치에 의해 실행될 스레드들의 총 수의 n 웨이 완전 셔플(n-way perfect shuffle)을 이용하여 제2 스레드를 식별하는 단계 - n은 상기 제1 사전결정된 수와 동일하고, 상기 n 웨이 완전 셔플을 이용하여 상기 제2 스레드를 식별하는 것은 아래 식을 이용하여 상기 제2 스레드의 스레드 식별자 j를 결정하는 것을 포함하고,
    Figure 112022093134761-pct00014
    ;
    위 식에서 N은 상기 스레드들의 총 수와 동일하고, subcorek는 상기 제1 스레드의 서브코어 식별자와 동일하고, corek는 상기 제1 스레드의 코어 식별자와 동일함 -;
    상기 제1 스레드에 의해, 상기 제1 복수의 스레드들과의 동기화에 응답하고 상기 제2 스레드를 식별하는 것에 응답하여 상기 컴퓨팅 장치의 제2 프로세서 코어에 의해 실행되는 상기 제2 스레드와 동기화하는 단계; 및
    상기 제1 스레드에 의해, 상기 제2 스레드와의 동기화에 응답하여 상기 제1 복수의 스레드들과 재동기화하는 단계
    를 포함하는, 방법.
  18. 삭제
  19. 제17항에 있어서, 상기 방법은
    상기 제1 스레드에 의해, 상기 동기화 장벽을 벗어나는 단계; 및
    상기 제1 스레드에 의해, 상기 동기화 장벽을 벗어날 때까지 상기 제2 스레드와의 동기화 및 상기 제1 복수의 스레드들과의 재동기화를 제2 사전결정된 횟수만큼 교대로 반복하는 단계 - 상기 제2 사전결정된 수는 상기 컴퓨팅 장치에 의해 실행될 전체 스레드들의 제3 사전결정된 수 및 상기 제1 사전결정된 수의 로그 함수의 올림 함수로서 결정되며, 상기 로그 함수는 상기 제1 사전결정된 수를 밑수로 사용함 -
    를 더 포함하는, 방법.
  20. 제17항에 있어서, 상기 제1 복수의 스레드들과 동기화하는 단계는
    상기 제1 복수의 스레드들에 의해 공유되는 메모리 구조에 감지 값을 저장하는 단계 - 상기 감지 값은 상기 동기화 장벽의 진입에 기초하여 제1 값과 제2 값 사이에서 교번함 -;
    상기 제1 복수의 스레드들에 의해 공유되는 상기 메모리 구조로부터 복수의 감지 값들을 판독하는 단계 - 상기 복수의 감지 값들 각각은 상기 복수의 스레드들 중 대응하는 스레드에 의해 저장됨 -; 및
    상기 복수의 감지 값들이 서로 일치할 때까지 상기 제1 스레드의 실행을 일시 정지하는 단계
    를 포함하는, 방법.
  21. 제17항에 있어서, 상기 제1 스레드에 의해, 상기 컴퓨팅 장치의 상기 제2 프로세서 코어에 의해 실행되는 상기 제2 스레드와 동기화하는 단계는
    제1 티켓 번호를 글로벌 메모리 구조의 목적지 필드에 저장하는 단계 - 상기 목적지 필드는 상기 제1 스레드와 연관됨 -;
    상기 글로벌 메모리 구조의 소스 필드로부터 제2 티켓 번호를 판독하는 단계 - 상기 소스 필드는 상기 제2 스레드와 연관되고, 상기 제2 티켓 번호는 상기 제2 스레드에 의해 저장됨 -; 및
    상기 제2 티켓 번호가 상기 제1 티켓 번호와 일치할 때까지 상기 제1 스레드의 실행을 일시 정지하는 단계
    를 포함하는, 방법.
  22. 제17항에 있어서,
    상기 동기화 장벽에 진입하는 단계는 상기 제1 스레드의 플래그 파라미터로 상기 동기화 장벽에 진입하는 단계를 포함하고;
    상기 제1 복수의 스레드들과 동기화하는 단계는 상기 플래그 파라미터 및 상기 제1 복수의 스레드들과 대응하는 복수의 플래그 파라미터들에 대해 논리합 감소 연산을 수행하여 제1 감소 값을 생성하는 단계를 포함하고;
    상기 제2 스레드와 동기화하는 단계는 상기 제1 감소 값 및 상기 제2 스레드와 대응하는 플래그 파라미터에 대해 논리합 감소 연산을 수행하여 제2 감소 값을 생성하는 단계를 포함하고;
    상기 제1 복수의 스레드들과 재동기화하는 단계는 상기 제2 감소 값 및 상기 제1 복수의 스레드들과 대응하는 복수의 플래그 파라미터들에 대해 논리합 감소 연산을 수행하여 제3 감소 값을 생성하는 단계를 포함하는, 방법.
  23. 컴퓨팅 장치로서,
    프로세서; 및
    상기 프로세서에 의해 실행될 때 상기 컴퓨팅 장치로 하여금 제17항, 제19항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 복수의 명령어들이 저장된 메모리
    를 포함하는, 컴퓨팅 장치.
  24. 실행되는 것에 응답하여 컴퓨팅 장치로 하여금 제17항, 제19항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 저장된 복수의 명령어들을 포함하는, 하나 이상의 머신 판독가능 저장 매체.
  25. 제17항, 제19항 내지 제22항 중 어느 한 항의 방법을 수행하기 위한 수단을 포함하는, 컴퓨팅 장치.
KR1020177012878A 2014-12-12 2015-11-11 다수 코어 처리를 위한 고속 동기화 장벽 기술 KR102519580B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/568,890 US9760410B2 (en) 2014-12-12 2014-12-12 Technologies for fast synchronization barriers for many-core processing
US14/568,890 2014-12-12
PCT/US2015/060167 WO2016094018A1 (en) 2014-12-12 2015-11-11 Technologies for fast synchronization barriers for many-core processing

Publications (2)

Publication Number Publication Date
KR20170093800A KR20170093800A (ko) 2017-08-16
KR102519580B1 true KR102519580B1 (ko) 2023-04-10

Family

ID=56107923

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012878A KR102519580B1 (ko) 2014-12-12 2015-11-11 다수 코어 처리를 위한 고속 동기화 장벽 기술

Country Status (5)

Country Link
US (1) US9760410B2 (ko)
EP (1) EP3230861B1 (ko)
KR (1) KR102519580B1 (ko)
CN (1) CN107209698B (ko)
WO (1) WO2016094018A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9886317B2 (en) 2015-02-02 2018-02-06 Oracle International Corporation Fine-grained scheduling of work in runtime systems
US10114681B2 (en) * 2016-03-30 2018-10-30 Qualcomm Incorporated Identifying enhanced synchronization operation outcomes to improve runtime operations
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10564989B2 (en) 2017-11-28 2020-02-18 Microsoft Technology Licensing Thread independent parametric positioning for rendering elements
US10424041B2 (en) * 2017-12-11 2019-09-24 Microsoft Technology Licensing, Llc Thread independent scalable vector graphics operations
US10725817B2 (en) * 2018-11-09 2020-07-28 International Business Machines Corporation Reducing spin count in work-stealing for copying garbage collection based on average object references
US11023291B2 (en) 2019-05-10 2021-06-01 International Business Machines Corporation Synchronization between processes in a coordination namespace
CN112416053B (zh) * 2019-08-23 2023-11-17 北京希姆计算科技有限公司 多核架构的同步信号产生电路、芯片和同步方法及装置
US12013791B2 (en) 2021-06-01 2024-06-18 International Business Machines Corporation Reset dynamic address translation protection instruction
US11593275B2 (en) 2021-06-01 2023-02-28 International Business Machines Corporation Operating system deactivation of storage block write protection absent quiescing of processors
CN114706813B (zh) * 2022-05-05 2023-07-14 上海壁仞智能科技有限公司 多核异构片上系统、非对称同步方法、计算设备和介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060143361A1 (en) 2004-12-29 2006-06-29 Sailesh Kottapalli Synchronizing multiple threads efficiently
JP2006259821A (ja) * 2005-03-15 2006-09-28 Hitachi Ltd 並列計算機の同期方法及びプログラム
US20110078417A1 (en) 2009-09-25 2011-03-31 Brian Fahs Cooperative thread array reduction and scan operations
US20120203881A1 (en) 2011-02-09 2012-08-09 Fujitsu Limited Computing system, configuration management device, and management
US20140164735A1 (en) 2012-12-06 2014-06-12 Coherent Logix, Incorporated Processing system with synchronization instruction

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7512950B1 (en) * 2003-08-14 2009-03-31 Sun Microsystems, Inc. Barrier synchronization object for multi-threaded applications
US8307194B1 (en) * 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7437521B1 (en) * 2003-08-18 2008-10-14 Cray Inc. Multistream processing memory-and barrier-synchronization method and apparatus
US7475397B1 (en) * 2004-07-28 2009-01-06 Sun Microsystems, Inc. Methods and apparatus for providing a remote serialization guarantee
US7613875B2 (en) * 2004-12-29 2009-11-03 Intel Corporation Apparatus and method for incremental package deployment
CN102184123B (zh) * 2005-03-02 2013-10-16 英特尔公司 一种附加地支持虚拟多线程的多线程处理器及系统
US8056087B2 (en) * 2006-09-25 2011-11-08 International Business Machines Corporation Effective use of a hardware barrier synchronization register for protocol synchronization
US20120179896A1 (en) * 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system
JP5974703B2 (ja) * 2012-07-20 2016-08-23 富士通株式会社 情報処理装置およびバリア同期方法
GB2499277B (en) * 2012-08-30 2014-04-02 Imagination Tech Ltd Global register protection in a multi-threaded processor
US9632976B2 (en) * 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US20140282564A1 (en) * 2013-03-15 2014-09-18 Eli Almog Thread-suspending execution barrier

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060143361A1 (en) 2004-12-29 2006-06-29 Sailesh Kottapalli Synchronizing multiple threads efficiently
JP2006259821A (ja) * 2005-03-15 2006-09-28 Hitachi Ltd 並列計算機の同期方法及びプログラム
US20110078417A1 (en) 2009-09-25 2011-03-31 Brian Fahs Cooperative thread array reduction and scan operations
US20120203881A1 (en) 2011-02-09 2012-08-09 Fujitsu Limited Computing system, configuration management device, and management
JP2012164259A (ja) * 2011-02-09 2012-08-30 Fujitsu Ltd 計算システム、構成管理装置および構成管理プログラム
US20140164735A1 (en) 2012-12-06 2014-06-12 Coherent Logix, Incorporated Processing system with synchronization instruction

Also Published As

Publication number Publication date
EP3230861B1 (en) 2020-05-06
US20160170813A1 (en) 2016-06-16
WO2016094018A1 (en) 2016-06-16
EP3230861A4 (en) 2018-09-19
US9760410B2 (en) 2017-09-12
CN107209698B (zh) 2020-09-29
EP3230861A1 (en) 2017-10-18
KR20170093800A (ko) 2017-08-16
CN107209698A (zh) 2017-09-26

Similar Documents

Publication Publication Date Title
KR102519580B1 (ko) 다수 코어 처리를 위한 고속 동기화 장벽 기술
US10554577B2 (en) Adaptive resource scheduling for data stream processing
CN108964982B (zh) 用于实现区块链的多节点的部署的方法、装置及存储介质
US20090089765A1 (en) Critical section ordering for multiple trace applications
EP3230860B1 (en) Technologies for efficient synchronization barriers with work stealing support
JP2005235019A5 (ko)
US20160335322A1 (en) Automatic generation of multi-source breadth-first search from high-level graph language
US9495224B2 (en) Switching a locking mode of an object in a multi-thread program
US10671438B2 (en) Providing additional memory and cache for the execution of critical tasks by folding processing units of a processor complex
US9853866B2 (en) Efficient parallel processing of a network with conflict constraints between nodes
CN111124270A (zh) 缓存管理的方法、设备和计算机程序产品
CN110046025B (zh) 一种用于重启虚拟机的方法、介质、计算机系统和系统
US9891655B2 (en) Parallel operation system, apparatus and medium
US10970055B2 (en) Identifying software and hardware bottlenecks
US20100269119A1 (en) Event-based dynamic resource provisioning
US9921639B2 (en) Clustering execution in a processing system to increase power savings
KR102073474B1 (ko) 비트스트림의 임의성을 검증하는 방법 및 그 시스템
CN108920175B (zh) 基板管理控制器bmc代码逻辑的实现方法及系统
KR101674324B1 (ko) 실시간 제어 응용에 적용되는 태스크 스케쥴링 장치 및 방법
JP6217386B2 (ja) マルチプロセッサ用プログラム生成方法
KR101571802B1 (ko) 멀티 스레드 기반 세션 관리 방법
CN111478949B (zh) 数据处理方法和装置
US20220309423A1 (en) Method and system for identifying and quantifying organizational waste
KR20140134484A (ko) 멀티 코어 프로세서에 할당된 공유 자원의 데이터 처리 방법, 멀티 코어 프로세서를 갖는 전자 장치 및 데이터 출력 장치
JP2014229969A (ja) 並列分散映像解析装置、並列分散映像解析方法及び並列分散映像解析プログラム

Legal Events

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