KR101968711B1 - 저장된 원자적 절차를 사용하는 프로그램 가능한 원자적 메모리 - Google Patents
저장된 원자적 절차를 사용하는 프로그램 가능한 원자적 메모리 Download PDFInfo
- Publication number
- KR101968711B1 KR101968711B1 KR1020137015787A KR20137015787A KR101968711B1 KR 101968711 B1 KR101968711 B1 KR 101968711B1 KR 1020137015787 A KR1020137015787 A KR 1020137015787A KR 20137015787 A KR20137015787 A KR 20137015787A KR 101968711 B1 KR101968711 B1 KR 101968711B1
- Authority
- KR
- South Korea
- Prior art keywords
- sequence
- instructions
- atomic
- cache line
- instruction
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 98
- 238000000034 method Methods 0.000 title claims description 45
- 238000012545 processing Methods 0.000 claims abstract description 79
- 238000012795 verification Methods 0.000 claims description 60
- 230000004044 response Effects 0.000 claims description 15
- 230000008859 change Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 11
- 238000010200 validation analysis Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000000523 sample Substances 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- IERHLVCPSMICTF-XVFCMESISA-N CMP group Chemical group P(=O)(O)(O)OC[C@@H]1[C@H]([C@H]([C@@H](O1)N1C(=O)N=C(N)C=C1)O)O IERHLVCPSMICTF-XVFCMESISA-N 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 239000013317 conjugated microporous polymer Substances 0.000 description 2
- 239000013078 crystal Substances 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 210000003643 myeloid progenitor cell Anatomy 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- ZICZZIRIRHGROF-UHFFFAOYSA-N 1-$l^{1}-oxidanyl-2,2,4,5,5-pentamethylimidazole Chemical compound CC1=NC(C)(C)N([O])C1(C)C ZICZZIRIRHGROF-UHFFFAOYSA-N 0.000 description 1
- 101100078188 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) MST27 gene Proteins 0.000 description 1
- 101100273030 Schizosaccharomyces pombe (strain 972 / ATCC 24843) caf1 gene Proteins 0.000 description 1
- 206010000210 abortion Diseases 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
멀티 프로세싱 코어 시스템에 있는 프로세싱 코어는 시퀀스의 명령을 단일 원자적 메모리 트랜잭션으로서 실행하도록 구성된다. 프로세싱 코어는, 시퀀스에 있는 명령이 공유 메모리에 액세스하도록 프로세싱 코어에 명령하지 않는다는 것을 포함하는, 한 세트의 하나 이상의 원자성 기준을, 시퀀스가 충족시키는지를 검증한다. 시퀀스를 검증한 후에, 프로세싱 코어는, 공유 메모리 데이터를 저장하는 소스 캐시 라인을 록킹하고, 검증된 시퀀스의 명령를 실행하고, 시퀀스의 결과를 소스 캐시 라인 내로 저장하고, 소스 캐시 라인을 언록킹하는 것에 의한 것과 같이 시퀀스를 단일 원자적 메모리 트랜잭션으로서 실행한다.
Description
컴퓨터 아키텍처에서 현대의 동향은, 메모리를 공유하고 각각 독립적 동시 병행 실행을 할 수 있는 멀티플 프로세싱 코어를 포함하는 단일 시스템 및/또는 프로세서가 멀티 프로세싱 추세임을 알 수 있었다. 단일 칩 상에 2, 4, 또는 8개의 프로세싱 코어를 구비한 칩 멀티 프로세서(chip multi-processor: CMP) 또는 더욱 많은 프로세싱 코어를 구비한 범용 그래픽 프로세싱 유닛(general-purpose graphics processing unit: GPGPU)을 찾는 것은 지금 비교적 일반적이다. 부가적으로, 각각의 칩 및/또는 시스템 상에서 프로세싱 코어의 수는 앞으로 한층 더욱 증가할 것 같다.
현대의 프로세서의 증가된 병행 능력을 이용하도록, 소프트웨어 프로그래머들은 명령 세트 아키텍처(instruction set architecture: ISA) 지원 원자적 명령(atomic instruction)과 같은 다양한 동기화 기능(synchronization facilities)를 이용한다. 프로세싱 코어는, 명령 자체가 멀티플 마이크로 명령을 포함할지라도, 시스템에 있는 다른 프로세싱 코어에 대하여 원자적으로(atomically) 이러한 명령을 실행할 수 있다. 예를 들어, x86 아키텍처에서 원자적 명령 CMPXCHG(비교 & 교환)은, 주어진 메모리 로케이션의 컨텐츠를 주어진 값과 원자적으로 비교하도록 프로세싱 코어에 명령하고, 2개의 값들이 동일한 경우에만 이 메모리 로케이션의 컨텐츠를 주어진 새로운 값으로 변경하는 범용 원자적 명령이다.
ISA는 원자 XADD, BTS 등과 같은 제한된 수의 전용 원자적 명령(specific-purpose atomic instruction)을 흔히 제공한다. 전용 명령이 프로그래머가 원하는 특정 기능성을 위해 존재하지 않는 경우에, 프로그래머는 CMPXCHG와 같은 범용 명령을 사용하여 이러한 논리를 구성하도록 시도할 수 있다. 그러나, 이러한 구성은 복잡하고 실행이 어려우며, 실행을 느리게 한다.
멀티 프로세싱 코어 시스템에 있는 프로세싱 코어는 시퀀스의 명령(a sequence of instructions)을 단일 원자적 메모리 트랜잭션(single atomic memory transaction)으로서 실행하도록 구성된다. 프로세싱 코어는, 원자적 시퀀스에 있는 명령이 공유 메모리에 액세스하도록 프로세싱 코어에 명령하지 않는다는 것을 포함하는 하나 이상의 원자성 기준(atomicity criteria)을, 시퀀스가 충족시키는지를 검증한다. 시퀀스를 검증한 후에, 프로세싱 코어는 시퀀스를 단일 원자적 메모리 트랜잭션으로서 실행한다. 상기 실행은 공유 메모리 데이터를 저장하는 소스 캐시 라인(source cache line)을 록킹하는 단계, 명령의 검증된 시퀀스를 실행하는 단계, 소스 캐시 라인 내로 원자적 시퀀스의 결과를 저장하는 단계 및 소스 캐시 라인을 언록킹하는 단계를 포함할 수 있다. 일부 실시예들에서, 프로세싱 코어는 순방향 진행(forward progress)의 보증과 함께 시퀀스를 실행한다.
일부 실시예에서, 마이크로코드 검증 에이전트(microcode validation agent)는 검증을 수행하고, 보호된 메모리 영역에 검증된 시퀀스의 사본을 저장할 수 있다. 이러한 실시예에서, 검증 에이전트는 추후에 식별자를 사용하여 원자적 시퀀스를 작동시킬 수(invoke) 있는 사용자 코드로 식별자를 리턴시킬 수 있다.
도 1은 일부 실시예에 따라서, 순방향 진행의 보장과 함께 원자적 명령 시퀀스를 검증하고 실행하도록 구성된 컴퓨터 시스템을 예시한 블록도;
도 2는 일부 실시예에 따라서, 명령 시퀀스가 주어진 원자성 기준을 충족시키는, 커스텀 시퀀스(custom sequence)의 마이크로 명령을 원자적으로 실행하기 위한 방법을 예시한 흐름도;
도 3은 일부 실시예에 따라서, 명령어 실행 파이프 라인에서 런타임 검증 유닛을 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도;
도 4는 일부 실시예에 따라서, 예비 실행 검증(예를 들어 마이크로코딩된 검증 에이전트)를 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도;
도 5는 일부 실시예에 따라서, 마이크로코딩된 검증 에이전트를 사용하여 런타임 전에 원자적 시퀀스를 검증하고 실행하기 위한 더욱 상세한 방법을 예시한 흐름도;
도 6은 일부 실시예에 따라서, 하나 이상의 프로세싱 코어 및/또는 디바이스를 대신하여 원자적 시퀀스의 명령을 실행하도록 구성된 전용 프로세서를 포함하는 시스템을 예시한 블록도;
도 7은 일부 실시예에 따라서, 원자적 프로그램 실행 유닛을 사용하여 원자적 시퀀스를 실행하기 위한 방법을 예시한 흐름도;
도 8은 본 명세서에 기술된 바와 같은, 일부 실시예에 따라서, 코드 검증 에이전트를 사용하여 원자적 시퀀스의 명령을 단일의 원자적 트랜잭션으로서 실행하도록 구성된 컴퓨터 시스템을 예시한 블록도.
도 2는 일부 실시예에 따라서, 명령 시퀀스가 주어진 원자성 기준을 충족시키는, 커스텀 시퀀스(custom sequence)의 마이크로 명령을 원자적으로 실행하기 위한 방법을 예시한 흐름도;
도 3은 일부 실시예에 따라서, 명령어 실행 파이프 라인에서 런타임 검증 유닛을 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도;
도 4는 일부 실시예에 따라서, 예비 실행 검증(예를 들어 마이크로코딩된 검증 에이전트)를 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도;
도 5는 일부 실시예에 따라서, 마이크로코딩된 검증 에이전트를 사용하여 런타임 전에 원자적 시퀀스를 검증하고 실행하기 위한 더욱 상세한 방법을 예시한 흐름도;
도 6은 일부 실시예에 따라서, 하나 이상의 프로세싱 코어 및/또는 디바이스를 대신하여 원자적 시퀀스의 명령을 실행하도록 구성된 전용 프로세서를 포함하는 시스템을 예시한 블록도;
도 7은 일부 실시예에 따라서, 원자적 프로그램 실행 유닛을 사용하여 원자적 시퀀스를 실행하기 위한 방법을 예시한 흐름도;
도 8은 본 명세서에 기술된 바와 같은, 일부 실시예에 따라서, 코드 검증 에이전트를 사용하여 원자적 시퀀스의 명령을 단일의 원자적 트랜잭션으로서 실행하도록 구성된 컴퓨터 시스템을 예시한 블록도.
본 명세서는 "한 실시예" 또는 "실시예"에 대한 언급을 포함한다. 구문 " 한 실시예에서" 또는 "실시예에서"의 모습은 동일 실시예를 반드시 지칭하는 것은 아니다. 특정 특성, 구조, 또는 특징은 본 명세서에서 일치하는 임의의 적절한 방식으로 조합될 수 있다.
전문 용어. 다음의 문단은 본 명세서(첨부된 청구항을 포함함)에서 볼 수 있는 용어들의 정의 및/또는 문맥을 제공한다:
"포함하는". 이 용어는 제한을 두지 않는다. 첨부된 청구항에서 사용되는 바와 같이, 이 용어는 추가의 구조 또는 단계를 배제하지 않는다. "...하나 이상의 프로세서 유닛을 포함하는 장치"를 인용하는 청구항을 고려한다. 이러한 청구항은 추가의 컴포넌트(예를 들어, 네트워크 인터페이스 유닛, 그래픽 회로 등)를 포함하는 것으로부터 장치를 배제하지 않는다.
다양한 유닛, 회로, 또는 다른 컴포넌트들"로 구성되는"은 직무 또는 직무들을 수행"하도록 구성되는"으로서 기술되거나 또는 청구될 수 있다. 이러한 문맥에서, "~로 구성되는"은 유닛/회로/컴포넌트들이 동작 동안 이러한 직무 또는 직무들을 수행하는 구조(예를 들어, 회로)를 포함하는 것을 나타내는 것에 의해 구조를 함축하도록 사용된다. 그리하여, 유닛/회로/컴포넌트는 특정된 유닛/회로/컴포넌트가 현재 동작하지 않을(예를 들어, 있을 수 없을) 때에도 직무를 수행하도록 구성된다고 할 수 있다. 언어 "하도록 구성되는"과 함께 사용되는 "유닛/회로/컴포넌트는 하드웨어, 예를 들어 회로, 동작을 실행하도록 실행 가능한 프로그램 명령을 저장하는 메모리를 포함한다. 유닛/회로/컴포넌트가 하나 이상의 직무를 수행"하도록 구성되는"이라는 것을 다시 인용하는 것은 이 유닛/회로/컴포넌트에 대해 35 U.S.C. § 112, 제6항을 적용하지 않도록 명백히 의도된다. 부가적으로, "~하도록 구성되는"은 충돌(contention)중인 직무(들)를 수행할 수 있는 방식으로 동작하도록 소프트웨어 및/또는 펌웨어(예를 들어, FPGA 또는 범용 프로세서 실행 소프트웨어)에 의해 조작되는 일반적 구조(예를 들어, 일반적인 회로)를 포함할 수 있다. "~하도록 구성되는"은 하나 이상의 직무를 실행 또는 수행하도록 적응된 디바이스(예를 들어, 집적회로)를 제작하도록 제조 프로세스(예를 들어, 반도체 제작 설비)를 맞추는 것을 또한 포함할 수 있다.
"제1", "제2" 등. 본 명세서에서 사용되는 바와 같이, 이러한 용어들은 이러한 것들이 선행하는 명사를 위한 라벨로서 사용되며, 임의의 형태의 정리(ordering)(예를 들어, 공간적, 시간적, 논리적 등)를 나타내지 않는다. 예를 들어, 8개의 프로세싱 요소 또는 코어들을 가지는 프로세서에서, 용어 "제1" 및 제2" 프로세싱 요소들은 8개의 프로세싱 요소들 중 임의의 2개를 지칭하도록 사용될 수 있다. 즉, "제1" 및 "제2" 프로세싱 요소들은 논리적 프로세싱 요소 0과 1로 한정되지 않는다.
"~에 근거하여". 본 명세서에 사용되는 바와 같이, 이 용어는 결정에 영향을 미치는 하나 이상의 인자들을 기술하도록 사용된다. 이 용어는 결정에 영향을 미칠 수 있는 추가의 인자를 배제하지 않는다. 즉, 결정은 단독으로 이러한 인자들에 근거할 수 있거나 또는 적어도 부분적으로 이러한 인자들에 근거할 수 있다. 구문 "B에 근거하여 A를 결정한다"를 고려한다. B는 A의 결정에 영향을 미치는 인자일 수 있지만, 이러한 구문은 또한 C에 근거하는 것으로부터 A의 결정을 배제하지 않는다. 다른 예에서, A는 단독으로 B에 근거하여 결정될 수 있다.
CMPXCHG와 같은 범용 원자적 명령은 원자적으로 단일 메모리 로케이션(예를 들어, 단일 케이블 라인)에 원자적으로 액세스하기 위하여 임의적인 논리(arbitrary logic)를 구성하도록 사용될 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "원자적으로"는 그 중간 결과가 프로그램 실행의 다른 쓰레드(thread)에 의해 관찰할 수 없는 실행을 지칭한다. 그러므로, 원자적으로 실행된 시퀀스(즉, 원자적 시퀀스)에 있는 명령은 단일 원자적 동작(single atomic operation)으로서 실행된 것과 같은 모든 다른 쓰레드에게 나타난다.
범용 원자적 명령을 사용하여 원자적 논리를 구성하는 접근은 몇몇의 결점을 가진다. 첫째, 이러한 범용 명령을 사용하여 다양한 기능을 실행하는 것은 때때로 상당히 복잡한 록크-프리 알고리즘(lock-free algorithms) 또는 소프트웨어 세마포어(software semaphore)를 흔히 요구한다. 또한, CMPXCHG 동작이 충돌의 존재 시 중단(abort)될 수 있기 때문에, 이러한 동작을 이용하는 알고리즘은 순방향 진행을 보증할 수 없고, 실행의 동시 병행 쓰레드들 사이를 중재하도록 소프트웨어 충돌 관리 메커니즘을 요구한다. 이러한 것은, CMPXCHG를 이용하는 사용자 프로그램 또는 게스트 OS가 인터럽트 또는 페이지 폴트의 가능성이 없이 알고리즘을 통해 진행하게 되는 것을 보장할 수 없기 때문에 성능 손실을 이끈다. 또한, CMPXCHG 동작은 그 자체가 실행하는데 다소 불충분하고, 하나의 동작을 위한 목표 캐시 라인에 대한 적어도 2개의 액세스를 요구한다.
프로그래머들은 제한된 세트의 고정 기능의 원자적 동작에 의해 수행하도록 간단하지 않거나 및/또는 이러한 원자적 명령을 사용하여 만들어지면 성능 저하를 겪을 수 있는 단일 라인 원자적 트랜잭션을 때때로 요구한다. 예를 들어, 일부 멀티 코어 직무 관리 기술은 동일한 캐시 라인에 있을 수 있는 2개 이상의 데이터 값들에 대한 원자적 트랜잭션을 요구한다.
최근에, 하드웨어 트랜잭션 메모리 시스템(hardware-transactional memory systems, HTM)은 프로그래머가 커스텀 시퀀스의 명령을 원자적으로 실행하는 것을 허용하기 위한 수단으로서 제안되었다. 그러나, 이러한 시스템은 복잡한 하드웨어 지원을 요구하며, 중단된 트랜잭션 시도와 같은 무한반복(livelock) 상황을 여전히 겪는다. 그러므로, 이러한 시스템은 충돌의 존재 시에 성는 저하를 여전히 겪으며, 교착상태(deadlock) 및/또는 무한반복을 피하도록 충돌 관리 메커니즘을 요구한다.
본 명세서에서 사용되는 바와 같은, 용어 "교착상태"는, 실행의 주어진 쓰레드가 다른 쓰레드와의 충돌로 인하여 무한정으로 지연하는 상황을 지칭한다(예를 들어, 각각의 2개의 쓰레드가 각각의 록킹을 해제하도록 다른 것을 동시에 기다린다). 본 명세서에서 사용되는 바와 같은, 용어 "무한반복"은, 실행의 쓰레드가 동일 명령 시퀀스를 실행하도록 반복적으로 시도하고 다른 쓰레드와의 충돌로 인하여 (적어도 한번) 실패하는 상황을 지칭한다(예를 들어, HTM 시스템은 메모리 충돌로 인하여 트랜잭션 지역의 실행을 반복적으로 실행하고 중단한다). 주어진 쓰레드가 교착상태에 빠지거나 또는 무한반복되는 동안, 순방향 진행을 만들 수 없다(즉, 명령 시퀀스 이상 실행하고 움직인다).
다양한 실시예에 따라서, 컴퓨터 시스템은, 시스템이 순방향 진행을 만들도록 보장되는 단일 원자적 트랜잭션으로서 실행할 수 있는 원자적 시퀀스로서 커스텀 시퀀스의 명령을 프로그래머가 지정하는 것을 허용하는 기능을 제공하도록 구성될 수 있다. 본 명세서에서 사용되는 바와 같은, 순방향 진행의 보장은 원자적 명령 시퀀스의 실행이 위에서 정의된 바와 같은 교착상태 또는 무한반복을 겪지 않게 되는 것을 의미한다.
일부 실시예에서, 시스템은 원자적으로서 지정된 시퀀스가 특정 원자성 기준에 일치하는지를 입증하도록 구성된 검증 에이전트를 포함할 수 있다. 이러한 실시예에서, 원자성 기준을 충족시키는 것은 시스템이 순방향 진행의 보장과 함께 시퀀스를 원자적으로 실행할 수 있는 것을 보장한다. 다음에 더욱 상세하게 기술되는 다양한 실시예에서, 검증 에이전트는 프로세서, 메모리 서브시스템, 또는 시스템에 있는 다른 곳에 배치될 수 있다.
도 1은 일부 실시예에 따라서, 순방향 진행의 보장과 함께 원자적 명령 시퀀스를 검증하고 실행하도록 구성된 컴퓨터 시스템을 예시한 블록도이다.
도시된 실시예에 따라서, 시스템(190)은, 인터커넥트(160)를 통하여 다른칩 멀티 프로세서(150, CMP)와 공유 메모리(155)에 연결되는 CMP(100)를 포함한다. 일부 실시예에서, 공유 메모리(155)는, 예를 들어 L3 캐시 및 메인 메모리를 포함하는 기억 장치 계층(memory hierarchy)에 배열될 수 있다.
비록 도 1이 다수의 상호 연결된 CMP들을 구비한 실시예를 도시하였을지라도, 본 명세서에 기술된 시스템과 기술은 멀티플 프로세싱 코어들이 시스템에 어떻게 분포되는지에 관계없이 이것들을 구비한 다른 시스템에 일반적으로 적용될 수 있다. 예를 들어, 일부 실시예에서, CMP(100) 및/또는 임의의 다른 CMP(150)는 정규 싱글 코어 프로세서로 대체될 수 있다. 다른 실시예에서, CMP(100)는 멀티플 코어를 포함할 수 있으며, 시스템은 다른 CMP(예를 들어, 도면부호 (150)), 프로세서, 또는 프로세싱 코어를 포함하지 않을 수 있다.
예시된 실시예에서, CMP(100)는 온-칩 네트워크(on-chip network)(145)에 의해 연결되고 네트워크를 통한 통신을 위해 구성된 멀티플 프로세싱 코어(즉, 105, 135)를 포함한다. 온-칩 네트워크(145)는 다른 네트워크 토플로지스(network topologies, 예를 들어, 2D 또는 3D 그리드, 토러스(Torus), 선형, 링 등)에 따라 배열된 임의의 다양한 형태의 지점간 네트워크에 대응할 수 있다. 다른 실시예에서, 코어(105, 135)는 버스 및/또는 다른 형태의 인터커넥트에 의해 연결될 수 있다.
일부 실시예에서, 온-칩 인터커넥트(예를 들어, 온-칩 네트워크(145))는 데이터 캐시(140)(예를 들어 L2 캐시)와 같은 하나 이상의 공유 데이터 캐시에 CMP상의 코어(예를 들어, CMP(100) 상의 코어(105 및 135))를 연결할 수 있다. 일부 실시예에서, 코어는 코어(105)의 캐시(들)(115)와 같은 하나 이상의 개인 데이터 캐시를 또한 포함할 수 있으며, 코어는 공유 메모리(155)로부터 캐시된 데이터를 저장하도록 사용할 수 있다.
캐시된 데이터(cached data)의 일관성을 유지하기 위하여, 각 코어는 도면부호 (120)과 같은 다양한 캐시 일관성 메커니즘을 또한 포함할 수 있다. 캐시 일관성 메커니즘(120)은, 캐시 일관성 메시지(예를 들어, MESI 프로토콜 메시지)를 다른 프로세싱 코어와 교환하고/하거나 동기화 기능(예를 들어, 독점적으로 소유되는 바와 같은 캐시(115)에서 캐시 라인을 마킹, 거절, 수용 및/또는 다른 프로세싱 코어로부터 캐시 일관성 프로브에 응답하는 등)을 수행하는 기능을 포함할 수 있다.
예시된 실시예에 따라서, 코어(105)는 명령 또는 스택 포인터(stack pointer), 중간 결과, 또는 다른 데이터와 같은 데이터를 임시 저장하는데 유용한 다양한 레지스터(110)를 또한 포함할 수 있다. 레지스터(110)는 다양한 전용 및/또는 범용 레지스터를 포함할 수 있다.
예시된 실시예에서, 코어(105)는, 마이크로코드(132)와 같은, 개인 데이터를 저장하기 위한 보호된 패스트 메모리 영역을 포함할 수 있는 개인 메모리 영역(130)을 포함한다. 마이크로코드(132)는 다른 프로그램 명령(예를 들어, CMPXCHG) 및/또는 임의적인 마이크로프로그램을 실행하도록 프로세싱 코어(105)에 의해 실행 가능한 마이크로 명령을 포함할 수 있다. 일부 실시예에서, 마이크로코드(132)는 다음에 기술되는 바와 같은 특정 원자성 기준을 충족시키도록 검증 에이전트(예를 들어, 도면부호 (134))에 의해 입증된 마이크로프로그램 및/또는 원자적 마이크로프로그램을 포함할 수 있다.
도 1의 특정 실시예에서, 개인 메모리 영역(130)은 마이크로코딩된 검증 에이전트(134)를 실행하는 마이크로코드를 포함하며, 검증 에이전트는 시퀀스의 명령의 지시를 수신하고, 이것들이 주어진 원자성 기준을 충족시키는 원자적 시퀀스인지를 검증하고, 개인 메모리 영역(130)에 있는 시퀀스의 사본을 저장하고, 및/또는 시퀀스의 저장된 사본을 식별하는 핸들(handle)을 다른 프로그램 코드로 리턴시키도록 구성된다. 이러한 방법은 도 3의 설명에서 더욱 상세하게 기술된다.
다른 실시예에서, 검증 에이전트(134)는 반드시 마이크로코딩되고 메모리 영역(130)에 저장될 필요는 없다. 예를 들어, 일부 실시예에서, 검증 에이전트(134)는 명령 디코더(165)와 같은, 코어(105)의 하드웨어 유닛 내로 구축된 하드웨어 논리에 의해 실행될 수 있다. 여전히 다른 실시예에서, 검증 에이전트(134)는 다음에 기술되는 바와 같이, 메모리 서브시스템에서 전용 프로세서에 의한 것과 같이 코어(105)와 완전히 별개로 실행될 수 있다.
도 2는 일부 실시예에 따라서, 명령 시퀀스가 주어진 원자성 기준을 충족시키는, 커스텀 시퀀스의 마이크로 명령을 원자적으로 실행하기 위한 방법을 예시한 흐름도이다. 방법(200)은 순방향 진행의 보장과 함께 원자적 명령 시퀀스를 실행하는 부분으로서 도 1의 프로세싱 코어(105)와 같은 프로세싱 코어에 의해 실행될 수 있다.
도 2에 도시된 바와 같이, 방법(200)은, 프롤로그 위상(210, 트랜잭션에 사용될 임의의 데이터가 판독될 수 있는), 본 실행 위상(220, body execution phase, 명령이 실행되는), 및 에필로그 위상(230, 임의의 결과가 다시 메모리에 기록되는)의 3개의 위상을 포함한다. 프롤로그 위상 동안, 프로세싱 코어는 단계(212)에서와 같이, 주어진 소스 캐시 라인을 록킹한다. 본 명세서에서 사용되는 바와 같은, 캐시 라인을 록킹하는 프로세싱 코어는, 록킹을 유지하는 코어가 이를 해제할 때까지 다른 프로세싱 코어가 캐시 라인 컨텐츠를 판독하거나 또는 캐시 라인 컨텐츠를 변경되지 않게 하도록, 캐시 라인에 대한 배타적인 판독/기록 특권을 가진다. 이러한 특성을 보장하는데 필요한 특정 단계(들)은 실행 사이에서 변하게 되고, 채택된 특정 캐시 일관성 메커니즘 및 프로토콜과 같은 다른 시스템 상세에 의존하게 된다. 예를 들어, 일부 실시예에서, 주어진 캐시 라인을 록킹하는 코어는 캐시 일관성 메시지가 록킹된 캐시 라인에 관련할 때 다른 프로세서로부터 수신하는 프로브 또는 다른 캐시 일관성 메시지를 거부할 수 있다. 일부 실시예에서, 코어는 다양한 하드웨어 인터럽트 및/또는 소프트웨어 신호를 핸들링하는 것을 또한 지연시킬 수 있으며, 소프트웨어 신호는 원자적 시퀀스를 실행한 후에 캐시 라인을 언록킹할 때까지 코어가 수신한다. 이러한 단계들을 수행하는 것에 의해, 코어는 인터럽트 없이 캐시 라인에 의해 컨텐츠를 판독하고 및/또는 변경할 수 있다.
단계(212)에서와 같이, 캐시 라인을 록킹한 후에, 프로세서는 단계(214)에서와 같이 소스 캐시 라인으로부터 데이터를 판독할 수 있다. 단계(214)에서 소스 캐시 라인을 판독하는 것은 시퀀스의 하나 이상의 명령에 의해 연속적인 액세스를 위한 하나 이상의 목표 레지스터에 캐시 라인을 저장하는 것을 포함할 수 있다. 일부 실시예에서, 프로세서는 전체 소스 캐시 라인보다 적게 목표 레지스터에 입력할 수 있다. 예를 들어, 프로세서는 단일 목표 레지스터에 소스 캐시 라인의 단지 일부분(예를 들어, 64 바이트)만을 입력할 수 있거나, 또는 각각의 목표 레지스터에 소스 캐시 라인의 다수의(또는 모든) 부분을 각각 입력할 수 있다.
도 2에 도시된 바와 같이, 프롤로그 위상이 완료되면, 실행은, 단계(222)에서와 같이 원자적 시퀀스의 명령을 단일 원자적 트랜잭션으로서 코어가 실행하는 본 실행 위상(220)으로 진행할 수 있다. 다양한 이러한 명령이 목표 레지스터(들)로부터 데이터를 판독하고 및/또는 레지스터(들)로 데이터를 기록할 수 있다.
단계(222)에서 나타난 바와 같이, 원자적 시퀀스의 명령은 특정 원자성 기준을 충족시키고, 이는 코어가 시퀀스를 단일 원자적 트랜잭션으로서 실행하는 것을 가능하게 한다. 일부 실시예에서, 원자성 기준은 시퀀스가 실행하는데 신속하고 간단하며 실행 중인 코어에 의해 순방향 진행이 보장될 수 있는 것을 보장하도록 선택될 수 있다. 이러한 기준은 시퀀스에 있는 명령이 메모리에 액세스하거나 또는 원자성 시퀀스의 범위를 벗어난 코드의 섹션들로 점프하지 않는 조건을 포함할 수 있다. 일부 실시예에서, 원자성 기준은 시퀀스를 실행하는데 명령 카운트 제한 또는 시간 제한과 같은 전체 시퀀스 상에서의 조건들을 포함할 수 있다. 원자성 기준은 다음에 더욱 상세하게 기술된다.
원자적 시퀀스에 있는 모든 명령들이 실행되었을 때, 프로세스는 에필로그 위상(230)으로 들어간다. 에필로그 위상(230)에서, 프로세싱 코어는 록킹된 캐시 라인(232)으로 실행의 결과를 다시 기록할 수 있다. 예를 들어, 코어는 소스 캐시 라인에 목표 레지스터에 있는 데이터를 기록할 수 있다. 이러한 것이 행해지면, 실행중인 코어는 단계(234)에서와 같이 소스 캐시 라인을 해제할 수 있다.
시퀀스의 명령을 실행하기 전에, 시스템은 먼저 시퀀스가 사실상 특정 원자성 기준에 일치하는 원자적 시퀀스인 것을 결정할 수 있다. 다른 실시예에서, 이러한 결정은 다른 시간에 및/또는 시스템의 다른 컴포넌트들에서 행해질 수 있다. 예를 들어, 일부 실시예에서, 시퀀스는 명령어 실행 파이프 라인 내에 있는(예를 들어, 디코더(165)에서) 하드웨어 실행 검증 에이전트에 의한 것과 같이 실행됨으로써 검증될 수 있다. 다른 실시예에서, 시퀀스는 명령 시퀀스가 실행되기 전에 작동된 마이크로코딩된 검증 에이전트에 의한 것과 같이 실행되기 전에 정적으로 검증될 수 있다. 여전히 다른 실시예에서, 시퀀스는 다른 프로세싱 코어 대신에 원자적 명령 시퀀스를 실행하도록 구성된 전용 오프-칩 프로세서에 의해 검증 및/또는 실행될 수 있다. 비록 다른 가능성이 존재할지라도, 이러한 3개의 구성이 다음에 더욱 상술된다.
도 3은 일부 실시예에 따라서, 명령어 실행 파이프 라인에서(예를 들어, 디코더에서) 런타임 검증 유닛을 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도이다. 일부 이러한 실시예에서, 디코더(예를 들어, 도 1에서 도면부호 (165))는 디코딩 스테이지 동안 시퀀스에 있는 각 명령을 검증하도록 구성된 검증 유닛을 포함할 수 있다. 시퀀스(및/또는 시퀀스에 있는 임의의 명령)가 원자성 기준에 일치하지 못하는 것을 발견하는 것에 응답하여, 이러한 검증 에이전트는 실행을 멈추고, 예외를 발생시키고, 및/또는 그렇지 않으면 에러를 나타내고 소스 캐시 라인을 언록킹할 수 있다.
도 3은 이러한 실시예에서 검증 에이전트를 동작시킬 수 있는 하나의 방법을 예시한다. 다른 실시예에서, 도 3의 방법(300)은 디코더에 의해, 디코더의 부분으로서 실행되는 검증 유닛에 의해, 및/또는 프로세서 또는 프로세싱 코어의 다른 하드웨어 컴포넌트에 의해 실행될 수 있다.
단계(305)에서 도시된 바와 같이, 방법(300)은 원자적 실행을 위해 지정된 시퀀스의 프로그램 명령의 시작을 검출하는 시스템에 응답하여 개시된다. 예를 들어, 일부 실시예에서, 시퀀스는 시퀀스의 시작과 종료를 각각 인용하는 "START" 및 "STOP" 프로그램 명령을 사용하여 프로그램 코드에서 정해질 수 있다.
START 명령을 판독하는 것에 응답하여, 단계(305)에서와 같이, 코어는 도 2의 프롤로그에 대응하는 하나 이상의 단계를 수행할 수 있다. 이러한 단계들은 소스 캐시 라인을 판독하는 단계(212에서와 같이) 및 캐시 라인을 록킹하는 단계(214에서와 같이)를 포함할 수 있다.
일부 실시예에서, 소스 캐시 라인 및/또는 목표 레지스터는 START 명령에 의해 지시될 수 있다(예를 들어, 하나 이상의 필드 또는 파라미터에서). 예를 들어, x86-호환 가능한 아키텍처를 이용하는 실시예에서, START 명령은 START 명령의 하나의 필드(예를 들어., modrm.r/m 필드)에 있는 소스 캐시 라인의 메모리 어드레스 및 다른 필드(예를 들어, modrm.reg 필드)에 있는 목표 레지스터의 지시를 포함할 수 있다. 이러한 값들을 판독하는 것에 응답하여, 코어는 식별된 소스 캐시 라인을 록킹할 수 있으며(단계(310)에서와 같이), 시퀀스에 있는 하나 이상의 명령에 의해 그 지시된 소스 캐시 라인으로부터 연속적인 액세스를 위하여 식별된 목표 레지스터 내로 데이터를 로딩할 수 있다(단계(315)에서와 같이).
일부 실시예에서, START 명령을 실행하는 단계는 소스 캐시 라인에서 데이터의 메모리 어드레스(단계(320)에서와 같이) 및/또는 원자적 시퀀스에 있는 명령의 수(단계(325)에서와 같이)를 기록하는 단계를 추가로 포함할 수 있다. 일부 실시예에서, 원자적 지역(atomic region)의 명령의 수는 xop.vvvv 필드와 같은 START 명령의 다른 필드에 있는 저장된 값에 의해 지시될 수 있다.
단계(305-325, 실행의 프롤로그 위상에 대응할 수 있는)를 완료한 후에, 코어는 단계(330-345)에 의해 예시된 바와 같이 트랜잭션의 본 실행(body)을 실행할 수 있다. 이러한 위상 동안, 코드는 코드 시퀀스를 통해 진행하고, 시퀀스에 있는 다음의 명령이 원자성 기준을 충족시키면(단계(330)로부터 빠져나가는 긍정으로 지시된 바와 같이), 코드는 그 명령을 실행한다(단계(340)에서와 같이). 다음의 명령이 원자성 기준을 충족시키지 못하면(단계(330)로부터 빠져나가는 부정으로 지시된 바와 같이), 시스템은 단계(335)에서와 같이 예외를 발생시키고, 시퀀스의 실행을 멈추며, 에러 핸들링 코드로 점프하며, 및/또는 그렇지 않으면 시퀀스가 원자성 기준을 충족시키지 못한다는 것을 지시한다.
일부 실시예에서, 원자성 기준은 시퀀스가 실행하는데 신속하고 간단하며 실행중인 코어에 의해 순방향 진행이 보장될 수 있는 것을 보장하도록 선택될 수 있다. 예를 들어, 일부 실시예에서, 기준은 시퀀스에 있는 명령이 메모리에 액세스할 수 없다는 기준을 포함할 수 있다. 일부 실시예에서, 기준은 또한 시퀀스에 있는 명령이 범용 레지스터(general-purpose register, GPR)가 아닌 레지스터에 액세스(판독 및/또는 기록)할 수 없다는 기준을 또한 포함할 수 있다. 이러한 기준을 충족시키는 명령 그 자체가 실행의 또 다른 쓰레드와 데이터 충돌을 유발할 수 없기 때문에, 단지 이러한 동작으로만 구성된 명령 시퀀스는 교착상태 또는 무한반복을 겪지 않을 수 있으며, 그러므로 실행될 때 순방향 진행을 만들도록 보장될 수 있다. 다양한 실시예에서, 원자성 기준은 다양한 다른 또는 추가의 조건(예를 들어, 점프 명령이 없고, 명령의 즉각적인 형태가 없는 등)을 포함할 수 있다. 원자적 시퀀스를 포함할 수 있는 명령의 형태에 관한 기준에 부가하여, 집행된 원자성 기준은 시퀀스에 있는 명령의 수에서의 제한을 포함할 수 있다.
비록 원자성 기준을 충족시키는 명령이 공유 메모리에 직접 액세스할 수 없을지라도, 이것들은 목표 레지스터를 통해 소스 캐시 라인에 있는 데이터에 간접적으로 액세스할 수 있다. 그러므로, 소스 캐시 라인에 있는 데이터에 정상적으로 액세스하게 되는 명령은 대신 목표 레지스터로부터 그 데이터를 판독하고 및/또는 목표 레지스터에 다른 데이터를 기록할 수 있다. 단계(345)로부터 빠져나가는 부정으로 지시된 바와 같이, 코어가 원자적 시퀀스를 실행하는 것을 끝내면(예를 들어, STOP 명령을 마주치는), 코어는 단계(350)에서와 같이 목표 레지스터에 저장된 계산 결과를 소스 캐시 라인에 다시 기록하고, 단계(355)에서와 같이, 소스 캐시 라인을 해제할 수 있다. 그러므로, 코어는 단일 원자적 동작으로서 원자적 시퀀스에 있는 명령을 효과적으로 실행할 수 있다.
일부 실시예에서, 명령이 원자성 기준을 충족시키는지를 결정하는(단계(330)) 디코더는 이것이 원자성 기준을 충족시키도록 공지된 명령을 지시하는지를 결정하도록 명령의 옵코드(opcode)를 검사하는 단계를 포함할 수 있다. 예를 들어, 일부 실시예에서, x86 시스템에 있는 디코더는 명령의 옵코드가 ADD, ADC, AND, XOR, OR, SBB, SUB, CMP, CMOVcc, BT, BTS, BTC, BTR, TEST, 및 XCHG의 세트로부터 선택된 임의의 명령을 지시하면 명령이 원자성 기준을 충족시킨다는 것을 결정할 수 있다. 이 예에서, 열거된 명령들은, 메모리 또는 비범용 레지스터에 어느 것도 액세스하지 않고, 원자적 시퀀스의 범위를 벗어난 지점으로 프로그램 제어를 전달하도록 어느 것도 프로세서에 명령할 수 없다는(즉, 점프 명령이 없는) 원자성 기준을 충족시킨다.
비록 단계(330-345)들이 명령의 선형 실행(linear execution)을 지시할지라도, 당업자는, 다수의 명령이 단계(340)에서 동시에 실행될 수 있는 한편 연속적인 명령이 단계(330)에서 디코딩되고 및/또는 원자성 기준에 비교되도록, 다양한 코어들이 명령 파이프 라인을 이용할 수 있다는 것을 인식할 것이다. 부가적으로, 조건절(conditional)의 존재는 시퀀스에 있는 다른 명령으로 하여금 여러번 실행되거나 또는 전혀 실행되지 않도록 할 수 있다.
일부 실시예에서, 단계(355)에서 소스 캐시 라인을 해제하는 단계는, 캐시 라인에 관한 연속적인 프로브를 수용하고, 인터럽트 및/또는 다른 실행 지정 단계들을 다시 가능하게 하는 것에 의한 것과 같이 단계(310)에서 수행되는 록킹 절차를 무효로 하는(undoing) 단계를 포함할 수 있다.
일부 실시예에서, 검증 에이전트는 런타임 대신에 실행 전에 명령 시퀀스를 검증하도록 구성될 수 있다(도 3에서와 같이). 예를 들어, 이러한 검증 에이전트는 마이크로코드(예를 들어, 마이크로코드(132))에서 실행될 수 있다.
도 4는 일부 실시예에 따라서, 예비 실행 검증(예를 들어 마이크로코딩된 검증 에이전트)를 사용하여 원자적 시퀀스의 명령을 검증하고 실행하는 프로세싱 코어의 방법을 예시한 흐름도이다. 이러한 실시예에서, 개인 메모리 영역(도 1의 도면부호 (130)과 같은)은 시퀀스의 명령이 하나 이상의 원자성 기준에 일치하는 원자적 시퀀스인지를 검증하도록 구성된 검증 에이전트(예를 들어, 도면부호 (134))를 실행하는 프로그램 명령을 저장할 수 있다.
예시된 실시예에 따라서, 방법(400)은, 사용자 코드가 원자적 시퀀스로서 검증 에이전트에 시퀀스의 프로그램 명령을 레지스팅할(register) 때 단계(405)에서 시작한다. 일부 실시예에서, 사용자 코드는 전용 명령(예를 들어, ATOMICDEF)를 사용하여 시퀀스를 레지스팅할 수 있다. 이러한 명령은 시퀀스의 명령을 지시하는 파라미터 및/또는 필드를 포함할 수 있다.
단계(405)에서 시퀀스의 명령을 레지스팅하는 시도에 응답하여, 마이크로코드 검증 에이전트는 시퀀스의 명령이 단계(410)에서와 같이, 원자적 시퀀스인 것을 검증하도록 시도한다. 단계(410)에서 지시된 바와 같이, 원자적으로서 시퀀스를 검증하는 단계는 시퀀스에 있는 각 명령을 검사하는 단계와, 이것이 하나 이상의 원자성 기준을 충족시키는 것으로 결정하는 단계를 포함할 수 있다.
런타임 검증 에이전트처럼, 마이크로코드 검증 에이전트는 시퀀스에 있는 각 명령이 검증 기준을 충족시킨다는 것을 체크할 수 있다. 이러한 기준은 런타임 검증 에이전트에 의해 집행된 것들을 포함할 수 있다(예를 들어, 시퀀스에 있는 명령은 메모리 또는 GPR과 다른 레지스터에 액세스할 수 없다). 부가하여, 마이크로코드 검증 에이전트는 각 명령이 디코딩하는데 신속하고 용이한 것을 보장할 수 있다(예를 들어, 각 명령은 4-바이트와 같은 제한된 길이의 것이며, 중간 형태의 명령을 포함하지 않는다). 하드웨어 기반 런타임 검증 에이전트처럼, 마이크로코드 검증 에이전트는, 원자성 기준을 충족시키는 주어진 세트의 수용 가능한 명령 중 하나를 지시하도록 공지된 옵코드를 명령이 포함하는 것을 검출하는 것에 응답하여 명령이 원자성 기준을 충족시킨다는 것을 결정할 수 있다.
시퀀스가 원자적 시퀀스이면(즉, 원자성 기준을 충족시키면), 검증 에이전트는 단계(415)에서와 같이, 개인의 보호된 메모리 영역에 원자적 시퀀스를 저장할 수 있다. 일부 실시예에서, 코어는 원자적 시퀀스가 저장될 수 있는 개인 메모리 영역(도면 부호 (130)과 같은)을 포함할 수 있다. 개인 메모리 영역(130)은 마이크로코드 검증 에이전트가 다른 프로세서에 의해 중복 기록될 가능성 없이 명령 시퀀스를 저장할 수 있는 다양한 보호된 영역(예를 들어, c6 세이브 영역 또는 c6 세이브 영역의 서브세트)을 포함할 수 있다. 용어 "보호된 메모리 영역"은 마이크로코드에 대해 액세스 가능하지만 소프트웨어 또는 다른 프로세스에 대해서는 그렇지 않은 프로세서의 이러한 메모리 영역들을 지칭할 수 있다.
단계(420)에서, 검증 에이전트는 단계(420)에서와 같이, 작동하는 사용자 코드로 핸들을 리턴시킨다. 핸들은 저장된 원자적 시퀀스를 위한 고유 식별자를 포함할 수 있다. 사용자 코드가 원자적 시퀀스를 실행하도록 필요할 때, 이는 단계(425)에서와 같이, 이러한 핸들을 사용하여 저장된 원자적 시퀀스를 작동시킬 수 있다. 예를 들어, 시스템은 다음에 기술되는 바와 같이, 원자적 시퀀스를 작동시키기 위한 특별 명령을 인식할 수 있다.
식별 핸들을 사용하여 저장된 시퀀스를 작동시키는 사용자 코드에 응답하여(단계 425)에서와 같이), 프로세싱 코어는 단계(430)에서와 같이, 예비 검증된 원자적 시퀀스를 원자적으로 실행할 수 있다. 일부 실시예에서, 단계(430)에서 원자적 시퀀스를 실행하는 단계는 목표 레지스터에 소스 캐시 라인을 입력하는 단계, 원자적 시퀀스를 실행하는 단계, 목표 레지스터에서의 결과를 소스 캐시 라인에 다시 기록하는 단계, 및 소스 캐시 라인을 언록킹하는 단계를 포함할 수 있다. 시퀀스가 이미 검증되었기 때문에, 단계(430)에서 원자적 시퀀스를 실행하는 단계는 시퀀스를 검증하는 단계를 포함하지 않을 수 있다.
도 5는 일부 실시예에 따라서, 마이크로코딩된 검증 에이전트를 사용하여 런타임 전에 원자적 시퀀스를 검증하고 실행하기 위한 더욱 상세한 방법을 예시한 흐름도이다. 도 5에 도시된 방법(500)은 x86 아키텍처를 위한 도 4의 방법(400)의 특정 실행에 대응할 수 있다. 그러나, 다른 실시예에서, 실행은 다소 변할 수 있고, 특정 명령 명칭, 데이터를 통신하도록 사용된 명령 필드, 사용된 특정 레지스터 등을 포함한다. 본 발명은 이러한 실시예를 모두 포용하도록 의도된다.
예시된 실시예에 따라서, 마이크로코드 검증 에이전트에 시퀀스의 명령을 레지스팅하도록, 사용자 코드는 먼저 단계(505)에서와 같이 예를 들어 ATOMICDEF 명령을 실행한다. 예시된 실시예에서, ATOMICDEF 명령은, 시퀀스에 있는 제1명령의 상대적 명령 포인터 어드레스가 저장되는 modrm.r/m 필드를 포함한다. 부가하여, 이 실시예에서 ATOMICDEF 명령은 시퀀스에 있는 명령의 카운트(즉, 명령의 수)를 저장하는 xop.vvvv 필드를 포함한다.
ATOMICDEF 명령을 실행하는 단계(또는 이에 응답하여)의 부분으로서, 마이크로코드 검증 에이전트는 ATOMICDEF에 의해 식별된 명령 시퀀스(예를 들어, modrm.r/m 필드에 있는)가 원자성 기준을 충족시키는지를 검증하도록 시도한다. 상기된 바와 같이, 이러한 검증은 시퀀스에 있는 각각의 명령이, 원자성 기준을 충족시키는 사전 공지된 수용 가능한 세트의 명령 중 하나라는 것을 결정하는 것을 포함할 수 있다. 일부 실시예에서, 이러한 원자성 기준은, (a) 시퀀스에 있는 명령이 메모리에 액세스할 수 없으며, (b) 시퀀스에 있는 명령이 GPR이 아닌 레지스터에 액세스할 수 없으며, (c) 각 명령은 특정의 제한된 길이 형태를 사용하여 지정되고, (d) 시퀀스에 있는 명령이 중간 형태를 사용하지 않는다는(중간 명령 형태는 레지스터 식별자로서보다는 번호로서 지정된 파라미터를 포함한다) 필요조건, 및/또는 순방향 진행의 보장과 함께 코어가 원자적 시퀀스를 단일 원자적 트랜잭션으로서 실행하는 것을 가능하게 하는 다양한 다른 필요조건을 포함할 수 있다.
시퀀스에 있는 하나 이상의 명령이 원자성 기준을 충족시키지 못하면, 검증은 실패한다(단계(515)로부터 빠져나가는 부정으로 지시된 바와 같이). 일부 실시예에서, 마이크로코드 검증 에이전트는 시퀀스의 저장된 버젼에 대한 핸들을 리턴시키는 대신에, 단계(520)에서와 같이, 사용자 코드로 실패의 지시를 리턴시키는 것에 의해 원자성 기준을 충족시키도록 시퀀스의 이러한 실패를 표시할 수 있다. 예를 들어, 검증이 실패하면, 검증 에이전트는 저장된 원자적 시퀀스로 핸들를 리턴시키는 대신에 작동중인 사용자 코드에 대한 값(0)을 리턴시킬 수 있다.
검증이 단계(515)로부터 긍정으로 지시된 바와 같이 성공이면, ATOMICDEF 명령에 의해 지시된 시퀀스에는 원자성 기준을 충족시키는 원자적 시퀀스가 있다. 이러한 경우에, 마이크로코드 에이전트는 단계(525)에서 c6 세이브 영역과 같은 보호된 메모리 영역에 대한, 또는 ATOMICDEF 명령이 실행된 후에, 교착상태의 가능성을 생성하는 명령을 소프트웨어가 재기록하지 않는 것을 보장하는 다른 실시 특정 영역에 대한 명령 시퀀스를 복사할 수 있다.
일부 실시예에서, 에이전트는 원자적 시퀀스의 명령을 위하여 프롤로그 위상을 수행하도록 실행 가능한 하나 이상의 명령과 함께 세이브된 버젼의 명령 시퀀스를 시작할 수 있다(preface). 예를 들어, 단계(530)에서, 에이전트는 START 명령과 함께 세이브된 명령 시퀀스를 시작한다. 상기된 바와 같이, START 명령은 시퀀스의 주어진 원자적 실행을 위하여 소스 캐시 라인 및 목표 레지스터를 지시하는데 유용한 각각의 필드를 포함할 수 있다. 이러한 실시예에서, START 명령은, 소스 캐시 라인을 록킹하고 이로부터 목표 레지스터로 데이터를 로딩하도록 실행 가능할 수 있다.
단계(535)에서, 마이크로코드 검증 에이전트는 저장된 원자적 시퀀스를 독자적으로 식별하는 핸들을 (작동중인 사용자 코드로) 리턴시킨다. 사용자 코드는 그런 다음 예비 검증된 원자적 시퀀스를 작동시키도록 고유 핸들을 사용하며, 이에 의해 이를 원자적으로 실행할 수 있다. 예를 들어, 단계(540)에서, 사용자 코드는 ATOMICSTART 명령을 실행하는 것에 의해 저장된 원자적 시퀀스를 작동시킨다. ATOMICSTART 명령은 고유 핸들을 지정하는 파라미터 및/또는 필드와 시퀀스를 위한 메모리 로케이션/입력(예를 들어, 소스 캐시 라인 및 목표 레지스터)을 포함한다.
단계(540)의 작동(invocation)에 응답하여, 프로세싱 코어는 단계(545)에서와 같이 저장된 원자적 시퀀스를 원자적으로 실행한다. 단계(545)에서 시퀀스를 원자적으로 실행하는 단계는 도 2에서 방법(200)의 위상들과 같은 프롤로그, 본 실행, 에필로그 위상을 실행하는 단계를 포함할 수 있다.
일부 실시예에서, 상기된 기본 START 기능성은 원자적 시퀀스가 멀티플 캐시 라인을 운용하는 것을 허용하도록 확장될 수 있다. 예를 들어, START2 명령은 원자적 시퀀스의 프롤로그 위상이 제2소스 캐시 라인을 록킹하고 로딩하는 것을 허용하도록 정의될 수 있다. 그러므로, 원자적 명령 시퀀스는 멀티플 캐시 라인으로부터 데이터를 운용할 수 있다.
일부 실시예에서, 멀티플 캐시 라인에 액세스하는(예를 들어, START 및 START2를 사용하여) 원자적 시퀀스의 프롤로그는 교착상태 조건(deadlock condition)들을 피하는 방식으로 실행될 수 있다. 예를 들어, 일부 실시예에서, START2는 선행하는 START 명령에 의해 록킹된 것을 즉시 따르는 캐시 라인만을 판독하고 록킹하도록 실행 가능할 수 있다. 이렇게 하는 것에 의해, 시스템은, 2개의 쓰레드가 반대 순서인 동일한 2개의 캐시 라인을 록킹하도록 시도하며 각각이 제1캐시 라인를 록킹하는 것에 이어서, 다른 캐시 라인을 해제하도록 다른 쓰레드를 무한정으로 기다리는 교착상태 상황을 피한다.
일부 실시예에서, START2는 선행하는 START 명령에 의해 지정되는 소스 캐시 라인을 즉시 따르는 것일 필요가 없는 임의적인 소스 캐시 라인을 지정하도록 사용될 수 있다. 그러나, 교착상태를 피하도록, 시스템은 록킹에서의 정리를 집행할 수 있다. 예를 들어, 마이크로코드는, START 및 START2를 실행하는 코어가 이러한 소스 캐시 라인들의 각각의 물리적 메모리 어드레스에 의해 결정된 순서로(예를 들어, 상승하는 또는 하강하는) 각각의 소스 캐시 라인을 록킹하는 것을 보장하도록 사용될 수 있다. 모든 쓰레드에 걸쳐서 이러한 정리를 부과하는 것에 의해, 시스템은 멀티플 캐시 라인을 록킹하는 것과 관련된 교착상태 상황을 피할 수 있다.
일부 원자적 시퀀스는 점프 명령을 실행할 것을 요구할 수 있다. 그러나, 점프 명령은 이것이 프로그램 흐름이 원자적 시퀀스의 범위 밖으로 점프하도록 유발하면 문제가 있을 수 있다. 이러한 것은, 런타임 검증 에이전트가 임의의 명령이 실행되기 전에 원자성 기준을 충족시키지 않는 임의의 명령을 검출하기 때문에 런타임-검증 시도(예를 들어, 디코더에서)에 의해 실시예에 반드시 악영향을 유발하는 것이 아닐 수 있다. 그러나, 예비-런타임 검증 이에전트(예를 들어, 마이크로코딩된 검증 에이전트)는 사전에 원자적 시퀀스를 체크하기 때문에, 런타임에서 시퀀스의 범위를 벗어나 점프하는 것은 원자적 기준을 충족시키지 못하는 명령이 실행되는 것을 허용할 수 있다.
일부 실시예에서, 예비 검증된 원자적 명령 시퀀스의 범위를 벗어나 점프하는 것을 피하도록, 원자성 기준은 점프 명령이 허용되지 않는 조항(stipulation)을 포함할 수 있다. 다른 실시예에서, 기준은 점프 명령을 허용할 수 있지만, 이것들이 실행이 원자적 시퀀스 이상 점프하도록 유발하지 못하는 것을 보장하도록 체크한다.
본 명세서에 기술된 바와 같은, 마이크로코딩된 검증 에이전트는 다른 시스템에서 다양한 실시-특정 원자성 기준을 또한 집행할 수 있다. 예를 들어, 일부 실시예에서, 마이크로코딩된 검증 에이전트는 명령 포인터 관련 어드레스 모드(instruction pointer relative addressing mode)를 이용하는 명령을 허락하지 않을 수 있다. 세이브된 원자적 시퀀스를 작동시키는 것이 명령 포인터를 변경할 수 있기 때문에, IP-관련 파라미터를 포함하는 명령은 예기치않은 프로그램 거동을 유발할 수 있다.
일부 실시예에서, 원자적 시퀀스 검증 및/또는 실행은 상기 코어와 다른 실체(entity)에 의해 수행될 수 있다. 예를 들어, 일부 실시예에서, 시스템은 멀티플 프로세싱 코어에 의해 및/또는 다른 시스템 디바이스에 의해 사용하기 위해 구성된, 별개의 오프-칩 원자적 프로그램 실행 유닛을 포함할 수 있다. 오프-칩 유닛은 프로세싱 코어로부터 및/또는 다른 시스템 디바이스로부터 원자적 시퀀스의 지시를 수신하도록, 응답하여 원자적 시퀀스를 단일 원자적 메모리 트랜잭션으로서 실행하도록 구성될 수 있다. 이러한 실시예에서, 원자적 실행 유닛은 지시된 시퀀스의 명령이 한 세트의 원자성 기준을 명시적으로 또는 함축적으로 충족시키는지를 검증할 수 있다. 예를 들어, 원자적 실행 유닛은 상기 유닛이 상기 세트의 원자성 기준을 충족시키는 이러한 시퀀스들만을 해석할 수 있으면 시퀀스를 함축적으로 검증할 수 있다. 이러한 실시예는 다음에 더욱 상세하게 기술된다.
도 6은 일부 실시예에 따라서, 하나 이상의 프로세싱 코어 및/또는 디바이스를 대신하여 원자적 시퀀스의 명령을 실행하도록 구성된 전용 프로세서를 포함하는 시스템을 예시한 블록도이다. 예시된 실시예에서, 시스템(600)은 프로세싱 코어(610 및 630)를 포함하는 칩 멀티프로세서(605)를 포함한다. 프로세싱 코어들은 온-칩 네트워크(640)에 의해 서로 및 공유된 캐시(635)에 연결된다. 각 코어 자체는 하나 이상의 개인 캐시(예를 들어, 도면부호 (615))와 레지스터(예를 들어, 도면부호 (620))를 포함한다. 도 1과 관련하여 상기된 바와 같이, 다양한 실시예에서, 하나 이상의 별개의 칩을 포함하는, 시스템(600)에 있는 프로세싱 코어들은 상이한 배열로 분포될 수 있다. 예를 들어, 시스템(600)은 도면부호 (650)과 같은 하나 이상의 다른 CMP 및/또는 프로세서들을 포함할 수 있다.
예시된 실시예에 따라서, 인터커넥트(645)는 다른 프로세서/CMP(650) 및/또는 공유 메모리 서브시스템(655)에 CMP(605)를 연결한다. 공유 메모리 서브시스템(655)은 공유 데이터(즉, 시스템에 있는 멀티플 프로세싱 코어에 의해 공유된 데이터)를 저장 및/또는 이에 대한 액세스를 제공하는 설비를 포함할 수 있다. 예를 들어, 예시된 실시예에서, 공유 메모리 서브시스템(655)은 데이터를 저장하기 위한 하나 이상의 공유 캐시(665) 및 이 공유 데이터에 대해 시스템의 프로세싱 코어에 의한 액세스를 용이하게 하기 위한 메모리 컨트롤러(660)를 포함한다.
도 6의 예시된 실시예에서, 시스템(600)은, 원자적 프로그램을 실행하기 위한 전용 프로세서로서 실행될 수 있는 원자적 프로그램 실행 유닛(670)을 포함한다. 다양한 실시예에서, 원자적 프로그램 실행 유닛(670)은 공유 메모리 서브시스템(655)의 부분으로서 실행될 수 있고 및/또는 메모리 컨트롤러(예를 들어, 도면부호 (660)), 공유된 캐시(예를들어, 도면부호 (665)) 및/또는 다른 컴포넌트들에 대한 신속한 액세스 및/또는 공유 메모리 서브시스템에서의 기능성을 촉진하도록 시스템의 다른 부분에 배치될 수 있다.
일부 실시예에서, 프로세싱 코어(예를 들어, 도면부호 (610)) 또는 주변 디바이스(예를 들어, 도면부호 (680))는, 원자적 프로그램을 인코딩하고 실행을 위해 원자적 실행 유닛(예를 들어, 도면부호 (670))으로 원자적 프로그램(또는 그 지시)을 보내도록 전용 명령 세트(special-purpose instruction set, ISA)를 이용할 수 있다. 일부 실시예에서, ISA의 표현성(expressiveness)은, ISA를 사용하여 인코딩된 임의의 검증 프로그램이 반드시 상기 세트의 원자성 기준을 충족시키도록 제한될 수 있다. 원자적 프로그램 또는 그 지시를 수신하는 것에 응답하여, 원자적 실행 유닛은 원자적 프로그램을 단일 원자적 메모리 트랜잭션으로서 해석하고 실행할 수 있다.
다양한 실시예에서, 원자적 프로그램 실행 유닛은 하나 이상의 프로세싱 코어에 의한 또는 디바이스(680)와 같은 주변 디바이스에 의한 사용을 위해 구성될 수 있다. 다양한 실시예들에서, 디바이스(680)는 그래픽 어댑터, 오디오 어댑터, 디스크 또는 광학 드라이브와 같은 I/O 디바이스, 및/또는 다른 디바이스를 포함할 수 있다.
도 7은 일부 실시예에 따라서, 원자적 프로그램 실행 유닛(도면 부호 (670)과 같은)을 사용하여 원자적 시퀀스를 실행하기 위한 방법을 예시한 흐름도이다. 예시된 실시예에서, 방법(700)은 단계(705)에서와 같이, 전용 원자적 프로그래밍 언어를 사용하여 원자적 시퀀스의 명령을 지정하는 프로세싱 코어에 의해 시작한다. 프로세싱 코어는 프로세싱 코어의 단일 캐시 라인(즉, 소스 캐시 라인)에 있는 원자적 프로그램으로서 원자적 시퀀스의 명령을 지정할 수 있다.
일부 실시예에서, 전용 원자적 프로그래밍 언어는 원자적 실행 유닛이 순방향 진행의 보장과 함께 시퀀스를 실행하는 것을 허용하는 다양한 원자성 기준을 함축적으로 집행하도록 디자인될 수 있다. 예를 들어, 일부 실시예에서, 이러한 기준은, 원자적 시퀀스에 있는 명령이 공유 메모리에 액세스하도록 및/또는 원자적 시퀀스의 범위를 벗어난 명령으로 점프하도록 원자적 실행 유닛에 명령하지 않는 기준을 포함할 수 있다. 이러한 명령을 배제하도록 원자적 프로그래밍 언어의 표현성을 제한하는 것에 의해, 시스템은 단계(700)에서 구성된 임의의 유효 프로그램이 이러한 원자성 기준을 충족시키는 것을 보장할 수 있다. 다른 원자성 기준은 (예를 들어, 범용 레지스터 등과 다른 레지스터에 대한 액세스가 없이) 유사하게 집행될 수 있다.
일부 실시예에서, 언어는 캐시 라인에서 제자리에서 실행될 수 있는 스택 기반 언어(stack-based language)일 수 있다. 제자리 실행(in place execution)은 단지 프로그램이 지정되는 메모리 공간을 사용하여 프로그램을 실행하는 기술을 지칭한다. 예를 들어, 단일 캐시 라인에 저장된 스택 기반 프로그램은, 스택으로부터 명령 및/또는 오퍼랜드(operands)를 팝핑하고(popping), 스택이 결코 단일 캐시 라인을 아웃그로우(outgrow)하지 않도록 이러한 명령 및 오퍼랜드의 결과를 스택으로 다시 푸시하는(pushing) 것에 의해 제자리에서 실행될 수 있다. 다음의 명령은, 원자적 실행 유닛이 원자적 프로그램을 단일 원자적 메모리 트랜잭션으로서 실행할 수 있도록 하나 이상의 원자성 기준을 충족시키는 원자적 프로그램을 인코딩하기 위한 예시적 스택 기반 언어를 정의한다:
LOAD ADDR0: 어드레스 0으로부터 하나의 워드(예를 들어, 8-바이트)를 로딩하고 그 결과를 푸시
LOAD ADDR1: 어드레스 1로부터 하나의 워드를 로딩하고 그 결과를 푸시
STORE ADDR0: 스택의 상부로 팝(pop)하고 어드레스 0으로 워드를 저장(저장품은 END까지 미결이다)
STORE ADDR1: 스택의 상부로 팝하고 어드레스 1로 워드를 저장(저장품은 END까지 미결이다)
ADD, SUB: 팝2, 상기 값을 추가/공제하고 그 결과를 푸시
DUP: 스택의 상부로 사본을 푸시
DUP2: 상부 2 스택 요소들의 사본을 푸시
SWAP: 상부 및 제2스택 요소들 바꿈
END: 프로그램 종료하고 저장물 기록
BTn: 팝핑된 값의 비트 N의 값을 팝, 푸시
PUSHimm: 중간 # N 푸시
CMPSIGNED: 팝핑된 서명값의 차이의 서명에 따라 -1, 0, 1을 팝 2 및 푸시
CMPUNSIGNED: 팝핑된 미서명값의 차이의 서명에 따라 -1, 0, 1을 팝 2 및 푸시
DUP2CMP: 스택 상으로 다시 팝핑된 값을 팝 2 및 푸시하고, 팝핑된 값의 차이의 서명에 따라 -1, 0, 1 푸시
JE, JG, JL: 스택을 팝하고 N 명령 앞으로 조건부로 점프(새로운 명령 어드레스가 캐시 라인의 범위 밖이면, 트랜잭션 중단)
J: N 명령 앞으로 무조건적으로 점프(새로운 명령 어드레스가 캐시 라인의 범위 밖이면, 트랜잭션 중단)
CMOVE, CMOVG, CMOVL: 스택으로부터 아이템 팝 3. 스택의 상부는 조건 코드로서 사용되고: 조건이 참이면, 스택 상으로 2번째 아이템 푸시, 그 밖에, 3번째 아이템 푸시
ENDRETURN: END 같지만, 스택의 상부에 있는 값을 리턴시킴
cc: 조건절 "참(true)이면"
E: 스택의 상부(TOS)가 0이면 참
L: 스택의 저부가 1이면 참
G: 스택의 상부 및 저부가 0이면 참
상기의 예시적인 명령 세트는, 프로그램이 인코딩되는 캐시 라인의 범위 밖의 공유 메모리에 액세스하는 명령을 포함하지 않는다. 또한, 명령 세트는 실행이 프로그램의 범위 밖의 위치로 전달되도록 유발할 수 있는 점프 명령을 포함하지 않는다. 그러므로, 예시적인 명령 세트를 사용하여 인코딩된 임의의 유효한 프로그램은 공유 메모리에 대한 액세스를 금지하는 원자성 기준을 적어도 충족시키고, 원자적 시퀀스의 범위 밖의 위치로 점프한다.
상기의 스택 기반 언어는 원자적 프로그램을 설명하기 위한 가능한 명령 세트의 단지 하나의 예이다. 다양한 변형이 가능하고 본 발명의 이점을 감안하면 당업자에게 자명하게 될 수 있다. 예를 들어, 일부 실시예에서, 명령 세트는 적층기반 언어 대신에 레지스터 대 레지스터 언어(register-to-register language)를 실행할 수 있다. 원자성 및 순방향 진행을 보장하는 상기 세트의 원자성 기준을 충족시키는 원자적 시퀀스를 인코딩하기 위한 다른 언어 및 시도가 가능하다.
코어가 단계(705)에서와 같이 원자적 프로그램을 구성하면, 코어는 단계(710)에서와 같이 프로그램을 실행하도록 원자적 실행 에이전트에 리퀘스트를 보낼 수 있다. 일부 실시예에서, 코어는 실행 유닛으로 인코딩된 원자적 프로그램을 보낼 수 있으며, 실행 유닛은 그런 다음 로컬 캐시의 라인에 프로그램을 저장할 수 있다. 다른 실시예에서, 코어는 원자적 프로그램의 소재를 찾아내도록 실행 유닛에 의해 이용 가능한 어드레스 또는 다른 명령을 보낼 수 있다.
일부 실시예에서, 프로세싱 코어는 (예를 들어, MMIO에서와 같이) 메모리 맵핑(memory mapping) 또는 (예를 들어, PMIO에서와 같이) 포트 맵핑(port mapping)을 통해 원자적 실행 유닛에 원자적 프로그램을 통신할 수 있다. 예를 들어, 메모리 맵핑을 사용하여, 프로세싱 코어는 메모리와 원자적 실행 유닛 모두를 어드레스하도록 동일한 어드레스 버스를 사용할 수 있다. 이러한 실시예에서, 코어의 어드레스 가능한 메모리 공간의 영역은 메모리 맵핑된 원자적 유닛을 위해 임시적으로 또는 영구적으로 예약될 수 있다. 코어는 그런 다음 맴핑된 메모리 영역에서 원자적 프로그램을 구성하고, 이어서 이러한 프로그램이 실행을 위해 준비할 때를 원자적 실행 유닛에 통지한다. 이러한 지시에 응답하여, 실행 유닛은 단계(715)에서와 같이 프로그램을 단일 원자적 메모리 트랜잭션으로서 판독하고 실행할 수 있다. 일부 실시예에서, 메모리 맵핑된 실행 유닛은 할당된 어드레스 공간에 대한 통지를 위해 프로세서의 어드레스 버스를 모니터하고, 그러므로 새로운 원자적 프로그램이 명백한 통지없이 실행을 준비할 때를 검출하도록 구성될 수 있다.
예시된 실시예에 도시된 바와 같이, 원자적 프로그램을 수신한 후에, 원자적 프로그램 실행 유닛은 단계(715)에서와 같이, 프로그램을 단일 원자적 트랜잭션으로서 해석하고 실행할 수 있다. 일부 실시예에서, 스택 기반 프로그램 인코딩을 사용하는 것들과 같이, 원자적 프로그램을 실행하는 단계는 원자적 프로그램이 저장된 로컬 캐시 라인을 록킹하는 단계, 프로그램을 제자리에서 실행하는 단계, 및 캐시 라인을 언록킹하는 단계를 포함할 수 있다. 그러므로, 프로그램 실행 유닛은 단계(715)에서 인코딩된 프로그램을 원자적으로 실행할 수 있다. 이 예에서, 원자적 프로그램 실행 유닛이 단일 록킹된 캐시 라인 내에서 모든 프로그램을 실행하기 때문에, 유닛은 교착상태 상황을 피할 수 있다.
다양한 실시예에서, 프로세싱 코어와 다른 디바이스(예를 들어, 오디오/비디오 카드, 다른 주변 디바이스 등)는 방법(700)에서와 같이 원자적 프로그램 실행 유닛을 이용할 수 있다. 예를 들어, 이러한 디바이스는 (단계(705)에서와 같이) 원자적 프로그램을 구성하고, (단계(710)에서와 같이) 그 프로그램의 실행을 요청한다.
일부 실시예에서, 일부 코드(예를 들어, 운용 시스템(operating system))은 하나 이상의 원자적 프로그램을 구성하고 보호된 메모리(705)에 저장하며, 대응하는 프로그램(715)을 실행하도록 원자적 실행 유닛(710)을 작동시키도록 식별 핸들을 추후에 사용할 수 있다. 그러므로, 운용 시스템은 커널(kernel)에 의한 추후 작동을 위하여 한 세트의 하나 이상의 위탁된(trusted) 원자적 프로그램을 생성할 수 있다.
도 8은 본 명세서에 기술된 바와 같은, 일부 실시예에 따라서, 코드 검증 에이전트를 사용하여 원자적 시퀀스의 명령을 단일의 원자적 트랜잭션으로서 실행하도록 구성된 컴퓨터 시스템을 예시한 블록도이다. 일부 실시예에서, 컴퓨터 시스템(800)은 도 1의 컴퓨터 시스템(190)에 대응할 수 있다.
컴퓨터 시스템(800)은, 퍼스널 컴퓨터 시스템, 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 메인프레임 컴퓨터 시스템, 손파지 컴퓨터, 워크스테이션, 네트워크 컴퓨터, 소비자 디바이스, 애플리케이션 서버, 저장 디바이스, 스위치, 모뎀, 라우터 등과 같은 주변 디바이스, 또는 대체로 임의의 형태의 컴퓨팅 디바이스를 포함하지만 이에 한정되지 않는 임의의 다양한 형태의 디바이스에 대응할 수 있다.
컴퓨터 시스템(800)은 하나 이상의 프로세서(860)를 포함할 수 있으며, 임의의 프로세서는 다수의 물리적 및/또는 논리적 코어를 포함할 수 있다. 프로세서(860)는 커스텀 원자적 시퀀스가 검증 에이전트(870)와 같은 본 명세서에 기술된 특정 원자성 기준을 충족시키는지를 검증하는 각각의 메커니즘을 포함할 수 있다. 다른 실시예에서, 검증 에이전트(870)는 본 명세서에 기술된 바와 같은, 하드웨어 실시 런타임 검증 에이전트(예를 들어, 디코더에서) 또는 마이크로코딩된 런타임 검증 에이전트에 대응할 수 있다.
컴퓨터 시스템(800)은 하나 이상의 영구 저장 디바이스(850, 예를 들어, 광학 저장, 자기 저장, 하드 드라이브, 테이프 드라이브, 솔리드스테이트 메모리 등)를 또한 포함할 수 있으며, 이는 데이터를 영속적으로 저장할 수 있다.
일부 실시예에서, 시스템(800)은 원자적 프로그램 실행 유닛(824)와 같은 원자적 시퀀스의 명령을 실행하기 위한 전용 프로세서를 포함할 수 있다. 도 8이 아웃-오브-코어(out-of-core) 원자적 프로그램 실행 유닛(824) 및 검증 에이전트(870) 모두를 도시하였을지라도, 다른 실시예들은 이러한 컴포넌트들 중 단지 하나 또는 다른 것을 포함할 수 있다.
예시된 실시예에 따라서, 컴퓨터 시스템(800)은 하나 이상의 공유 메모리(810)(예를 들어, 하나 이상의 캐시, SRAM, DRAM, RDRAM, EDO RAM, DDR 10 RAM, SDRAM, 램버스 RAM, EEPROM 등)를 포함할 수 있으며, 이것들은 하나 이상의 프로세서(860) 상에서와 같이 멀티플 프로세싱 코어 사이에서 공유될 수 있다. 하나 이상의 프로세서(860), 저장 디바이스(들)(850), 원자적 프로그램 실행 유닛(824) 및 공유 메모리(810)는 인터커넥트(840)를 통해 결합될 수 있다. 다양한 실시예에서, 시스템은 도 8에 도시되지 않은 보다 적거나 또는 추가의 컴포넌트(예를 들어, 비디오 카드, 오디오 카드, 추가의 네트워크 인터페이스, 주변 디바이스, ATM 인터페이스, 이더넷(Ethernet) 인터페이스, 프레임 릴레이(Frame Relay) 인터페이스와 같은 네트워크 인터페이스, 모니터, 키보드, 스피커 등)를 포함할 수 있다. 부가적으로, 도 8에 도시된 다른 컴포넌트들은 추가의 컴포넌트에 추가로 조합되거나 또는 분리될 수 있다.
일부 실시예에서, 공유 메모리(810)는, 플랫폼 내이티브 바이너리(platform native binary)로, 자바(Java)(상표명) 바이트-코드와 같은 임의의 해석된 언어로, 또는 C/C++, 자바(Java)(상표명) 등과 같은 임의의 다른 언어로 또는 임의의 그 조합으로 인코딩될 수 있는 프로그램 명령(820)을 저장할 수 있다. 프로그램 명령(820)은, 본 명세서에 기술된 바와 같이 동기화 메커니즘을 요구하고 원자적 명령 시퀀스를 포함할 수 있는 하나 이상의 멀티쓰레드 애플리케이션(822)을 실행하는 프로그램 명령을 포함할 수 있다. 일부 실시예에서, 프로그램 명령(820)은 애플리케이션(822, 스케줄링, 소프트웨어 신호 핸들링 등)을 실행하기 위한 소프트웨어 지원을 제공하는 운용 시스템(824)을 실행하도록 실행 가능한 명령을 또한 포함할 수 있다.
예시된 실시예에 따라서, 공유 메모리((810)는, 각각의 프로세서(860) 및/또는 그 프로세싱 코어에 의해 액세스될 수 있는 공유 데이터(830)를 포함할 수 있다. 각각의 프로세서(860)는 본 명세서에 기술된 바와 같이 로컬 캐시에 있는 공유 데이터(830)의 다양한 컴포넌트를 캐시에 저장할 수 있으며, 캐시 일관성 프로토콜에 따라서 메시지를 교환하는 것에 의해 이러한 캐시에 데이터를 편성할 수 있다.
멀티쓰레드 애플리케이션(822) 및/또는 운용 시스템(824)을 실행하도록 사용될 수 있는 것들 같은 프로그램 명령(820)은 컴퓨터 판독 가능한 저장 매체에 저장될 수 있다. 컴퓨터 판독 가능한 저장 매체는 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태(예를 들어, 소프트웨어, 프로세싱 애플리케이션)로 정보를 저장하기 위한 임의의 메커니즘을 포함할 수 있다. 컴퓨터 판독 가능한 저장 매체는 자기 저장 매체(예를 들어, 플로피 디스켓); 광학 저장 매체(예를 들어, CD-ROM); 광자기 저장 매체; 읽기 전용 메모리(ROM); 랜덤 액세스 메모리(RAM); 소거 가능 판독성 메모리(예를 들어, EPROM 및 EEPROM); 플래시 메모리; 전기적 또는 다른 형태의 프로그램 명령을 저장하는데 적합한 매체를 포함할 수 있지만 이에 한정되지 않는다.
상기된 바와 같은 컴퓨터 판독 가능한 저장 매체는 일부 실시예에서 프로그램에 의해 판독되는 명령을 저장하도록 사용되고, 하나 이상의 프로세서(860)를 포함하는 하드웨어를 제작하도록 직접 또는 간접적으로 사용될 수 있다. 예를 들어, 명령은 베릴로그(Verilog) 또는 VHDL와 같은 고레벨 디자인 언어(high level design language: HDL)로 하드웨어 기능성의 행위 레벨(behavioral-level) 또는 레지스터 트랜스퍼 레벨(register-transfer level: RTL) 기술(description)을 기술하는 하나 이상의 데이터 구조를 기술할 수 있다. 상기 기술은 넷리스트(netlist)를 제조하도록 기술을 동기화할 수 있는 합성 툴(synthesis tool)에 의해 판독될 수 있다. 넷리스트는 프로세서(500)의 기능성을 나타내는 한 세트의 게이트(예를 들어, 합성 라이브러리에서 정의되는)를 포함할 수 있다. 넷리스트는 그런 다음 마스크에 도포되는 기하학적 형상을 기술하는 데이터 세트를 생산하도록 배치되고 루팅될 수 있다. 마스크는 그런 다음 프로세서(100, 605 및/또는 860)에 대응하는 반도체 회로 또는 회로들을 제조하도록 다양한 반도체 제조 단계에서 사용될 수 있다. 대안적으로, 데이터베이스는 필요에 따라서, 넷리스트(합성 라이브러리를 구비하거나 구비하지 않는) 또는 데이터 세트일 수 있다.
본 발명의 범위는 본 명세서에서 다뤄진 임의의 또는 모든 문제를 완화시키거나 또는 아니거나 어떻든지, 본 명세서에 기술된(명백하게 또는 함축적으로) 임의이 특징 또는 특징의 결합, 또는 특징의 임의의 개괄을 포함한다. 따라서, 새로운 청구항은 본 출원(또는 이에 대해 우선권을 주장하는 출원)의 속행 동안 특징의 임의의 이러한 결합으로 표현될 수 있다. 특히, 첨부된 청구항을 참조하여, 종속항으로부터의 특징은 독립항의 특징과 결합될 수 있으며, 각각의 독립항의 특징은 첨부된 청구항에서 열거된 특정 결합이 아니라 임의의 적절한 방식으로 결합될 수 있다.
Claims (20)
- 장치로서,
멀티 프로세싱 코어 시스템에 있는 하드웨어 프로세싱 코어를 포함하되,
상기 하드웨어 프로세싱 코어는 명령들의 시퀀스를 원자적 메모리 트랜잭션(atomic memory transaction)으로서 실행하고, 상기 하드웨어 프로세싱 코어는 상기 시퀀스 내의 명령들 각각을 실행 파이프라인으로 발행하며, 상기 실행 파이프라인은 상기 실행 파이프라인의 실행 스테이지보다 이전인 상기 실행 파이프라인의 검증 스테이지 동안 상기 시퀀스 내의 명령들 각각을 검증하고, 상기 실행 스테이지는 명령 결과들(instruction results)을 계산하며,
상기 검증 스테이지는 상기 시퀀스 내의 명령들의 옵코드들(opcodes)에 기초하여 상기 시퀀스 내의 명령들의 유형들(types)을 판별하도록 구성되고, 상기 검증 스테이지는, 임의의 메모리 위치에 대한 액세스를 허용하는 명령 유형을 나타내는 옵코드를 상기 명령들의 시퀀스 중 그 어떤 명령도 갖지 않는 경우에만, 원자적 메모리 트랜잭션으로서 상기 명령들의 시퀀스의 실행을 허용하도록 구성되며, 상기 멀티 프로세싱 코어 시스템의 다른 하나의 프로세서 코어는 상기 임의의 메모리 위치에 대한 액세스를 허용하는 유형의 명령을 실행하도록 구성된 회로를 포함하는 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 장치는,
소스 캐시 라인(source cache line)으로부터의 메모리 데이터를 목표 레지스터 내에 저장하고;
상기 목표 레지스터에 저장된 메모리 데이터를 변경하도록 상기 명령들의 시퀀스를 실행하고; 그리고
상기 목표 레지스터로부터의 값을 상기 소스 캐시 라인에 저장하도록 구성되는 것을 특징으로 하는 장치. - 제2항에 있어서,
상기 장치는 또한,
상기 소스 캐시 라인으로부터의 메모리 데이터를 상기 목표 레지스터 내에 저장하기 전에 상기 소스 캐시 라인을 록킹(locking)하고 그리고 상기 목표 레지스터로부터의 값을 상기 소스 캐시 라인에 저장한 후에 상기 소스 캐시 라인을 언록킹(unlocking)하도록 구성되며,
상기 소스 캐시 라인을 록킹하는 것은, 상기 소스 캐시 라인이 록킹된 동안, 하나 이상의 다른 프로세싱 코어가 상기 소스 캐시 라인에 저장된 공유 데이터에 대한 변경을 유발하거나 판독하는 것을 상기 하드웨어 프로세싱 코어가 방지하도록 하는 것을 특징으로 하는 장치. - 제2항에 있어서,
상기 명령들의 시퀀스는, 상기 명령들의 시퀀스가 원자적 메모리 트랜잭션으로서 실행될 것임을 지시하는 전용 시작 명령(special-purpose start instruction)에 의해 진행되고, 상기 전용 시작 명령은 상기 소스 캐시 라인을 지시하는 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 검증 스테이지는 상기 실행 파이프라인의 디코딩 스테이지의 일부인 것을 특징으로 하는 장치. - 제5항에 있어서,
상기 하드웨어 프로세싱 코어는 하드웨어 디코더 유닛을 사용하여 검증을 수행하도록 구성되는 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 하드웨어 프로세싱 코어는, 상기 임의의 메모리 위치에 대한 액세스를 허용하는 명령 유형을 나타내는 옵코드를 상기 명령들의 시퀀스에 있는 명령이 가지고 있다고 검출함에 응답하여 예외(exception)를 발생시키도록 구성된 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 하드웨어 프로세싱 코어는 순방향 진행의 보장과 함께 상기 원자적 메모리 트랜잭션을 실행하도록 구성된 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 검증 스테이지는 또한, 상기 명령들의 시퀀스에 있는 명령을 실행하는 것이 상기 하드웨어 프로세싱 코어가 상기 시퀀스 외부의 명령으로 점프할 것을 요구한다고 판별함에 응답하여, 상기 명령들의 시퀀스가 원자적 메모리 트랜잭션으로서 실행되는 것을 허용하지 않도록 구성되는 것을 특징으로 하는 장치. - 제1항에 있어서,
상기 검증 스테이지는 또한, 상기 명령들의 시퀀스에 있는 명령에 대하여, 상기 명령이 상기 하드웨어 프로세싱 코어로 하여금 범용 레지스터 이외의 레지스터에 액세스하도록 명령하거나, 상기 명령이 미리-지정된, 제한된 길이 포맷으로 표현되지 않거나, 또는 상기 명령 이전에 실행된 상기 시퀀스에 있는 명령들의 개수가 기결정된 최대 임계값 보다 크다고 판별함에 응답하여, 상기 명령들의 시퀀스가 원자적 메모리 트랜잭션으로서 실행되는 것을 허용하지 않도록 구성되는 것을 특징으로 하는 장치. - 방법으로서,
멀티 프로세싱 코어 시스템에 있는 프로세싱 코어에 의해서, 명령들의 시퀀스를 원자적 메모리 트랜잭션(atomic memory transaction)으로서 실행하는 단계, 상기 프로세싱 코어는 상기 시퀀스 내의 명령들 각각을 실행 파이프라인으로 발행하며; 그리고
명령 결과들(instruction results)이 계산되는 상기 실행 파이프라인의 실행 스테이지보다 이전인 상기 실행 파이프라인의 검증 스테이지에서, 상기 시퀀스 내의 명령들 각각을 검증하는 단계
를 포함하며,
상기 검증하는 단계는 상기 시퀀스 내의 명령들의 옵코드들(opcodes)에 기초하여 상기 시퀀스 내의 명령들의 유형들(types)을 판별하는 단계 및 임의의 메모리 위치에 대한 액세스를 허용하는 명령 유형을 나타내는 옵코드를 상기 명령들의 시퀀스 중 그 어떤 명령도 갖지 않는 경우에만, 원자적 메모리 트랜잭션으로서 상기 명령들의 시퀀스의 실행을 허용하는 단계를 포함하며, 상기 멀티 프로세싱 코어 시스템의 다른 하나의 프로세서 코어는 상기 임의의 메모리 위치에 대한 액세스를 허용하는 유형의 명령을 실행하도록 구성된 회로를 포함하는 것을 특징으로 하는 방법. - 제11항에 있어서,
소스 캐시 라인(source cache line)으로부터의 메모리 데이터를 목표 레지스터 내에 저장하는 단계;
원자적 메모리 트랜잭션으로서 상기 명령들의 시퀀스를 실행하는 것의 일부로서, 상기 목표 레지스터에 저장된 메모리 데이터를 판독 또는 변경하는 단계; 및
상기 목표 레지스터로부터의 값을 상기 소스 캐시 라인에 저장하는 단계
를 더 포함하는 것을 특징으로 하는 방법. - 제12항에 있어서,
상기 소스 캐시 라인으로부터의 메모리 데이터를 상기 목표 레지스터 내에 저장하기 전에 상기 소스 캐시 라인을 록킹(locking)하는 단계 및 상기 목표 레지스터로부터의 값을 상기 소스 캐시 라인에 저장한 후에 상기 소스 캐시 라인을 언록킹(unlocking)하는 단계
를 더 포함하며,
상기 소스 캐시 라인을 록킹하는 단계는, 상기 소스 캐시 라인이 록킹된 동안, 상기 프로세싱 코어로 하여금 하나 이상의 다른 프로세싱 코어들이 상기 소스 캐시 라인에 저장된 공유 데이터에 대한 변경을 유발하거나 판독하는 것을 방지하게 하는 것을 특징으로 하는 방법. - 제11항에 있어서,
상기 검증하는 단계는, 상기 명령들의 시퀀스에 있는 그 어떤 명령들도 상기 프로세싱 코어가 상기 시퀀스 외부의 명령으로 점프할 것을 요구하지 않는 경우에만 상기 명령들의 시퀀스가 원자적 메모리 트랜잭션으로서 실행되는 것을 허용하는 단계를 포함하는 것을 특징으로 하는 방법. - 제11항에 있어서,
상기 검증하는 단계는,
상기 명령들의 시퀀스에 있는 명령이 상기 프로세싱 코어로 하여금 범용 레지스터 이외의 레지스터에 액세스하도록 명령하거나, 상기 명령들의 시퀀스에 있는 명령이 미리-지정된, 제한된 길이 포맷으로 표현되지 않거나, 또는 상기 명령 이전에 실행된 상기 시퀀스에 있는 명령들의 개수가 기결정된 최대 임계값 보다 크다고 판별함에 응답하여, 상기 명령들의 시퀀스가 원자적 메모리 트랜잭션으로서 실행되는 것을 허용하지 않는 단계를 포함하는 것을 특징으로 하는 방법. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/961,819 | 2010-12-07 | ||
US12/961,819 US8788794B2 (en) | 2010-12-07 | 2010-12-07 | Programmable atomic memory using stored atomic procedures |
PCT/US2011/063772 WO2012078775A1 (en) | 2010-12-07 | 2011-12-07 | Programmable atomic memory using stored atomic procedures |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130127473A KR20130127473A (ko) | 2013-11-22 |
KR101968711B1 true KR101968711B1 (ko) | 2019-04-12 |
Family
ID=45496251
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137015787A KR101968711B1 (ko) | 2010-12-07 | 2011-12-07 | 저장된 원자적 절차를 사용하는 프로그램 가능한 원자적 메모리 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8788794B2 (ko) |
EP (2) | EP3021215B1 (ko) |
JP (1) | JP5752261B2 (ko) |
KR (1) | KR101968711B1 (ko) |
CN (1) | CN103299272B (ko) |
WO (1) | WO2012078775A1 (ko) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120254589A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | System, apparatus, and method for aligning registers |
US9772854B2 (en) * | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US9430166B2 (en) | 2012-08-10 | 2016-08-30 | International Business Machines Corporation | Interaction of transactional storage accesses with other atomic semantics |
US9129071B2 (en) * | 2012-10-24 | 2015-09-08 | Texas Instruments Incorporated | Coherence controller slot architecture allowing zero latency write commit |
US9547594B2 (en) * | 2013-03-15 | 2017-01-17 | Intel Corporation | Instructions to mark beginning and end of non transactional code region requiring write back to persistent storage |
US9830210B2 (en) * | 2013-03-15 | 2017-11-28 | Nvidia Corporation | CPU-to-GPU and GPU-to-GPU atomics |
JP6221500B2 (ja) * | 2013-08-19 | 2017-11-01 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US9824039B2 (en) * | 2013-09-09 | 2017-11-21 | International Business Machines Corporation | Signal interrupts in a transactional memory system |
US9552205B2 (en) * | 2013-09-27 | 2017-01-24 | Intel Corporation | Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions |
US9501243B2 (en) * | 2013-10-03 | 2016-11-22 | Cavium, Inc. | Method and apparatus for supporting wide operations using atomic sequences |
US20150378939A1 (en) * | 2014-06-27 | 2015-12-31 | Analog Devices, Inc. | Memory mechanism for providing semaphore functionality in multi-master processing environment |
KR102346629B1 (ko) | 2014-12-05 | 2022-01-03 | 삼성전자주식회사 | 메모리 접근 제어 방법 및 장치 |
US10528345B2 (en) * | 2015-03-27 | 2020-01-07 | Intel Corporation | Instructions and logic to provide atomic range modification operations |
US9858074B2 (en) * | 2015-06-26 | 2018-01-02 | International Business Machines Corporation | Non-default instruction handling within transaction |
US10019264B2 (en) * | 2016-02-24 | 2018-07-10 | Intel Corporation | System and method for contextual vectorization of instructions at runtime |
FR3048526B1 (fr) * | 2016-03-07 | 2023-01-06 | Kalray | Instruction atomique de portee limitee a un niveau de cache intermediaire |
GB2551523B (en) * | 2016-06-20 | 2019-07-03 | Imagination Tech Ltd | Livelock recovery circuit |
GB2554442B (en) | 2016-09-28 | 2020-11-11 | Advanced Risc Mach Ltd | Apparatus and method for providing an atomic set of data accesses |
US10748637B2 (en) | 2018-07-26 | 2020-08-18 | International Business Machines Corporation | System and method for testing processor errors |
US11620222B2 (en) * | 2020-08-28 | 2023-04-04 | Samsung Electronics Co., Ltd. | Methods and apparatus for atomic operations with multiple processing paths |
US11467962B2 (en) * | 2020-09-02 | 2022-10-11 | SiFive, Inc. | Method for executing atomic memory operations when contested |
US12020062B2 (en) | 2020-10-20 | 2024-06-25 | Micron Technology, Inc. | Method of executing programmable atomic unit resources within a multi-process system |
US11436187B2 (en) | 2020-10-20 | 2022-09-06 | Micron Technology, Inc. | Method of notifying a process or programmable atomic operation traps |
US11409539B2 (en) * | 2020-10-20 | 2022-08-09 | Micron Technology, Inc. | On-demand programmable atomic kernel loading |
US11586439B2 (en) | 2020-10-20 | 2023-02-21 | Micron Technology, Inc. | Detecting infinite loops in a programmable atomic transaction |
US11740929B2 (en) | 2020-10-20 | 2023-08-29 | Micron Technology, Inc. | Registering a custom atomic operation with the operating system |
US11693690B2 (en) | 2020-10-20 | 2023-07-04 | Micron Technology, Inc. | Method of completing a programmable atomic transaction by ensuring memory locks are cleared |
US11600332B2 (en) | 2020-10-20 | 2023-03-07 | Micron Technology, Inc. | Programmable atomic operator resource locking |
US11403023B2 (en) * | 2020-10-20 | 2022-08-02 | Micron Technology, Inc. | Method of organizing a programmable atomic unit instruction memory |
CN112395093A (zh) * | 2020-12-04 | 2021-02-23 | 龙芯中科(合肥)技术有限公司 | 多线程数据处理方法、装置、电子设备及可读存储介质 |
US20230342158A1 (en) * | 2022-04-21 | 2023-10-26 | Microchip Technology Incorporated | Atomic Instruction Set and Architecture with Bus Arbitration Locking |
WO2023205387A1 (en) * | 2022-04-21 | 2023-10-26 | Microchip Technology Incorporated | Atomic instruction set and architecture with bus arbitration locking |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089520A1 (en) * | 2007-09-28 | 2009-04-02 | Bratin Saha | Hardware acceleration of strongly atomic software transactional memory |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4847754A (en) | 1985-10-15 | 1989-07-11 | International Business Machines Corporation | Extended atomic operations |
US5218712A (en) | 1987-07-01 | 1993-06-08 | Digital Equipment Corporation | Providing a data processor with a user-mode accessible mode of operations in which the processor performs processing operations without interruption |
US5175829A (en) | 1988-10-25 | 1992-12-29 | Hewlett-Packard Company | Method and apparatus for bus lock during atomic computer operations |
US5428761A (en) | 1992-03-12 | 1995-06-27 | Digital Equipment Corporation | System for achieving atomic non-sequential multi-word operations in shared memory |
US5701501A (en) | 1993-02-26 | 1997-12-23 | Intel Corporation | Apparatus and method for executing an atomic instruction |
JPH09146838A (ja) * | 1995-11-21 | 1997-06-06 | Matsushita Electric Ind Co Ltd | キャッシュ制御方法及びキャッシュ制御装置 |
US6170038B1 (en) | 1997-10-23 | 2001-01-02 | Intel Corporation | Trace based instruction caching |
US6430657B1 (en) | 1998-10-12 | 2002-08-06 | Institute For The Development Of Emerging Architecture L.L.C. | Computer system that provides atomicity by using a tlb to indicate whether an exportable instruction should be executed using cache coherency or by exporting the exportable instruction, and emulates instructions specifying a bus lock |
US6370625B1 (en) | 1999-12-29 | 2002-04-09 | Intel Corporation | Method and apparatus for lock synchronization in a microprocessor system |
US6463511B2 (en) | 2000-12-29 | 2002-10-08 | Intel Corporation | System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model |
US6801986B2 (en) | 2001-08-20 | 2004-10-05 | Hewlett-Packard Development Company, L.P. | Livelock prevention by delaying surrender of ownership upon intervening ownership request during load locked / store conditional atomic memory operation |
US7103528B2 (en) | 2002-09-19 | 2006-09-05 | Lsi Logic Corporation | Emulated atomic instruction sequences in a multiprocessor system |
US7418577B2 (en) | 2003-02-13 | 2008-08-26 | Sun Microsystems, Inc. | Fail instruction to support transactional program execution |
KR101369441B1 (ko) * | 2005-08-23 | 2014-03-04 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 컴퓨터 시스템 내부의 프로액티브 동기 방법 |
US8402224B2 (en) * | 2005-09-20 | 2013-03-19 | Vmware, Inc. | Thread-shared software code caches |
US20070186056A1 (en) | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US8321637B2 (en) * | 2007-05-14 | 2012-11-27 | International Business Machines Corporation | Computing system with optimized support for transactional memory |
US8095741B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory computing system with support for chained transactions |
KR101086791B1 (ko) * | 2007-06-20 | 2011-11-25 | 후지쯔 가부시끼가이샤 | 캐시 제어 장치 및 제어 방법 |
US7945741B2 (en) | 2007-07-09 | 2011-05-17 | International Business Machines Corporation | Reservation required transactions |
EP2332043B1 (en) * | 2008-07-28 | 2018-06-13 | Advanced Micro Devices, Inc. | Virtualizable advanced synchronization facility |
US8489864B2 (en) | 2009-06-26 | 2013-07-16 | Microsoft Corporation | Performing escape actions in transactions |
US8533436B2 (en) | 2009-06-26 | 2013-09-10 | Intel Corporation | Adaptively handling remote atomic execution based upon contention prediction |
US8392661B1 (en) * | 2009-09-21 | 2013-03-05 | Tilera Corporation | Managing cache coherence |
US8239635B2 (en) * | 2009-09-30 | 2012-08-07 | Oracle America, Inc. | System and method for performing visible and semi-visible read operations in a software transactional memory |
US8739164B2 (en) * | 2010-02-24 | 2014-05-27 | Advanced Micro Devices, Inc. | Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof |
US9626187B2 (en) | 2010-05-27 | 2017-04-18 | International Business Machines Corporation | Transactional memory system supporting unbroken suspended execution |
-
2010
- 2010-12-07 US US12/961,819 patent/US8788794B2/en active Active
-
2011
- 2011-12-07 EP EP15193965.9A patent/EP3021215B1/en active Active
- 2011-12-07 WO PCT/US2011/063772 patent/WO2012078775A1/en active Application Filing
- 2011-12-07 CN CN201180064250.6A patent/CN103299272B/zh active Active
- 2011-12-07 JP JP2013543316A patent/JP5752261B2/ja active Active
- 2011-12-07 KR KR1020137015787A patent/KR101968711B1/ko active IP Right Grant
- 2011-12-07 EP EP11808979.6A patent/EP2649518B1/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090089520A1 (en) * | 2007-09-28 | 2009-04-02 | Bratin Saha | Hardware acceleration of strongly atomic software transactional memory |
Also Published As
Publication number | Publication date |
---|---|
US8788794B2 (en) | 2014-07-22 |
CN103299272A (zh) | 2013-09-11 |
KR20130127473A (ko) | 2013-11-22 |
JP2013546088A (ja) | 2013-12-26 |
EP3021215B1 (en) | 2018-07-11 |
EP2649518A1 (en) | 2013-10-16 |
JP5752261B2 (ja) | 2015-07-22 |
EP3021215A1 (en) | 2016-05-18 |
US20120144119A1 (en) | 2012-06-07 |
WO2012078775A1 (en) | 2012-06-14 |
CN103299272B (zh) | 2016-04-27 |
EP2649518B1 (en) | 2016-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101968711B1 (ko) | 저장된 원자적 절차를 사용하는 프로그램 가능한 원자적 메모리 | |
US9122476B2 (en) | Programmable atomic memory using hardware validation agent | |
US8793471B2 (en) | Atomic program verification | |
US8996845B2 (en) | Vector compare-and-exchange operation | |
TWI476595B (zh) | 用於交易式記憶體事件處置之硬體中使用者處置器的登錄 | |
US8407455B2 (en) | Coexistence of advanced hardware synchronization and global locks | |
US9262173B2 (en) | Critical section detection and prediction mechanism for hardware lock elision | |
RU2501071C2 (ru) | Механизм запроса поздней блокировки для пропуска аппаратной блокировки (hle) | |
EP2641171B1 (en) | Preventing unintended loss of transactional data in hardware transactional memory systems | |
US20070050561A1 (en) | Method for creating critical section code using a software wrapper for proactive synchronization within a computer system | |
US10768680B2 (en) | Hardware apparatuses and methods to perform transactional power management | |
JP2015158936A (ja) | データ処理装置 | |
Pirkelbauer et al. | A portable lock-free bounded queue | |
US11789869B2 (en) | Contention tracking for latency reduction of exclusive operations | |
US11809319B2 (en) | Contention tracking for processor cache management |
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 |