KR101378390B1 - 공유 스택의 부분들을 할당하기 위한 시스템 및 방법 - Google Patents
공유 스택의 부분들을 할당하기 위한 시스템 및 방법 Download PDFInfo
- Publication number
- KR101378390B1 KR101378390B1 KR1020137003867A KR20137003867A KR101378390B1 KR 101378390 B1 KR101378390 B1 KR 101378390B1 KR 1020137003867 A KR1020137003867 A KR 1020137003867A KR 20137003867 A KR20137003867 A KR 20137003867A KR 101378390 B1 KR101378390 B1 KR 101378390B1
- Authority
- KR
- South Korea
- Prior art keywords
- thread
- stack
- shared
- entry
- shared stack
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 230000008569 process Effects 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 10
- 230000006870 function Effects 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 3
- 239000000872 buffer Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multi Processors (AREA)
Abstract
프로세서의 다수의 스레드들에 의해 공유된 스택을 관리하는 시스템 및 방법은 공유 스택의 제 1 부분을 제 1 스레드로 할당하는 것 및 공유 스택의 제 2 부분을 제 2 스레드로 할당하는 것을 포함한다.
Description
본 개시물은 일반적으로 데이터 프로세싱에 관한 것이고, 보다 구체적으로 메모리 스택 동작들에 관한 것이다.
기술에 있어서의 진보들은 다양한 작업들을 실시하기 위해 사용될 수 있는 보다 강력한 컴퓨팅 디바이스들을 발생시켰다. 컴퓨팅 디바이스들은 통상적으로 적어도 하나의 프로세서를 포함한다. 컴퓨팅 디바이스들 내에서 명령들의 프로세싱을 개선하기 위해서, 프로세서에 의한 분기 예측이 종종 사용되어 프로그램 코드 내에서의 분기를 예측한다. 프로그램 실행 동안 조우되는 호/리턴(call/return) 타입 분기들을 위한 리턴 어드레스들을 예측하기 위해 마이크로프로세서에 의해 리턴 어드레스 스택(RAS; Return Address Stack)이 사용될 수 있다. RAS는 스택의 특수 구현(후입선출 (LIFO;last in first out) 데이터 구조)일 수 있다. 호 명령들은 리턴 어드레스로 하여금 RAS 상으로 푸시되게 할 수 있다. 리턴 명령들은 RAS의 맨 위에 위치된 어드레스로 하여금 스택에서 팝 오프(pop off)되게 하고 리턴 어드레스를 예측하는 데에 사용되게 할 수 있다. 분기 예측이 성공적인 경우, 프로세서의 명령 페치 유닛을 리디렉팅(redirect)하기 위해 RAS의 맨 위에서 팝 오프된 어드레스가 사용될 수 있다. 분기 예측이 성공적이지 않은 경우, 명령 페치 유닛을 정확하게 리디렉팅하기 위해서 정확한 리턴 어드레스가 계산될 수 있다.
다중스레드 프로세서의 각각의 스레드는 그 자신의 전용 RAS를 사용할 수 있고 각각의 RAS는 고정된 사이즈를 가질 수 있다. 각각의 스레드는 각각의 스레드에 의해 실행되는 명령 스트림에 따라 스레드들의 고정 사이즈 RAS에 대한 상이한 수의 엔트리들을 사용할 수 있다. 그러나, 다수의 리턴 어드레스 스택들의 사용은 시스템에 비용을 추가시킨다.
특정 실시형태는 공유 스택에 대한 다중스레드 액세스를 허용할 수 있다. 공유 스택에 대한 액세스는 각각의 스레드의 현재 요구에 따라 다수의 스레드들에 동적으로 할당될 수 있다. 공유 스택의 엔트리들은 스레드 포인터들의 조작을 통해 스레드들에 의해 할당되고 덮여쓰여질 수 있다. 스택 어드레스 엔트리들의 이동 대신 스레드 포인터들이 이동되기 때문에, 프로세싱 및 전력 수요들이 감소될 수 있다. 공유 스택의 엔트리들이 스레드들 사이에 더욱 효율적으로 분포될 수 있기 때문에 공유 스택은 종래의 정적 다중스레드 리턴 어드레스 스택들보다 더 적은 엔트리들을 포함할 수 있다. 더 적은 스택 엔트리들은 다이 상에서 요구되는 공간을 더 작게 할 뿐만 아니라 성능을 증가시키는 것으로 해석될 수 있다.
특정 실시형태에서, 공유 스택을 포함하는 장치가 개시된다. 장치는 공유 스택의 제 1 부분을 제 1 스레드로 선택적으로 할당하고 그리고 공유 스택의 제 2 부분을 제 2 스레드로 선택적으로 할당하도록 동작가능한 제어기를 더 포함한다.
다른 특정 실시형태에서, 프로세서의 다수의 스레드들에 의해 공유 스택을 관리하는 방법은 공유 스택의 제 1 부분을 제 1 스레드로 할당하는 단계 및 공유 스택의 제 2 부분을 제 2 스레드로 할당하는 단계를 포함한다.
다른 특정 실시형태에서, 컴퓨터 판독가능 유형 매체는 컴퓨터에 의해 실행가능한 명령들을 저장한다. 명령들은, 공유 스택의 제 1 부분을 제 1 스레드로 할당하고 그리고 공유 스택의 제 2 부분을 제 2 스레드로 할당하도록 컴퓨터에 의해 실행가능한 명령들을 포함한다.
개시된 실시형태들 중 적어도 하나에 의해 제공된 특정 이점들은, 다수의 스레드들에 의해 액세스를 공유하도록 구성되는 공유 스택으로 인한 것일 수 있다. 공유 스택은, 스레드들 각각이 별개의 스택에 액세스하는 시스템에 의해 통상적으로 필요로 되는 것보다 더 적은 수의 총 엔트리들을 포함할 수 있다. 엔트리들의 총 수가 더 작아질수록 다이 상에서 요구되는 공간이 더 작아질 뿐만 아니라 복잡성 및 전력 수요들을 감소시킬 수 있다. 스택 사이즈의 감소 및 개시된 실시형태들 중 하나 또는 그 초과에 의해 조장되는 다른 이점들은 메모리 분배 및 스택 액세스 효율을 더 개선시킬 수 있다.
본 개시물의 다른 양상들, 이점들 및 특징들은 다음 섹션들: 도면들의 간단한 설명, 구체적인 설명, 및 청구항들을 비롯하여 전체 출원을 검토한 후 명확해질 것이다.
도 1은 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 2는 공유 스택에 액세스하도록 구성된 활성 스레드를 포함하는 시스템의 특정 예시적인 실시형태의 블록도이다.
도 3은 스레드가 공유 스택의 엔트리들에 동적으로 액세스할 수 있게 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 4는 제 2 스레드가 활성이 되고 공유 스택에 액세스함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 5는 제 2 스레드가 공유 스택의 엔트리들을 획득하고 제 1 스레드의 엔트리를 덮어쓰기할 것을 준비함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 6은 제 2 스레드가 제 1 스레드의 엔트리를 덮어쓰기함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 7은 프로세서의 다수의 스레드들에 의해 공유 스택을 관리하는 방법의 특정 예시적인 실시형태의 흐름도이다.
도 8은 공유 스택에 대한 다중스레드 액세스를 인에이블하는 방법의 특정 예시적인 실시형태의 흐름도이다.
도 9는 다수의 스레드들에 걸친 공유 스택 액세스를 포함하는 휴대용 디바이스의 블록도이다.
도 2는 공유 스택에 액세스하도록 구성된 활성 스레드를 포함하는 시스템의 특정 예시적인 실시형태의 블록도이다.
도 3은 스레드가 공유 스택의 엔트리들에 동적으로 액세스할 수 있게 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 4는 제 2 스레드가 활성이 되고 공유 스택에 액세스함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 5는 제 2 스레드가 공유 스택의 엔트리들을 획득하고 제 1 스레드의 엔트리를 덮어쓰기할 것을 준비함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 6은 제 2 스레드가 제 1 스레드의 엔트리를 덮어쓰기함에 따라, 공유 스택에 대한 다중스레드 액세스를 조정하도록 구성된 시스템의 특정 예시적인 실시형태의 블록도이다.
도 7은 프로세서의 다수의 스레드들에 의해 공유 스택을 관리하는 방법의 특정 예시적인 실시형태의 흐름도이다.
도 8은 공유 스택에 대한 다중스레드 액세스를 인에이블하는 방법의 특정 예시적인 실시형태의 흐름도이다.
도 9는 다수의 스레드들에 걸친 공유 스택 액세스를 포함하는 휴대용 디바이스의 블록도이다.
다중-스레드 프로세서의 다수의 스레드들에 의해 공유되는 메모리 스택을 포함하는 시스템이 개시된다. 공유 스택의 엔트리들은 스택 제어기에 의해 동적으로, 주어진 스레드에 할당될 수 있다. 이러한 할당에 있어서, 공유 스택의 각각의 스레드의 할당된 부분에는 효율적인 스택 사용과 공정성 정책(fairness policy)들을 고려하여 크기가 부여된다. 공유 스택은, 별개의 스레드 용으로 각각 전용되는 별개의 스택들에 의해 사용되는 것보다 더 적은 스택 엔트리들을 포함할 수 있다.
도 1을 참고하면, 다수의 스레드들 중에서 스택을 공유하는 시스템의 특정 실시형태가 도시되며 전반적으로 100으로 지정된다. 이 시스템(100)은 메모리(100)에 결합되는 제어기(102)를 포함한다. 제어기(102)는 다중스레드 프로세서(160)에 응답한다. 메모리(104)는 공유 스택(105)을 포함한다. 제어기(102)는 다중스레드 프로세서(160)로부터의 스택 동작 요청들에 응답하여 공유 스택(105)의 부분들을 다중스레드 프로세서(160)의 개별 스레드들로 할당 및 할당해제(de-allocate)하고 스레드들을 요청하기 위해 공유 스택(105)의 스택 동작들을 실시한다.
다중스레드 프로세서(160)는 하나 또는 그 초과의 스레드들을 실행할 수 있는 하나 또는 그 초과의 다중스레드 프로세서 코어들(106)을 포함할 수 있다. 예를 들어, 다중스레드 프로세서(160)는 제 1 스레드(108)(스레드 0), 제 2 스레드(110)(스레드 1), 제 3 스레드(112)(스레드 2), 및 제 n 스레드(114)(스레드(n-1))를 실행할 수 있다. 다중스레드 프로세서(160)는 하나 또는 그 초과의 스레드들(108-114)에 대한 스택 동작 요청들을 제어기(102)로 전송할 수 있다. 예를 들어, 다중스레드 프로세서(160)는, 푸시 요청(138)을 생성하는 스레드를 식별하고 그리고 공유 스택(105)의 요청 스레드의 부분 상으로 푸시될 데이터를 추가로 식별하는 푸시 요청(138)을 제어기(102)로 전송할 수 있다. 다른 예로서, 다중스레드 프로세서(160)는 팝 요청(136)을 제어기(102)로 전송할 수 있다. 팝 요청(136)은 다중 스레드들(108-114)의 요청 스레드를 식별하고 그리고 공유 스택(105)의 요청 스레드의 부분에 가장 최근에 추가되었던 데이터의 리턴을 요청할 수 있다.
제어기(102)는 공유 스택(105)의 부분들을 개별 스레드들로 선택적으로 할당하도록 동작한다. 예를 들어, 제어기(102)는 공유 스택(105)의 제 1 부분(116)을 제 1 스레드(108)로, 공유 스택(105)의 제 2 부분(118)을 제 2 스레드(110)로, 공유 스택(105)의 제 1 부분(120)을 제 3 스레드(112)로, 공유 스택(105)의 n번째 부분(122)을 제 n 스레드(114)로 선택적으로 할당할 수 있다. 특정 실시형태에서, 공유 스택(105)은 하드웨어 스택을 포함할 수 있다. 대안으로, 공유 스택(105)은 다른 메모리, 이를 테면, 랜덤 액세스 메모리(RAM)에서 구현될 수 있다.
제어기(102)는 스레드 요청들에 응답하여 공정성 정책(140)에 따라 공유 스택(105)의 부분들(116-122)을 동적으로 할당하고 스택 포인터들(142)을 경유하여 할당된 부분들(116-122)의 사용량(usage) 및 할당을 나타내는 데이터를 보유한다. 예를 들어, 공정성 정책(140)은, 공유 스택(105)이 각각의 스레드를 위한 고정 사이즈 부분들로, 각각의 실행중인 스레드를 위한 고정 사이즈 부분들로, 각각의 스레드를 위한 가변 사이즈 부분들로, 각각의 실행중인 스레드를 위한 가변 사이즈 부분들로, 스택 미스들(stack misses)의 수에 대하여 가중된 평균-사이즈 부분들로, 또는 몇몇 다른 방식으로 스레드들 사이에서 동등하게 할당된다는 것을 나타낼 수 있다. 스택 포인터들(142)은 제 1 스레드(108)에 대응하는 포인터들(162), 제 2 스레드(110)에 대응하는 포인터들(164), 제 3 스레드(112)에 대응하는 포인터들(166), 및 제 n 스레드(114)에 대응하는 포인터들(168)을 포함한다. 예를 들어, 스레드 포인터들(162-168) 각각은, 도 2 내지 도 6에 대하여 기술된 바와 같이, 탑 엔트리 포인터, 탑-오브-스택 포인터, 바텀-오브-스택 포인터, 바텀 엔트리 포인터, 및 하나 또는 그 초과의 추가적인 스테이터스(status) 비트들을 포함할 수 있다. 제어기(102)는 포인터들(162-168)을 사용하여, 원형 버퍼들(circular buffers)을 이용하여 각각의 스레드로 할당되는 별개의 스택들을 보유한다.
제 1 부분(116)은 제 1 스레드(108)에 대응하는 스택 동작들을 위해 할당될 수 있다. 제 1 부분(116)은 제 1 스레드(108)에 대한 하나 또는 그 초과의 데이터 엘리먼트들(124)을 저장할 수 있는 하나 또는 그 초과의 스택 엔트리들(미도시)을 포함할 수 있다. 제 2 부분(118)은 제 2 스레드(110)의 스택 동작들을 위해 할당될 수 있고 제 2 스레드(110)에 대한 하나 또는 그 초과의 데이터 엘리먼트들(126)을 저장할 수 있는 하나 또는 그 초과의 스택 엔트리들을 포함할 수 있다. 제 3 부분(120)은 제 3 스레드(112)에 대응하는 스택 동작들을 위해 할당될 수 있고 제 3 스레드(112)에 대한 하나 또는 그 초과의 데이터 엘리먼트들(128)을 저장할 수 있는 하나 또는 그 초과의 스택 엔트리들을 포함할 수 있다. 제 n 부분(122)은 제 n 스레드(114)에 대응하는 스택 동작을 위해 할당될 수 있고 제 n 스레드(114)에 대한 하나 또는 그 초과의 데이터 엘리먼트들(130)을 저장할 수 있는 하나 또는 그 초과의 스택 엔트리들을 포함할 수 있다.
동작 동안, 다중스레드 프로세서(160)의 하나 또는 그 초과의 스레드들은 스택 동작 요청, 이를 테면, 푸시 요청(138)을 생성할 수 있다. 제어기(102)는 푸시 요청(138)을 수신하고 요청 스레드(예를 들어, 제 1 스레드(108))가 (예를 들어, 제 1 스레드(108)에 대한 데이터 엘리먼트들(124)에) 추가 데이터를 수용할 만큼 그의 할당된 부분(예를 들어, 제 1 부분(116)) 내에 충분한 공간을 갖는지 여부를 결정할 수 있다. 제 1 부분(116)이 충분한 공간을 포함하지 않는 경우, 제어기(102)는, 공정성 정책(140)에 따라서 제 1 스레드(108)에 추가 공간을 동적으로 할당할지 여부를 결정할 수 있다. 예를 들어, 다른 스레드들(110-114)이 공유 스택(105) 나머지 부분(remainder)을 이용하지 않을 경우, 제어기(102)는, 제 1 스레드(108)에 대응하는 추가적인 푸시 요청들을 수용하기 위해 추가 메모리를 제 1 부분(116)에 동적으로 할당할 수 있다.
대안으로, 다중 스레드들(110-114)이 능동적으로 공유 스택(105)을 이용할 경우, 제어기(102)는, 공정성 정책(140)에 의해 결정된 바와 같이, 공유 스택(105)의 공정한 몫(fair share)보다 더 많이 제 1 스레드(108)가 할당되는 것을 방지할 수 있다. 공유 스택의 각각의 부분은 원형 버퍼를 이용하여 구현될 수 있다. 제어기(102)가, 푸시 요청(138)이 만족될 수 있다고 결정하는 경우, 제어기(102)는 푸시 요청(138)을 위한 수신 데이터를, 제 1 부분(116) 내에서 제 1 스레드(108)에 대한 데이터 엘리먼트들(124) 중 하나에 기록하는 것을 포함할 수 있는 메모리 동작들(150)을 개시한다. 제어기(102)는 또한, 제 1 부분이 사이즈가 조정된 경우 스택의 탑 엔트리의 변경을 나타내기 위해 제 1 스레드 포인터들(162)을 업데이트할 수 있다.
제어기(102)는 또한, 스레드들 중 임의의 것, 이를 테면, 제 1 스레드(108)로부터 팝 요청(136)을 수신하도록 구성될 수 있다. 팝 요청(136)에 응답하여, 제어기(102)는, 제 1 스레드(108)에 관한 데이터 엘리먼트들(124)로부터 가장 최근에 추가된 데이터 엘리먼트를 판독하고 팝 요청(136)에 응답하여 다중스레드 프로세서(160)에 데이터(134)를 리턴시키기 위해 메모리 동작들(150)을 개시하도록 구성된다. 예를 들어, 공유 스택(105)이 함수 리턴 어드레스 스택(RAS)로서 구현되는 경우, 리턴 데이터(134)는 요청된 스레드, 이를 테면 제 1 스레드(108)에 대응하는 함수 리턴 어드레스를 포함한다. 이외에도, 제어기(102)는, 팝 요청(136)의 이행에 응답하여 탑-오브-스택이 팝되었음을 나타내고 그리고 제 1 부분(116) 내의 스택 공간 사용량의 할당을 감소시키기 위해서 제 1 스레드 포인터들(162)을 업데이트할 수 있다.
제어기(102)가 제 1 명령을 통해 함수 리턴 어드레스를 예측하는 특정 실시형태에서, 공유 스택(105)으로부터의 예측착오 함수 리턴 어드레스는 정확한 함수 리턴 어드레스가 후속하여 리턴되게 한다. 예를 들어, 다중스레드 프로세서(160)는 실행될 명령들의 형태(예를 들어, 리턴 명령)로 팝 요청(136)을 수신할 수 있다. 리턴 실행은, 완료를 위해서 다수의 사이클들을 필요로 할 수 있다. 리턴 명령의 실행의 시작 시, 리턴 어드레스는 공유 스택(105)로부터 팝핑될 수 있다(popped). 이 팝핑된 리턴 어드레스는 명령 페치들을 리디렉팅하기 위해 사용되는 추론적인(speculative) 어드레스일 수 있다. 리턴 명령이 실행을 계속함에 따라(예를 들어, 다중스레드 프로세서(160)의 파이프라인을 통해 그의 진로를 형성함), 다중스레드 프로세서(160)는 "실제"(예를 들어 비-추론적인) 리턴 어드레스를 계산할 수 있다. 리턴 명령이 실행을 완료한 경우, 추론적인 리턴 어드레스 및 비-추론적인 리턴 어드레스가 비교될 수 있다. 리턴 어드레스들이 일치하지 않을 경우(예를 들어, 분기 예측착오가 발생한 경우), 명령들을 페치하기 위해 "실제" 리턴 어드레스가 사용될 수 있다. "부정확하게" 페치된 명령들은 플러시(flush)될 수 있다.
푸시 동작 요청(138)에 응답하여 공유 스택(105)의 부분들을 동적으로 할당하기 위해 공정성 정책(140)을 구현하는 제어기(102)의 결과로서, 공유 스택(105) 내에서 총 스택 엔트리들의 효율적인 사용을 위해서 개별 스택처럼 동작하는 공유 스택(105)의 별개의 부분이 각각의 스레드(108-114)에 제공되도록, 공유 스택(105)이 다중 스레드들(108-114)에 의해 사용되고 동적으로 할당될 수 있다. 개별 스레드들(108-114) 간의 공유 스택(105)의 부분들(116-122)의 할당 및 할당해제는 제어기(102)의 동작을 통해 그리고 스택 포인터들(142)의 제어에 의해 실시될 수 있음으로써, 데이터 엘리먼트들(124-130)이 공유 스택(105) 내에서 이동하지 않아도 된다. 대신에, 공유 스택(105)의 할당 부분들(116-122)은 데이터 엘리먼트들(124-130) 주위에서 이동될 수 있다. 그 결과, 공유 스택(105)이 효율적으로 사용될 수 있고 다수의 스레드들(108-114)로부터의 스택 동작들을 수용할 수 있고 각각의 스레드(108-114)를 위한 별개의 전용 스택들을 포함하는 시스템보다 더 적은 총 스택 엔트리들을 사용할 수 있다.
4개의 스레드들 및 4개의 부분들이 도 1에 도시되었지만, 공유 스택(105)은 2개 또는 그 초과의 스레드들에 의한 사용을 위해 2개 또는 그 초과의 부분들을 포함할 수 있다. 또한, 메모리(104), 제어기(102), 및 프로세서(160)가 별개의 컴포넌트들로 도시되었지만, 이러한 컴포넌트들 중 2개 또는 그 초과의 것은 하나의 디바이스 상에 통합될 수 있다는 것을 이해해야 한다.
도 2를 참고하면, 공유 스택에 액세스하도록 구성되는 다수의 스레드들 중 하나의 실행을 도시하는, 시스템의 특정 예시적인 실시형태의 블록도가 도시되며 전반적으로 200으로 지정된다. 보다 구체적으로, 스레드(112)는 리셋 상태에서 벗어나 활성이 되고 공유 스택(105)의 엔트리(222)를 할당받을 수 있다. 도 2의 스레드들(108, 110 및 112)은 도 1의 스레드들(108, 110 및 112)과 동일할 수 있고, 도 2의 공유 스택(105)은 도 1의 공유 스택(105)과 동일할 수 있다. 스레드(112)는 그의 포인터들(252, 254, 256 및 258)의 사용을 통해 공유 스택(105)의 엔트리(222)의 소유권을 획득할 수 있다.
스레드(112)(예를 들어, 스레드 2)는, 그 스레드(112)가 기록할 수 있는 탑 엔트리 포인터(TEP; top entry pointer)(252)를 포함할 수 있다. 탑 엔트리 포인터(252)는 공유 스택(105) 내의 탑-모스트 엔트리를 포인팅할 수 있다. 스레드(112)는 또한 탑 오브 스택 포인터(TSP; top of stack pointer)(254)를 포함할 수 있다. 탑 오브 스택 포인터(254)는 스레드(112)와 연관된 공유 스택(105) 내의 탑 엔트리(또는 가장 최근에 기록된 엔트리)를 포인팅할 수 있다. 가장 최근에 기록된 엔트리는 스택 팝 동작 시 리턴될 데이터를 포함할 수 있다. 스레드(112) 내에 포함되는 바텀 오브 스택 포인터(BSP; bottom of stack pointer)(256)는 스레드(112)와 연관되는 공유 스택(105) 내의 가장 오래된 유효 엔트리를 포인팅할 수 있다. 스레드(112)는 바텀 엔트리 포인터(BEP)(258)를 더 포함할 수 있다. 바텀 엔트리 포인터(258)는 스레드(112)가 기록할 수 있는 공유 스택(105)의 바텀-모스트 엔트리(bottom-most entry)를 포인팅할 수 있다. 스레드(112)는 스레드 활성 스테이터스 비트(TASB; thread active status bit)(260)를 더 포함할 수 있다. 스레드 활성 스테이터스 비트(260)는, 스레드(112)가 프로세스를 실행하고 있는지 여부를 나타낼 수 있다. 스레드(112)가 프로세스를 실행하고 있지 않은 경우, 스레드(112)는 공유 스택(105)의 엔트리를 할당받지 못할 수 있다.
스레드(112)는 랩핑 스택 비트(WSB; wrapped stack bit)(264)를 더 포함한다. 랩핑 스택 비트(264)는, 공통 엔트리를 포인팅하도록 진행하는 탑 오브 스택 포인터(254) 및/또는 바텀 오브 스택 포인터(256)에 응답하여 공유 스택(105)이 랩핑되었는지 여부를 나타낼 수 있다. 예를 들어, 탑 오브 스택 포인터(254)가 바텀 오브 스택 포인터(256)에 도달하도록 둥글게 말아져 있다(wrapped around)는 것을 나타내기 위해 랩핑 스택 비트(264)가 논리 1 값으로 셋팅될 수 있다. 랩핑 스택 비트(264)가 논리 1 값으로 셋팅되는 경우, 그 다음의 푸시는 바텀 오브 스택 포인터(256) 및 탑 오브 스택 포인터(254) 둘 모두를 증가시킬 수 있다. 이 푸시 동작은 추가적으로, (스택 포인터(256)의 바텀에 의해 포인팅되는) 공유 스택 내의 가장 오래된 엔트리가 덮어쓰여지게 할 수 있다. 스레드의 랩핑 스택 비트(264)가 논리 1 값을 갖는 동안 공유 스택(105)으로부터 팝 동작이 발생하는 경우, 랩핑 스택 비트(264)는 0의 값으로 전환(transition)될 수 있다.
스레드(112)는 또한 엠프티/풀 비트(EFB; empty/full bit)(262)를 포함한다. 엠프티/풀 비트(262)는 스레드(112)와 연관된 공유 스택(105)의 엔트리가 사용되는지 여부를 나타내도록 구성될 수 있다. 예를 들어, 엠프티/풀 비트(262)는, 스레드(112)의 데이터가 공유 스택(105)에 존재하는 경우 논리 1 값을 포함할 수 있다. 역으로, 엠프티/풀 비트(262)는, 스레드(112)의 데이터가 공유 스택(105) 내에 저장되지 않는 경우 논리 0 값을 포함할 수 있다. 엠프티/풀 비트(262)가 논리 0 값이고 푸시 동작이 이루어지는 경우, 엠프티/풀 비트(262)는 논리 1 값으로 전환될 수 있다. 탑 오브 스택 포인터(254) 및 바텀 오브 스택 포인터(256) 둘 모두가 동일한 엔트리를 포인팅하는 동안 그리고 랩핑 스택 비트(264)가 논리 0 값과 동일한 동안 팝 동작이 발생하는 경우 엠프티/풀 비트(262)는 논리 0 값으로 전환될 수 있다.
일반적으로, 스레드들은, 그 스레드들의 탑 엔트리 포인터와 그 스레드들의 바텀 엔트리 포인터에 의해 바운딩되는 공유 스택(105)의 엔트리들을 할당받거나 또는 공유 스택(105)의 엔트리들을 "소유"할 수 있다. 스레드는 이러한 "소유된" 엔트리들에 데이터를 기록할 수 있다. 이외에도, 스레드들은, 그 스레드들의 탑 오브 스택 포인터 및 그 스레드들의 바텀 오브 스택 포인터 사이의 엔트리들을 "사용"하도록 고려될 수 있다. 이와 같이, 공유 스택(105)의 엔트리들은 특정 스레드에 의해 소유될 수 있고, 특정 스레드에 의해 소유되어 사용될 수 있고, 또는 특정 스레드에 의해 소유되지도 사용되지도 않을 수 있다.
스레드(112)와 유사하게, 스레드(110)(즉, 스레드 1)는 탑 엔트리 포인터(238) 및 탑 오브 스택 포인터(240)를 포함할 수 있다. 스레드(110)는 바텀 오브 스택 포인터(242) 및 바텀 엔트리 포인터(244)를 더 포함할 수 있다. 스레드 활성 스테이터스 비트(246), 엠프티/풀 비트(248), 및 랩핑 스택 비트(250)는 또한 스레드(110) 내에 포함될 수 있다.
스레드(108)(즉, 스레드 0)는 탑 엔트리 포인터(224) 및 탑 오브 스택 포인터(226)를 포함할 수 있다. 스레드(108)는 바텀 오브 스택 포인터(228) 및 바텀 엔트리 포인터(230)를 더 포함할 수 있다. 스레드 활성 스테이터스 비트(232), 엠프티/풀 비트(234), 및 랩핑 스택 비트(236) 또한 스레드(108) 내에 포함될 수 있다.
공유 스택(105)은 명령들의 메모리 어드레스들을 저장하는 엔트리들(210, 212, 214, 216, 218, 220 및 222)을 포함할 수 있다. 엔트리들(210, 212, 214, 216, 218, 220 및 222)은 스레드들(108, 110 및 112)에 의해 공유되도록 구성될 수 있다. 단일 스레드 동작 동안, 스레드(112)는 활성이 될 수 있다(즉, 프로세스를 실행하기 시작할 수 있다). 탑 엔트리 포인터(252), 탑 오브 스택 포인터(254), 바텀 오브 스택 포인터(256), 및 바텀 엔트리 포인터(258)는, 점선들(266)로 나타낸 바와 같이, 엔트리(222)를 포인팅하도록 셋팅될 수 있다. 스레드(112)는 엔트리(222)를 소유하는 것으로 지칭될 수 있다(예를 들어, 스레드(112)는 데이터를 엔트리(222)에 기록할 수 있다).
엠프티/풀 비트(262) 및 랩핑 스택 비트(264)는 엠프티 상태(condition)를 나타내도록 셋팅될 수 있고(예를 들어, 논리 0 값), 스레드 활성 스테이터스 비트(260)는 활성 상태를 나타내도록 셋팅될 수 있다(예를 들어, 논리 1 값). 스레드(112)에서의 프로세스 실행에 의해 호들이 이루어지기 때문에, 어드레스가 공유 스택(105) 상에서, 탑 오브 스택 포인터(254)에 의해 나타내어지는 엔트리(222)로 푸시될 수 있다. 어드레스는 리턴 어드레스를 나타낼 수 있다.
스레드(112)에서의 프로세스 실행에 의해 후속하는 호가 이루어지는 경우, 다른 어드레스가 공유 스택(105) 상에서, 탑 오브 스택 포인터(254)에 의해 나타내어지는 엔트리(222) 위의 엔트리(220)로 푸시될 수 있다. 이 푸시는 탑 엔트리 포인터(252) 및 탑 오브 스택 포인터(254)를 동적으로 증분시켜 새롭게 기록된 엔트리(220)를 포인팅하게 할 수 있다. 이와 같이, 증분은 공유 스택(105)의 하나 또는 그 초과의 추가 엔트리들을 스레드(112)에 할당할 수 있다. 스레드(112)에서의 프로세스 실행이 리턴을 나타내는 경우, 리턴 예측 어드레스를 리트리브하기 위해 공유 스택(105)으로부터 팝 동작이 발생될 수 있다. 팝 동작은 스레드(112)의 탑 오브 스택 포인터(254)를 감소시킬 수 있지만, 탑 엔트리 포인터(252)는 감소하지 않을 수 있다.
부정확한 리턴 어드레스가 공유 스택(105)으로부터 팝핑됨으로써 분기 예측착오가 발생될 수 있다. 응답으로, 스택(105)에 저장되고 그 예측착오 스레드와 연관된 데이터 모두가 폐기될 수 있고 그 스레드를 위한 스택 구성이 재시작될 수 있다. 예를 들어, 스레드(112)가 예측착오된 경우, 스레드(112)를 위한 재구성은, 탑 오브 스택 포인터(254)를 바텀 오브 스택 포인터(256)와 동일하게 셋팅하고, 엠프티/풀 비트(262)의 상태가 엠프티 상태를 나타내도록 셋팅하고, 그리고 랩핑 스택 비트(264)가 랩핑 없음을 나타내도록 셋팅함으로써 개시될 수 있다. 엠프티/풀 비트(262)가 0 값과 동일한 동안 팝 요청들이 회피될 수 있는데, 이는 프로세싱 전력을 절약할 수 있다.
도 2는 하나의 스레드에 관한 동작들을 도시한다. 예를 들어, 스레드(112)는 리셋 상태에서 벗어나 활성이 될 수 있다. 스레드(112)의 스레드 포인터들은 처음에, 공유 스택(105)의 하나의 엔트리(예를 들어, 엔트리 (222))를 포인팅할 수 있다. 따라서, 스레드(112)는 리셋 상태로부터 벗어나 활성이 될 때 공유 스택(105)의 엔트리(222)에 그 자신을 "앵커링(anchored)"시키는 것으로 간주될 수 있다. 스레드(112)에 의해 실행되는 프로세스에 의해 호들이 이루어지기 때문에, 스레드 포인터들이 업데이트(예를 들어, 공유 스택(105)의 스레드(112)의 할당 부분을 "증가시킴")될 수 있는 반면, 공유 스택(105) 내에 저장된 어드레스들은 시프트되지 않을 수 있다. 공유 스택 내의 어드레스들을 시프트시키기 보다는 스레드 포인터들을 업데이트하는 것이 전력 소모, 하드웨어 수요들, 및 전체 복잡성을 감소시킬 수 있다.
도 3은, 프로세스를 실행하고 공유 스택(105)의 다수의 엔트리들(216, 218, 220 및 222)에 동적으로 액세스하는 활성 스레드(112)를 포함하는, 도 2에 도시된 것과는 상이한 프로세싱 상태의 시스템(200)의 블록도를 도시한다. 스레드들(108 및 110)은 비활성이다. 스레드(112)는 또한, 엔트리(222) 이외에도, 공유 스택(105)의 엔트리들(216, 218 및 220)을 할당받는다. 엔트리(272)는 사용되지 않을 수 있다.
탑 엔트리 포인터(252)는, 점선 270으로 나타내어진 바와 같이, 엔트리(216)를 포인팅할 수 있다. 점선 268로 나타내어진 바와 같이, 탑 오브 스택 포인터(254)는 엔트리(220)를 포인팅할 수 있다. 점선 266으로 나타내어진 바와 같이, 바텀 오브 스택 포인터(256) 및 바텀 엔트리 포인터(258) 둘 모두는 엔트리(222)를 포인팅한다. 이와 같이, 스레드(112)는, (탑 엔트리 포인터(252)로부터 논리적으로 포인팅하는) 선 270과 (바텀 엔트리 포인터(258)로부터 논리적으로 포인팅하는) 선 266에 의해 바운딩되는 바와 같이, 엔트리들(216, 218, 220 및 222)을 할당받거나, 또는 스레드(112)는 엔트리들(216, 218, 220 및 222)을 "소유"할 수 있다.
도 3은 공유 스택(105)으로부터 스레드(112)로의 엔트리들의 동적 할당을 도시한다. 이 할당은 공유 스택(105)에서 엔트리들을 시프트하는 대신 스레드 포인터들을 재배정(reassigning)함으로써 발생할 수 있는데, 이는 개선된 메모리 분배, 개선된 전력 효율, 및 감소된 하드웨어 수요들을 조장할 수 있다.
도 4는 시스템(200)의 특정 예시적 실시형태의 블록도이며, 여기서 스레드(110)(즉, 스레드 1)가 활성이 되고 공유 스택(105)의 미사용 엔트리(272)를 할당받고 그 미사용 엔트리(272) 내에 그 자신이 앵커링된다(anchored). 엔트리(272)는 엔트리들(210, 212, 214 및 274)의 제 1 그룹과 스레드(112)(즉, 스레드 2)에 의해 차지되는(claimed) 엔트리들(216, 218, 220 및 220)의 제 2 그룹 사이에 위치될 수 있다.
활성(예를 들어, 프로세스를 능동적으로 실행)이 될 때, 스레드(110)는 공유 스택(105)의 엔트리(272) 내에 그 자신을 앵커링시킬 수 있다. 스레드(110)는 엔트리(272) 내의 공유 스택(105)으로 데이터 엘리먼트를 푸시할 수 있다. 특정 실시형태에서, 엔트리(272)는 이전에, 다른 스레드에 대해 할당해제되었을 수 있거나, 또는 다른 스레드에 의해 차지되지 않았을 수 있다. 다른 특정 실시형태에서, 스레드를 앵커링하는 데에 사용되는 엔트리는 이전에 다른 스레드로 할당되었을 수 있다. 도 4의 점선(276)으로 나타내어진 바와 같이, 탑 엔트리 포인터(238), 탑 오브 스택 포인터(240), 바텀 오브 스택 포인터(242), 및 바텀 엔트리 포인터(244)는 엔트리(272)를 포인팅한다.
스레드(110)는 다른 엔트리를 차지하고 공유 스택(105)의 차지된 엔트리 쪽의(onto) 추가 데이터 엘리먼트를 엔트리(274)로 푸시할 수 있다.
도 4는 공유 스택(105)을 동적으로 액세싱하는 다수의 활성 스레드들을 도시한다. 공유 스택(105)의 엔트리들은 활성 스레드들의 스레드 포인터들을 변경함으로써 활성 스레드들 사이에서 동적으로 할당될 수 있다. 활성 스레드들은 그 스레드들의 현재 요구에 따라 공유 스택(105)의 엔트리들을 할당받을 수 있는데, 이는 효율적인 스택 사용을 용이하게 할 수 있다.
도 5를 참고하면, 도 4에 도시된 것과는 상이한 프로세싱 상태에서 공유 스택(105), 3개의 스레드들(108, 110 및 112)을 포함하는 시스템(200)의 특정 예시적 실시형태가 도시된다. 스레드(110) 및 스레드(112)는 활성이고 공유 스택(105)에 액세스하고 있다. 예를 들어, 스레드(110)는 추가적인 엔트리들을 차지하고 스레드(112)의 엔트리를 덮어쓰기할 것을 준비하고 있다.
스레드(112)는 (탑 엔트리 포인터(252)로부터 논리적으로 포인팅하는) 점선 270으로 나타내어지는 214로부터 (바텀 엔트리 포인터(258)로부터 논리적으로 포인팅하는) 점선 266으로 나타내어지는 엔트리(220)까지 공유 스택(105)의 엔트리들을 소유할 수 있다.
유사하게, 스레드(110)는 (탑 엔트리 포인터(238)로부터 논리적으로 포인팅하는 라인 276에 의해 나타내어지는) 엔트리(222)에 의해 바운딩된 공유 스택(105)의 엔트리들을 소유할 수 있고 스택(105)이 둥글게 말아져서 엔트리(210) 및 (바텀 엔트리 포인터(244)로부터 논리적으로 포인팅하는 라인 286에 의해 나타내어지는) 엔트리(212)를 포함한다. 스택 포인터(242)의 바텀이 탑 오브 스택 포인터(240) 위에 있기 때문에, 스레드(110)는 공유 스택(105) 내에서 둥글게 말아져 있는 것으로 지칭될 수 있다. 따라서, 스레드(110)는 엔트리들(210, 212 및 222)을 소유한다. 따라서, 스레드(110)에 의해 소유된 공유 스택(105)의 부분은 스레드(112)와 인접하고, 푸시에 응답하여 스레드(110)가 차지할 프리 엔트리들이 존재하지 않는다.
스레드(110)가 공유 스택(105)으로 푸시를 실시하고 탑 오브 스택 포인터(240)가 탑 엔트리 포인터(238)와 동일한 엔트리에서 포인팅하고 있는 경우, 데이터는 2개의 위치들 중 하나로 푸시될 수 있다. 예를 들어, 스레드(110)가 탑 오브 스택 포인터(240)와 탑 엔트리 포인터(238) 둘 모두를 증분시킬 수 있음으로써, 도 6에 도시된 바와 같이, 새롭게 푸시된 데이터를 저장하기 위해 새로운 엔트리와 더 많은 스택 공간을 차지한다. 대안으로, 스레드(110)는 (탑 엔트리 포인트(238)를 제자리에 둔 채로) 탑 오브 스택 포인터(240)를 둥글게 말고 스레드(110)의 바텀 엔트리 포인터(244)에 의해 포인팅된 엔트리에 데이터를 기록할 수 있다. 어느 프로세스가 선택되는지는, 탑 엔트리 포인터(238) 이후에 후속하는 엔트리가 이미 차지되었는지 여부 그리고 스레드(110)가 이미 공유 스택(105)의 그의 공정한 몫을 이용하고 있는지 여부에 의존할 수 있다.
탑 엔트리 포인터(238)에 의해 포인팅된, 엔트리(222) 위에 있는 엔트리(220)가 차지되어 있지 않은 경우, 스레드(110)는 탑 엔트리 포인터(238)를 업데이트함으로써 엔트리(220)를 차지할 수 있다. 스레드(110)는 추가로, 탑 오브 스택 포인터(240)가 동일한 엔트리(220)를 포인팅하도록 셋팅할 수 있다.
탑 엔트리 포인터(238)에 의해 포인팅된, 엔트리(222) 위에 있는 엔트리(220)가 다른 스레드에 의해 차지되고, 스레드(110)가 이미 적어도, 스택(105)의 그의 공정한 몫을 소유하는 경우, 후속하는 푸시는 스레드(110)가 추가적인 스택 엔트리(220)를 차지하게 허용하지 않을 수도 있다. 대신, 탑 오브 스택 포인터(240)는 탑 엔트리 포인터(238)부터 바텀 엔트리 포인터(244)로 둥글게 말아질 수 있다.
탑 엔트리 포인터(238)에 의해 포인팅된, 엔트리(222) 위의 엔트리(220)가 다른 스레드에 의해 차지되고, 스레드(110)가 공유 스택(105)의 그의 공정한 몫을 아직 소유하지 않은 경우, 다른 스레드(112)로부터 엔트리(220)를 차지하도록 푸시가 허용될 수 있다. 엔트리(220)는, 스레드(112)의 바텀 엔트리 포인터(258)를 업데이트하고 스레드(110)의 탑 엔트리 포인터(238)를 업데이트함으로써 차지될 수 있다. 도 6을 참고로 하여 설명된 바와 같이, 엔트리(220)의 "상실(loss)"을 반영하기 위해 스레드(112)의 포인터들도 또한 업데이트될 수 있다. 스레드(110)는, 공유 스택(105)의 그의 공정한 몫에 도달할 때까지 이러한 방식으로 엔트리들을 계속해서 차지할 수 있다.
도 5는 다수의 스레드들 간의 공유 스택 액세스를 도시한다. 도 5에 도시된 바와 같이, 스레드(112)가 공유 스택(105)의 그 자신의 부분 내에서 둥글게 말아지기 때문에(즉, 그의 탑 오브 스택 포인터(268)가 그의 바텀 오브 스택 포인터(280) 아래에 있음), 스레드(110)는 스레드(112)에 의해 사용된 스택 엔트리들의 바텀부터가 아닌 스레드(112)에 의해 사용된 스택 엔트리들의 중간부터 엔트리를 차지할 수 있다. 이는, 스레드(112)가 그의 스택의 바텀부터가 아니라 그의 스택의 중간에 위치된 스택 엔트리(220)를 상실하게 할 수 있다. 그 결과, 스레드(112)의 스택은 엔트리(218) 아래에 오류가 생길 수 있다. 따라서, 도 6에 도시된 바와 같이, 바텀 오브 스택 포인터(256)가 엔트리(218)로 이동될 수 있다. 이와 같이, 스레드들이, 충분한 엔트리들이 존재하는 한 스레드들의 요구에 따라 공유 스택(105)에 동적으로 액세스할 수 있다. 엔트리들이 부족하게 될 경우, 스레드들은 (예를 들어, 공정성 정책에 따라서) 엔트리들을 몰수하여 공정한 스택 사용을 달성할 수 있다.
도 5에 도시된 바와 같이, 스레드(112)는 엔트리들(214-220)을 "소유"할 수 있고 엔트리들(216-220) 및 엔트리들(214-274)을 "사용"할 수 있다. 따라서, 엔트리(220)가 스레드(110)에 의해 차지되는 경우, 엔트리(220)는 스레드(112)에 의해 "소유"되고 그리고 "사용"된다.
도 6을 참고하면, 도 5에 도시된 것과는 상이한 프로세싱 상태에서 공유 스택(105) 및 3개의 스레드들(108, 110 및 112)을 포함하는 시스템(200)의 다른 특정 예시적인 실시형태가 도시된다. 예를 들어, 스레드(110)는 스레드(112)의 엔트리를 차지하고 덮어쓰기한다.
스레드(112)는 (탑 엔트리 포인터(252)로부터 논리적으로 포인팅하는) 점선 270에 의해 바운딩된 214로부터 (바텀 엔트리 포인터(258)로부터 논리적으로 포인팅하는) 점선 280에 의해 바운딩된 엔트리(218)까지 공유 스택(105)의 엔트리들을 소유할 수 있다. 스레드(112)는 스레드(110)에 대해 엔트리(220)를 상실했을 수 있다. 이와 같이, 도 6에 도시된 특정 실시형태에서, 스레드(112)는 공유 스택(105)의 그의 "사용된" 부분의 중간부터 엔트리(220)를 상실할 수 있다. 스레드(112)의 바텀 오브 스택 포인터(256)는 새로운 바텀 엔트리(218)를 포인팅하기 위해 274를 포인팅하는 것으로 업데이트되었을 수 있다.
유사하게, 스레드(110)는 (탑 엔트리 포인터(238)로부터 논리적으로 포인팅하는 라인 276에 의해 나타내어지는) 엔트리(222)에 의해 바운딩된 공유 스택(105)의 엔트리들을 소유할 수 있고 스택(105)이 둥글게 말아져서 엔트리(210) 및 (바텀 엔트리 포인터(244)로부터 논리적으로 포인팅하는 라인 286에 의해 나타내어지는) 엔트리(212)를 포함한다. 이와 같이, 스레드(110)는 엔트리들(210, 212, 220 및 222)을 소유한다. 스레드(112)는 엔트리(220)를 스레드(110)로 상실했을 수 있다.
특정 실시형태에 따라서, 유효 엔트리(220)(예를 들어, 바텀 오브 스택 포인터(256) 및 탑 오브 스택 포인터(254) 사이에 위치된 엔트리)를 상실한 스레드(112)는 상실했던 엔트리(220) 보다 더 오래된 임의의 엔트리들을 무효화할 수 있다. 이를 위해, 스레드(112)가 그의 바텀 오브 스택 포인터(256)를, 새롭게 증분된 바텀 엔트리 포인터(258)와 동일한 엔트리를 향하여 포인팅하도록 셋팅할 수 있다.
도 6은, 다수의 스레드들이 공유 스택(105)에 액세스하는 것으로서, 그 액세스 동안 하나의 스레드가 다른 스레드가 소유한 엔트리를 차지하고 덮어쓰기할 수 있음을 도시한다. 스레드 포인터들을 변경함으로써 공유 스택(105) 내의 엔트리들의 이동 없이 엔트리가 차지될 수 있다. 공유 스택(105)은 스레드들의 현재 요구에 따라서 스레드들 사이에서 동적으로 할당될 수 있는데, 이는 효율적인 스택 사용을 용이하게 할 수 있다.
도 7은 프로세서의 다수의 스레드들에 의해 공유된 스택을 관리하는 방법(700)의 특정 예시적 실시형태의 흐름도를 도시한다. 본원에 설명된 바와 같이, 예시적인 방법(700)은 도 1의 시스템(100) 또는 도 2의 시스템(200)에 의해 실시될 수 있다.
공유 스택의 제 1 부분이 제 1 스레드로 할당될 수 있다(702). 예를 들어, 도 1의 공유 스택(105)의 제 1 부분이 제 1 스레드(108)로 할당될 수 있다. 추가적인 예시를 위해서, 제 1 스레드(108)는 공유 스택(105)의 추가적인 공간을 요구하는 프로세스를 실행할 수 있다. 제 1 스레드(108)의 포인터들(162)은 공유 스택(105)의 제 1 부분(116)(예를 들어, 추가 엔트리)을 포인팅하여 제 1 부분(116)의 제어를 획득할 수 있다.
공유 스택의 제 2 부분이 제 2 스레드로 할당될 수 있다(704). 예를 들어, 도 1의 공유 스택(105)의 제 2 부분(118)이 제 2 스레드(110)로 할당될 수 있다. 추가적인 예시를 위해서, 제 2 스레드(110)는 공유 스택(105)의 추가 공간을 요청하는 프로세스를 실행할 수 있다. 제 2 스레드(110)의 포인터들(164)은 공유 스택(105)의 제 2 부분(118)을 포인팅하여 제 2 부분(118)의 제어를 획득할 수 있다.
공유 스택의 제 3 부분이 제 3 스레드로 할당될 수 있다(706). 예를 들어, 도 1의 공유 스택(105)의 제 3 부분(120)이 제 3 스레드(112)로 할당될 수 있다. 추가적인 예시를 위해서, 제 3 스레드(112)는 공유 스택(105)의 추가 공간을 요청하는 프로세스를 실행할 수 있다. 제 3 스레드(112)의 포인터들(166)은 공유 스택(105)의 제 3 부분(120)을 포인팅하여 제 3 부분(120)의 제어를 획득할 수 있다.
공유 스택은 리턴 어드레스를 예측하는 데에 사용될 수 있다(708). 예를 들어, 도 1의 공유 스택(105)은 리턴 데이터(134)에 포함되는 함수 리턴 어드레스를 예측하는 데에 사용될 수 있다.
도 7의 방법(700)은 공유 스택의 임의의 사용 이전에 공유 스택의 부분들을 다수의 스레드들로 할당하는 것을 도시하지만, 이러한 순서(ordering)는 단지 예시의 목적이고 제한하는 것으로 간주되어서는 안 된다는 것을 주목해야 한다. 공유 스택의 부분을 할당받은 임의의 스레드는, 다른 스레드들이 공유 스택의 다른 부분들을 할당받는 시기와 무관하게, 그의 할당 부분을 사용하기 시작할 수 있다.
이와 같이, 도 7은 프로세서의 다수의 스레드들에 의해 공유된 스택을 관리하는 방법(700)을 도시한다. 특정 실시형태에 따라서, 공유 스택의 엔트리들은 스레드 요청들에 따라서 동적으로 할당될 수 있다. 이 동적 할당은, 스택 효율을 증가시키고, 다이 상에서 요구되는 공간을 더 작게 할 뿐만 아니라 성능을 개선시키는 것으로 변환되는 방식으로 분기 예측을 조장하게 할 수 있다.
도 8은 공유 스택에 대한 다중스레드 액세스를 인에이블하는 방법(800)의 특정 예시적 방법의 흐름도를 도시한다. 본원에 설명된 바와 같이, 예시적인 방법(800)이 도 1의 시스템(100) 또는 도 2의 시스템(200)에 의해 실시될 수 있다.
공유 스택은 메모리의 일 부분 내에서 형성될 수 있다(802). 예를 들어, 도 1의 공유 스택(105)이 메모리(104) 내에서 형성될 수 있다.
공유 스택의 제 1 부분 및 제 2 부분이 동적으로 할당될 수 있다(804). 예를 들어, 도 1의 공유 스택(105)의 제 1 부분(116)이 제 1 스레드(108)에 동적으로 할당될 수 있다. 추가적인 예시를 위해서, 제 1 스레드(108)는 공유 스택(105)의 추가 공간을 요청하는 프로세스를 실행할 수 있다. 제 1 스레드(108)의 포인터들(162)은 공유 스택(105)의 제 1 부분(116)(예를 들어, 추가 엔트리)을 포인팅하여 제 1 부분(116)의 제어를 획득할 수 있다. 유사하게, 도 1의 공유 스택(105)의 제 2 부분(118)이 제 2 스레드(110)에 할당될 수 있다. 추가적인 예시를 위해서, 제 2 스레드(110)는 공유 스택(105)의 추가 공간을 요청하는 프로세스를 실행할 수 있다. 제 2 스레드(110)의 포인터들(164)은 공유 스택(105)의 제 2 부분(118)을 포인팅하여 제 2 부분(118)의 제어를 획득할 수 있다.
제 1 부분 또는 제 2 부분, 또는 이 둘 모두의 사이즈가 조정될 수 있다(806). 예를 들어, 제 1 부분(116)의 사이즈는 제 1 스레드(108)의 요청에 따라 동적으로 조정될 수 있다. 제 1 스레드(108)의 포인터들(162)은 제 1 부분(116)의 엔트리들을 포인팅하여 제 1 부분(116)을 축소 또는 증가시켜 요청을 충족시킬 수 있다. 유사하게, 제 2 부분(118)의 사이즈는 제 2 스레드(110)의 요청에 따라 동적으로 조정될 수 있다. 제 2 스레드(110)의 포인터들(164)은 제 2 부분(118)의 엔트리들을 포인팅하여 제 2 부분(118)을 축소 또는 증가시켜 요청을 충족시킬 수 있다.
대안으로, 제 1 부분, 제 2 부분, 또는 이 둘 모두의 사이즈는 고정될 수 있다(808). 예를 들어, 도 1의 제 1 부분(116), 제 2 부분(118), 또는 이 둘 모두의 사이즈는 고정될 수 있다. 추가적인 예시를 위해서, 스레드들(108, 110, 112 및 114) 중 하나 또는 그 초과의 것에 대한 포인터들(162-168)(예를 들어, 탑 엔트리 포인터 및 바텀 엔트리 포인터)은 특정 고정 값들로 셋팅될 수 있다. 공유 스택(105)이 스레드들(108, 110, 112 및 114) 사이에서 동일하게 나눠지도록 고정 값들이 선택될 수 있다.
제 1 스레드로 할당된 제 1 부분의 사이즈는 공정성 정책에 따라 제한될 수 있다(810). 예를 들어, 제 1 스레드(108)에 할당된 제 1 부분(116)의 사이즈는 도 1의 공정성 정책(140)에 따라서 제한될 수 있다. 추가적인 예시를 위해서, 제 1 부분(116)의 사이즈는 공유 스택(105)의 사용량의 백분율 및 제 1 부분(116)과 연관된 최대 수의 엔트리들 중 적어도 하나에 기초하여 제한될 수 있다. 예를 들어, 공정성 정책(140)은, 제 1 스레드(108)가 공정한 몫의 임계치를 충족하거나 또는 초과하는 경우, 제 1 스레드(106)에 액세스 가능한 연관된 엔트리들의 수와 제 1 부분(116)의 사이즈를 제한할 수 있다. 공정한 몫의 임계치는, 공유 스택(105) 내 엔트리들의 총 수를 현재 활성 스레드들(108, 110, 112 및 114)의 수로 제산함으로써 결정될 수 있다.
제 1 스레드 및 제 2 스레드는 프로세서에 의해 실행될 수 있다(812). 예를 들어, 다중스레드 프로세스 코어들(106) 중 하나는 제 1 스레드(108) 및 제 2 스레드(110)를 실행할 수 있다.
제 1 스레드는 공유 스택의 제 1 부분의 엘리먼트에 대하여 리턴 어드레스를 푸시하거나 또는 팝하도록 허용될 수 있다. 예를 들어, 제 1 스레드(108)는 제 1 부분(116)의 데이터 엘리먼트들(124) 중 하나에서 리턴 어드레스의 팝(136) 또는 푸시(138)를 실시하도록 허용될 수 있다.
제 2 스레드는 공유 스택의 제 2 부분의 엘리먼트에 대하여 리턴 어드레스의 푸시 또는 팝을 실시하도록 허용될 수 있다(816). 예를 들어, 제 2 스레드(110)는 제 2 부분(118)의 제 2 데이터 엘리먼트(126)에서 리턴 어드레스의 팝(136) 또는 푸시(138)를 실시하도록 허용될 수 있다.
제 2 부분 내의 데이터 엘리먼트는 제 1 스레드를 이용하여 덮어쓰기될 수 있다(818). 예를 들어, 제 2 부분(118)의 제 2 데이터 엘리먼트(126)는 제 1 스레드(108)를 이용하여 덮어쓰기될 수 있다. 예시를 위해서 제 1 스레드(108)는, 제 2 부분(118)의 가장 오래된 엔트리가 덮어쓰여지게 하는 푸시(138)를 실행할 수 있다.
따라서, 도 8은 다수의 스레드들에 걸쳐 스택 액세스를 공유하는 방법(800)을 도시한다. 방법은 각각의 스레드의 현재 요청들에 따라 공유 스택에 대한 액세스를 동적으로 할당하는 단계를 포함한다. 공유 스택의 엔트리들은 스레드들에 속하는 포인터들을 조작함으로써 스레드들에 의해 획득되고 덮어쓰기될 수 있다. 공유 스택 내에 저장된 어드레스 엔트리들을 이동시키는 대신, 스레드 포인터들이 업데이트되기 때문에, 프로세싱 및 전력 소모가 감소될 수 있다. 또한, 등가의 성능을 달성하기 위해 필요한 더 적은 수의 스택 엔트리들은, 다이 상에서 요구되는 공간이 더 작아지도록 더욱 조장할 수 있다. 개선된 메모리 분배는 추가로, 스택 성능을 증가시킬 수 있다.
도 9를 참고하면, 공유 스택(964)의 다중스레드 액세스를 구현하는 논리를 포함하는 전자 디바이스의 특정 예시적 실시형태의 블록도가 도시되며 전반적으로 900으로 지정된다. 디바이스(900)는 메모리(932)에 결합되는 프로세서, 이를 테면 다중스레드 프로세서(910)를 포함한다. 다중스레드 프로세서(910)는 다수의 스레드들, 이를 테면 리턴 스택에 의해 액세스 가능한 공유 스택(964)을 포함한다. 예시적인 예로, 다중스레드 프로세서(910)는 도 1 내지 도 6 중 하나 또는 그 초과의 것에 도시된 시스템들을 포함하고 도 7 및 도 8의 방법들 중 하나 또는 그 초과의 것 또는 그의 임의의 조합을 실행할 수 있다. 도 9에 도시된 실시형태가 휴대용 전자 디바이스를 도시하지만, 본원에 개시된 바와 같은 공유 스택 부분들의 할당은 프로세서를 포함하는 임의의 디바이스에서 구현될 수 있다는 것을 주목해야 한다. 예를 들어, 디바이스(900), 또는 그의 몇몇 부분은 셋-톱 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 개인 휴대 정보 단말기(PDA), 고정 위치 데이터 유닛, 컴퓨터, 서버, 또는 리턴 어드레스 스택을 구비하는 적어도 하나의 프로세스를 갖는 임의의 다른 디바이스에 대신 통합될 수 있다.
메모리(932)는 명령들(950)을 저장하는 컴퓨터 판독가능 유형 매체일 수 있으며, 컴퓨터에 의한 명령들(950)의 실행은 공유 스택의 제 1 부분을 제 1 스레드로 할당시킨다. 예를 들어, 명령들(950)은 다중스레드 프로세서(910)에 의해 실행될 수 있으며, 이 명령은 공유 스택(964)의 제 1 부분이 제 1 스레드로 할당되게 한다. 공유 스택(964)의 제 2 부분이 제 2 스레드로 할당되게 하는 명령들(950)이 추가로 실행될 수 있다.
도 9는 또한, 다중스레드 프로세서(910)에 그리고 디스플레이(928)에 결합되는 디스플레이 제어기(926)를 도시한다. 코더/디코더(CODEC)(934)는 또한 다중스레드 프로세서(910)에 결합될 수 있다. 스피커(936) 및 마이크로폰(938)이 CODEC(934)에 결합될 수 있다.
도 9는 또한, 무선 제어기(940)가 다중스레드 프로세서(910)에 그리고 무선 안테나(942)에 결합될 수 있다는 것을 나타낸다. 특정 실시형태에서, 다중스레드 프로세서(910), 디스플레이 제어기(926), 메모리(932), CODEC(934), 및 무선 제어기(940)는 시스템-인-패키지 또는 시스템-온-칩 디바이스(922)에 포함된다. 특정 실시형태에서, 입력 디바이스(930) 및 전원(944)은 시스템-온-칩 디바이스(922)에 결합된다. 또한, 특정 실시형태에서, 도 9에 도시된 바와 같이, 디스플레이(928), 입력 디바이스(930), 스피커(936), 마이크로폰(938), 무선 안테나(942), 및 전원(944)은 시스템-온-칩 디바이스(944) 외부에 있다. 그러나, 디스플레이(928), 입력 디바이스(930), 스피커(936), 마이크로폰(938), 무선 안테나(942), 및 전원(944) 각각은 시스템-온-칩 디바이스(922)의 컴포넌트, 이를 테면 인터페이스 또는 제어기에 결합될 수 있다.
당업자는, 여기에 개시된 실시형태들과 관련하여 설명된 다양한 예시적인 논리 블록들, 구성들, 모듈들, 회로들, 및 알고리즘들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 조합들로서 구현될 수 있음을 추가로 인식할 것이다. 다양한 예시적인 컴포넌트들, 블록들, 구성들, 모듈들, 회로들, 및 알고리즘들은 그들의 기능의 관점들에서 일반적으로 상술되었다. 그러한 기능이 하드웨어로서 구현될지 또는 소프트웨어로서 구현될지는 전체 시스템에 부과된 특정한 애플리케이션 및 설계 제약들에 의존한다. 당업자들은 각각의 특정한 애플리케이션에 대해 다양한 방식들로 설명된 기능을 구현할 수 있지만, 그러한 구현 결정들이 본 개시물의 범위를 벗어나게 하는 것으로서 해석되지는 않아야 한다.
여기에 기재된 실시형태들과 관련하여 설명된 방법 또는 알고리즘의 포인터들은 직접 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 조합으로 구현될 수 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM), 플래시 메모리, 판독-전용 메모리(ROM), 프로그래밍가능 판독-전용 메모리(PROM), 소거가능한 프로그래밍가능 판독-전용 메모리(EPROM), 전기적으로 소거가능한 프로그래밍가능 판독-전용 메모리(EEPROM), 레지스터들, 하드 디스크, 착탈형 디스크, 컴팩트 디스크 판독-전용 메모리(CD-ROM), 또는 당업계에 알려진 다른 형태의 저장 매체에 상주할 수 있다. 예시적인 저장 매체는 프로세서에 연결되어, 프로세서가 저장 매체로부터 정보를 판독할 수 있고 저장 매체에 정보를 기입할 수 있게 한다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 주문형 집적회로(ASIC)에 상주할 수 있다. ASIC은 컴퓨팅 디바이스 또는 사용자 단말에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말 내의 별개의 컴포넌트들로서 상주할 수 있다.
기재된 실시형태들의 이전 설명은 당업자가 개시된 실시형태들을 실시 또는 사용할 수 있도록 제공된다. 이들 실시형태들에 대한 다양한 변형들은 당업자들에게는 용이하게 명백할 것이며, 여기에 정의된 원리들은 본 개시물의 범위를 벗어나지 않고 다른 실시형태들에 적용될 수 있다. 따라서, 본 개시물은 여기에 설명된 실시형태들로 제한되도록 의도되는 것이 아니라, 다음의 청구항들에 의해 정의된 바와 같은 원리들 및 신규한 특성들에 가능한 부합하는 최광의 범위를 따르게 된다.
Claims (29)
- 장치로서,
엔트리들을 포함하는 공유 스택; 및
상기 공유 스택의 제 1 부분을 제 1 스레드로 선택적으로 할당하고 그리고 상기 공유 스택의 제 2 부분을 제 2 스레드로 선택적으로 할당하고, 그리고 상기 제 1 스레드로 하여금, 상기 제 1 부분 및 상기 제 2 부분의 사이즈 조정(resize) 전에 상기 제 2 부분 내에 있었던 엔트리를 차지(claim)하게 하도록 상기 제 1 부분 및 상기 제 2 부분을 동적으로 사이즈 조정하도록 동작가능한 제어기를 포함하고,
상기 사이즈 조정하는 것은 상기 제 1 스레드에 의한 상기 제 1 부분의 사용량, 상기 제 2 스레드에 의한 상기 제 2 부분의 사용량, 그리고 공정성 정책(fairness policy)에 기초하는, 장치. - 제 1 항에 있어서,
상기 제 1 부분은 상기 제 2 부분과 인접하지 않은, 장치. - 제 1 항에 있어서,
상기 제 1 부분은 상기 제 2 부분과 인접하는, 장치. - 제 1 항에 있어서,
상기 공유 스택은 하드웨어 스택 및 랜덤 액세스 메모리(RAM)로 이루어지는 그룹으로부터 선택되는, 장치. - 제 1 항에 있어서,
상기 공유 스택과 연관된 스택 동작 요청들을 생성하도록 구성된 다중스레드 프로세서 코어를 포함하는 프로세서를 더 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는 스택 동작 요청에 응답하여 작동되는, 장치. - 제 6 항에 있어서,
상기 스택 동작 요청은 푸시(push) 및 팝(pop) 중 적어도 하나를 포함하는, 장치. - 제 6 항에 있어서,
상기 스택 동작 요청은 함수 리턴 어드레스를 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는 상기 제 1 스레드 및 상기 제 2 스레드의 각각을 포인터들의 각각의 세트와 연관시키고, 그리고 상기 제어기는, 상기 제 1 스레드로 하여금 상기 사이즈 조정 전에 상기 제 2 부분 내에 있었던 엔트리를 차지하게 하도록 상기 포인터들의 각각의 세트들을 업데이트함으로써 상기 제 1 부분 및 상기 제 2 부분의 사이즈를 조정하는, 장치. - 제 1 항에 있어서,
상기 제 1 부분 및 상기 제 2 부분은 상기 공정성 정책에 기초하여 동적으로 할당되는, 장치. - 제 1 항에 있어서,
상기 제어기는 상기 제 1 스레드 및 상기 제 2 스레드의 각각에 대하여,
각각의 스레드가 기록하도록 허용되는 상기 공유 스택의 바텀-모스트(bottom-most) 엔트리를 포인팅하도록 구성되는 바텀 엔트리 포인터;
상기 각각의 스레드가 기록하도록 허용되는 상기 공유 스택의 탑-모스트(top-most) 엔트리를 포인팅하도록 구성되는 탑 엔트리 포인터;
상기 각각의 스레드와 연관된 상기 공유 스택의 가장 최근에 기록된 엔트리를 포인팅하도록 구성되는 탑 오브 스택(top of stack) 포인터; 및
상기 각각의 스레드와 연관된 상기 공유 스택의 가장 오래된 유효 엔트리를 포인팅하도록 구성되는 바텀 오브 스택(bottom of stack) 포인터를 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는, 상기 제 1 스레드 및 상기 제 2 스레드의 각각에 대하여, 각각의 스레드가 프로세스를 실행하고 있는지 여부를 나타내도록 구성된 스레드 활성 스테이터스 비트를 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는, 상기 제 1 스레드 및 상기 제 2 스레드의 각각에 대하여, 각각의 스레드와 연관된 상기 공유 스택의 임의의 엔트리가 사용되는지 여부를 나타내도록 구성되는 엠프티(empty) 비트를 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는, 상기 제 1 스레드 및 상기 제 2 스레드의 각각에 대하여, 각각의 스레드가 상기 공유 스택 내에서 랩핑되었는지 여부를 나타내도록 구성되는 랩핑 스택 비트(wrapped stack bit)를 포함하는, 장치. - 제 1 항에 있어서,
상기 제어기는 함수 리턴 어드레스를 예측하도록 구성되고, 제 1 명령은 리턴 어드레스를 결정하고, 그리고 공유 스택 미스(miss)는 제 2 명령들로 하여금 상기 함수 리턴 어드레스를 결정하도록 프롬프트하는, 장치. - 제 1 항에 있어서,
상기 제어기 및 메모리 중 적어도 하나가 통합되는, 셋 톱 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 개인 휴대 정보 단말기(PDA), 고정 위치 데이터 유닛, 및 컴퓨터로 이루어지는 그룹으로부터 선택된 디바이스를 더 포함하는, 장치. - 프로세서의 다수의 스레드들에 의해 공유된 스택을 관리하는 방법으로서,
공유 스택은 엔트리들을 포함하고, 상기 방법은,
상기 공유 스택의 제 1 부분을 제 1 스레드로 할당하는 단계;
상기 공유 스택의 제 2 부분을 제 2 스레드로 할당하는 단계; 및
상기 제 1 스레드로 하여금, 상기 제 1 부분 및 상기 제 2 부분의 사이즈 조정 전에 상기 제 2 부분 내에 있었던 엔트리를 차지하게 하도록 상기 제 1 부분 및 상기 제 2 부분을 동적으로 사이즈 조정하는 단계를 포함하고,
상기 사이즈 조정하는 단계는 상기 제 1 스레드에 의한 상기 제 1 부분의 사용량, 상기 제 2 스레드에 의한 상기 제 2 부분의 사용량, 그리고 공정성 정책에 기초하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 제 1 스레드 및 상기 제 2 스레드의 각각을 포인터들의 각각의 세트와 연관시키는 단계를 더 포함하고,
상기 제 1 부분 및 상기 제 2 부분을 동적으로 사이즈 조정하는 단계는 상기 포인터들의 각각의 세트들을 업데이트하는 단계를 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 제 1 스레드로 하여금, 상기 공유 스택의 상기 제 1 부분의 엘리먼트에 대하여 리턴 어드레스를 푸시하는 것 및 팝하는 것 중 적어도 하나를 하게 하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 19 항에 있어서,
상기 제 2 스레드로 하여금, 상기 공유 스택의 상기 제 2 부분의 엘리먼트에 대하여 리턴 어드레스를 푸시하는 것 및 팝하는 것 중 적어도 하나를 하게 하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 공유 스택을 메모리의 일 부분 내에 형성하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
리턴 어드레스를 예측하기 위해 상기 공유 스택을 이용하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 제 1 부분 및 상기 제 2 부분을 동적으로 할당하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 제 1 부분 및 상기 제 2 부분 중 적어도 하나의 사이즈를 조정하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 공유 스택의 상이한 부분들을 상기 다수의 스레드들의 각각의 상이한 스레드들에 할당하는 단계; 및
상기 공유 스택의 할당된 상이한 부분들 중 적어도 하나의 사이즈를 고정하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 17 항에 있어서,
상기 제 1 스레드로 할당되는 상기 제 1 부분의 사이즈를 공정성 정책에 따라 제한하는 단계를 더 포함하는, 스택을 관리하는 방법. - 제 26 항에 있어서,
상기 제 1 부분의 사이즈를 상기 공정성 정책에 따라 제한하는 단계는, 상기 제 1 스레드에 의해 상기 공유 스택의 사용량의 백분율 및 상기 제 1 스레드와 연관되는 최대 엔트리들의 수 중 적어도 하나에 기초하여 상기 제 1 부분의 상기 사이즈를 제한하는 단계를 포함하는, 스택을 관리하는 방법. - 프로세서에 의해 실행되는 경우,
상기 프로세서로 하여금 제 17 항 내지 제 27 항 중 어느 한 항에 기재된 방법을 실시하게 하는, 명령들을 포함하는 컴퓨터 판독가능 매체. - 제 28 항에 있어서,
상기 명령들은, 셋 톱 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 개인 휴대 정보 단말기(PDA), 고정 위치 데이터 유닛, 및 컴퓨터로 이루어지는 그룹으로부터 선택된 디바이스에 통합되는 프로세서에 의해 실행가능한, 컴퓨터 판독가능 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/837,572 | 2010-07-16 | ||
US12/837,572 US20120017214A1 (en) | 2010-07-16 | 2010-07-16 | System and method to allocate portions of a shared stack |
PCT/US2011/044092 WO2012009587A1 (en) | 2010-07-16 | 2011-07-15 | System and method to allocate portions of a shared stack |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130069727A KR20130069727A (ko) | 2013-06-26 |
KR101378390B1 true KR101378390B1 (ko) | 2014-03-24 |
Family
ID=44583742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137003867A KR101378390B1 (ko) | 2010-07-16 | 2011-07-15 | 공유 스택의 부분들을 할당하기 위한 시스템 및 방법 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20120017214A1 (ko) |
EP (1) | EP2593861B1 (ko) |
JP (1) | JP5841142B2 (ko) |
KR (1) | KR101378390B1 (ko) |
CN (1) | CN103003791B (ko) |
WO (1) | WO2012009587A1 (ko) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9213551B2 (en) * | 2011-03-11 | 2015-12-15 | Oracle International Corporation | Return address prediction in multithreaded processors |
US9354886B2 (en) | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9405544B2 (en) * | 2013-05-14 | 2016-08-02 | Apple Inc. | Next fetch predictor return address stack |
CN104424032A (zh) * | 2013-08-29 | 2015-03-18 | 华为技术有限公司 | 多线程处理器中分支预测资源的调度方法、设备和系统 |
CN105094750B (zh) * | 2014-04-25 | 2018-08-21 | 华为技术有限公司 | 一种多线程处理器的返回地址预测方法和装置 |
CN104572448A (zh) * | 2014-12-23 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种线程堆栈的使用情况的实现方法和装置 |
US10108423B2 (en) * | 2015-03-25 | 2018-10-23 | International Business Machines Corporation | History buffer with single snoop tag for multiple-field registers |
US9442674B1 (en) | 2015-11-20 | 2016-09-13 | International Business Machines Corporation | Using a plurality of sub-buffers and a free segment list to allocate segments to a plurality of threads to use for writing data |
US9571578B1 (en) | 2015-11-20 | 2017-02-14 | International Business Machines Corporation | Utilization based multi-buffer self-calibrated dynamic adjustment management |
US9852075B2 (en) | 2015-11-20 | 2017-12-26 | International Business Machines Corporation | Allocate a segment of a buffer to each of a plurality of threads to use for writing data |
US9483410B1 (en) | 2015-11-20 | 2016-11-01 | International Business Machines Corporation | Utilization based multi-buffer dynamic adjustment management |
US10747539B1 (en) | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
US10649786B2 (en) | 2016-12-01 | 2020-05-12 | Cisco Technology, Inc. | Reduced stack usage in a multithreaded processor |
US10099103B2 (en) | 2017-01-17 | 2018-10-16 | Acushnet Company | Golf club having damping treatments for improved impact acoustics and ball speed |
CN107316132A (zh) * | 2017-06-09 | 2017-11-03 | 浪潮金融信息技术有限公司 | 流程控制方法及装置、计算机可读存储介质、终端 |
CN112055853B (zh) * | 2018-03-31 | 2024-04-09 | 美光科技公司 | 用于多线程自调度可重新配置计算架构的电路及系统 |
US20230095814A1 (en) * | 2021-09-27 | 2023-03-30 | Rubrik, Inc. | Server group fetch in database backup |
US11748207B2 (en) | 2021-09-27 | 2023-09-05 | Rubrik, Inc. | Scalable group backup in relational databases |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050066305A1 (en) | 2003-09-22 | 2005-03-24 | Lisanke Robert John | Method and machine for efficient simulation of digital hardware within a software development environment |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6386035A (ja) * | 1986-09-30 | 1988-04-16 | Ricoh Co Ltd | スタツクのプ−ル管理方式 |
JP2001043093A (ja) * | 1999-07-30 | 2001-02-16 | Kenji Kobayashi | スタックを共用するタスク・コンテキスト・スイッチ |
JP2003271448A (ja) * | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
US20040103248A1 (en) * | 2002-10-08 | 2004-05-27 | Hass David T. | Advanced telecommunications processor |
US8037224B2 (en) * | 2002-10-08 | 2011-10-11 | Netlogic Microsystems, Inc. | Delegating network processor operations to star topology serial bus interfaces |
US20060095719A1 (en) * | 2004-09-17 | 2006-05-04 | Chuei-Liang Tsai | Microcontroller having partial-twin structure |
US8230423B2 (en) * | 2005-04-07 | 2012-07-24 | International Business Machines Corporation | Multithreaded processor architecture with operational latency hiding |
CN101176061A (zh) * | 2005-04-22 | 2008-05-07 | Nxp股份有限公司 | 数字信号处理器上多任务的实现 |
US7769962B2 (en) * | 2005-12-12 | 2010-08-03 | Jeda Technologies, Inc. | System and method for thread creation and memory management in an object-oriented programming environment |
US20070282928A1 (en) * | 2006-06-06 | 2007-12-06 | Guofang Jiao | Processor core stack extension |
JP4770602B2 (ja) * | 2006-06-23 | 2011-09-14 | 株式会社デンソー | 電子機器 |
WO2008155807A1 (ja) * | 2007-06-20 | 2008-12-24 | Fujitsu Limited | 情報処理装置と負荷調停制御方法 |
JP2009251681A (ja) * | 2008-04-01 | 2009-10-29 | Canon Inc | スタック領域の拡張方法及びプログラム |
-
2010
- 2010-07-16 US US12/837,572 patent/US20120017214A1/en not_active Abandoned
-
2011
- 2011-07-15 KR KR1020137003867A patent/KR101378390B1/ko not_active IP Right Cessation
- 2011-07-15 JP JP2013519842A patent/JP5841142B2/ja not_active Expired - Fee Related
- 2011-07-15 WO PCT/US2011/044092 patent/WO2012009587A1/en active Application Filing
- 2011-07-15 CN CN201180034701.1A patent/CN103003791B/zh not_active Expired - Fee Related
- 2011-07-15 EP EP11735953.9A patent/EP2593861B1/en not_active Not-in-force
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050066305A1 (en) | 2003-09-22 | 2005-03-24 | Lisanke Robert John | Method and machine for efficient simulation of digital hardware within a software development environment |
Also Published As
Publication number | Publication date |
---|---|
CN103003791A (zh) | 2013-03-27 |
KR20130069727A (ko) | 2013-06-26 |
EP2593861A1 (en) | 2013-05-22 |
JP5841142B2 (ja) | 2016-01-13 |
EP2593861B1 (en) | 2018-05-02 |
WO2012009587A1 (en) | 2012-01-19 |
CN103003791B (zh) | 2016-04-20 |
JP2013534681A (ja) | 2013-09-05 |
US20120017214A1 (en) | 2012-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101378390B1 (ko) | 공유 스택의 부분들을 할당하기 위한 시스템 및 방법 | |
US7904704B2 (en) | Instruction dispatching method and apparatus | |
US7949855B1 (en) | Scheduler in multi-threaded processor prioritizing instructions passing qualification rule | |
US10241797B2 (en) | Replay reduction by wakeup suppression using early miss indication | |
US7739473B1 (en) | Off-chip memory allocation for a unified shader | |
US8850168B2 (en) | Processor apparatus and multithread processor apparatus | |
US7533236B1 (en) | Off-chip out of order memory allocation for a unified shader | |
US6931497B2 (en) | Shared memory management utilizing a free list of buffer indices | |
US20170371654A1 (en) | System and method for using virtual vector register files | |
US20210019185A1 (en) | Compute task state encapsulation | |
US10019283B2 (en) | Predicting a context portion to move between a context buffer and registers based on context portions previously used by at least one other thread | |
US9043806B2 (en) | Information processing device and task switching method | |
KR100959712B1 (ko) | 멀티프로세서 시스템에서 메모리를 공유하기 위한 방법 및장치 | |
JP2001075866A (ja) | 記憶装置を動作する方法および記憶装置 | |
CN114116533B (zh) | 利用共享存储器存储数据的方法 | |
CN115525343A (zh) | 一种并行译码的方法、处理器、芯片及电子设备 | |
CN114610494A (zh) | 资源分配方法、电子设备及计算机可读存储介质 | |
US11144322B2 (en) | Code and data sharing among multiple independent processors | |
US11176039B2 (en) | Cache and method for managing cache | |
US20240273667A1 (en) | Geometry Kick Distribution in Graphics Processor | |
US20240272961A1 (en) | Logical Slot to Distributed Hardware Slot Scheduling for Graphics Work | |
CN118035131A (zh) | 数据预取方法及装置、处理器和计算机可读存储介质 | |
GB2546577A (en) | A method for allocating memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20161229 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20171228 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |