KR101200477B1 - 프로세서 코어 스택 익스텐션 - Google Patents
프로세서 코어 스택 익스텐션 Download PDFInfo
- Publication number
- KR101200477B1 KR101200477B1 KR1020107024600A KR20107024600A KR101200477B1 KR 101200477 B1 KR101200477 B1 KR 101200477B1 KR 1020107024600 A KR1020107024600 A KR 1020107024600A KR 20107024600 A KR20107024600 A KR 20107024600A KR 101200477 B1 KR101200477 B1 KR 101200477B1
- Authority
- KR
- South Korea
- Prior art keywords
- stack
- extension
- logical
- entries
- processor
- Prior art date
Links
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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/10—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
- G06F5/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
- G06F5/14—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
Abstract
일반적으로, 본 발명은 스택 오버플로우를 제어하는 기술에 관한 것이다. 상기 설명된 기술은 공통 캐시의 일부 또는 스택 익스텐션으로서 상기 프로세서 코어 외부에 위치한 메모리를 이용한다. 프로세서 코어는 프로세서 코어 내의 스택을 모니터링하고 프로세서 코어 스택이 엔트리들의 최소 값을 초과할 때 상기 프로세서 코어 외부의 스택 익스텐션으로 스택의 콘텐츠를 이동시킨다. 프로세서 코어가 프로세서 코어 내의 스택이 엔트리들의 최소 수에 미달한다고 결정할 경우, 프로세서 코어는 스택 익스텐션에 유지된 콘텐츠의 적어도 일부를 프로세서 코어 내의 스택으로 이동시킨다. 상기 기술은 프로세서 코어 외부의 스택 익스텐션들을 이용함으로써 프로세서 코어 내에서 실행하는 스레드들의 기능 불량 및 충돌을 방지한다.
Description
본 발명은 프로세서의 스택 데이터 구조를 유지하는 것에 관한 것이다.
통상의 프로세서들은 다수의 제어 명령들을 포함하는 스택 데이터 구조("스택")를 유지한다. 스택은 통상적으로 프로세서의 코어 내에 위치된다. 프로세서 코어 내에서 동작하는 스레드들은 스택에 대해 두 개의 기본 동작을 실행할 수도 잇다. 제어 유닛은 제어 명령들을 스택으로 "푸시"하거나 스택의 제어 명령을 "팝(pop)"할 수도 있다.
푸시 동작은 제어 명령을 스택의 최상위에 부가하여, 이전의 제어 명령들이 스택 아래로 푸시되게 한다. 팝(pop) 동작은 스택의 현재 최상위 제어 명령을 제거 및 리턴시켜서, 이전의 제어 명령들이 후입 선출(LIFO) 방식에 따라 스택 프로세서 코어 동작들 위로 한 자리 이동하게 한다. 따라서, 프로세서 코어의 스택은 후입선출(LIFO) 방식에 따라 동작한다.
프로세서 코어 내의 메모리의 제한된 크기로 인해, 스택은 상당히 작다. 스택의 작은 크기는 사용될 수 있는 함유된 제어 명령들의 수를 제한한다. 스택으로 너무 많은 제어 명령들을 푸싱하는 것은 스택 오버플로우를 초래하는데, 이는 하나 이상의 스레드가 기능 불량을 일으키거나 및 충돌하게 할 수 있다.
일반적으로, 본 발명은 스택 오버플로우를 제어하는 기술에 관한 것이다. 개시된 기술들은 스택 익스텐션으로서 프로세서 코어 외부에 위치된 공통 캐시 또는 메모리의 일부를 사용한다. 프로세서 코어는 프로세서 코어의 메모리 내에 스택을 유지한다. 프로세서 코어는 프로세서 코어 스택이 임계치 크기, 예를 들어, 엔트리들의 임계치 번호를 초과할 때 프로세서의 외부에 존재하는 스택 익스텐션으로 스택 콘텐츠들의 적어도 일부를 이동시킨다. 예를 들어, 프로세서 코어는 코어 스택이 채워지게 되면 스택 익스텐션으로 스택의 콘텐츠들의 적어도 일부를 이동시킬 수도 있다. 스택 익스텐션은 캐시 내에 또는 프로세서 코어 외부의 다른 메모리에 존재할 수 있으며, 프로세서 코어 내의 이용가능한 제한된 스택 크기를 보충한다.
프로세서 코어는 또한 프로세서 코어 내의 스택이 임계치 크기, 예를 들어, 엔트리들의 임계 번호 이하일 때를 결정한다. 예를 들어, 엔트리들의 임계 번호는 0일 수도 있다. 이러한 경우, 스택이 비어지게 되면, 프로세서 코어는 스택 익스텐션에 유지된 콘텐츠의 적어도 일부를 다시 프로세서 코어 내의 스택으로 이동시킨다. 다시 말해, 프로세서 코어는 프로세서 코어 내의 스택을 프로세서 코어 외부의 스택 익스텐션의 콘텐츠로 다시 채운다. 따라서, 스택 콘텐츠는 프로세서 코어와 공통 캐시, 또는 다른 메모리 사이에서 교환될 수 있어서 스택의 크기가 확장 및 축소되게 한다. 이러한 방식으로, 본 발명의 기술들은 프로세서 코어 외부의 스택 익스텐션을 이용함으로써 프로세서 코어 내에서 동작하는 스레드의 기능 불량 또는 충돌을 방지한다.
일 실시예에서, 본 발명은 프로세서의 코어 내의 스택의 콘텐츠가 임계 크기를 초과하는 지를 결정하는 단계, 및 스택의 콘텐츠들이 임계 크기를 초과할 때 프로세서의 코어 외부의 스택 익스텐션으로 스택의 콘텐츠들의 적어도 일부를 전달하는 단계를 포함하는 방법을 제공한다.
다른 실시예에서, 본 발명은 프로세서의 동작을 제어하기 위한 제어 유닛을 포함하는 프로세서 코어, 및 프로세서 코어 내에 스택을 저장하는 제1 메모리를 갖는 프로세서, 및 프로세서 코어 외부에 스택 익스텐션을 저장하는 제2 메모리를 포함하는 장치를 제공하는데, 여기서 제어 유닛은 스택의 콘텐츠들이 임계 크기를 초과할 때 스택의 콘텐츠들의 적어도 일부를 스택 익스텐션으로 이동시킨다.
본 발명은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 소정 결합을 이용하여 구현될 수도 있다. 만일 소프트웨어에서 구현될 경우, 본 발명은 프로세서에 의해 실행될 때, 하나 이상의 개시된 기술들을 실행하는 명령들을 포함하는 컴퓨터 판독 가능 매체 상에서 실행될 수도 있다. 만일 하드웨어에서 구현될 경우, 본 발명은 하나 이상의 프로세서, 주문형 집적회로(ASIC), 필드 프로그램 가능한 게이트 어레이(FPGA)들, 및/또는 통합된 다른 등가물 또는 개별 논리 회로에서 실행될 수도 있다.
본 발명의 하나 이상의 상세예는 이하의 도면 및 상세한 설명에서 상술된다. 본 발명의 다른 특징, 목적 및 장점은 상세한 설명, 도면, 청구항으로부터 명백할 것이다.
도1은 개시된 기술에 따른 코어 스택 데이터 구조들을 관리하는 시스템을 설명하는 블록도이다.
도2는 스택 익스텐션으로서 프로세서 코어의 외부에 메모리를 이용함으로써 스택 오버플로우를 제어하는 다른 시스템의 예를 설명하는 블록도이다.
도3은 도1의 시스템을 설명한 블록도이다.
도4는 코어 스택 및 스택 익스텐션을 설명하는 블록도이다.
도5는 코어 스택의 스택 오버플로우를 방지하기 위해 공통 캐시의 스택 익스텐션으로 엔트리들을 푸싱하는 시스템의 동작 예를 설명하는 흐름도이다.
도6은 스택 익스텐션에 저장된 엔트리들을 검색하는 시스템의 동작 예를 설명한 흐름도이다.
도2는 스택 익스텐션으로서 프로세서 코어의 외부에 메모리를 이용함으로써 스택 오버플로우를 제어하는 다른 시스템의 예를 설명하는 블록도이다.
도3은 도1의 시스템을 설명한 블록도이다.
도4는 코어 스택 및 스택 익스텐션을 설명하는 블록도이다.
도5는 코어 스택의 스택 오버플로우를 방지하기 위해 공통 캐시의 스택 익스텐션으로 엔트리들을 푸싱하는 시스템의 동작 예를 설명하는 흐름도이다.
도6은 스택 익스텐션에 저장된 엔트리들을 검색하는 시스템의 동작 예를 설명한 흐름도이다.
도1은 설명된 기술에 따라 코어 스택 데이터 구조들을 관리하는 장치(8)를 설명하는 블록도이다. 장치(8)는 스택 익스텐션으로서 프로세서(10)의 프로세서 코어(12)의 외부에 위치된 메모리를 이용함으로써 스택 오버플로우를 제어한다. LOOP/ End Loop and CALL / Ret commands와 같은 함유된 동적 플로우 제어 명령들을 구현하기 위해, 예를 들어, 프로세서 코어(12) 내의 스택(14)은 필수적이다. 코어 스택(14)의 크기는 순환 중첩(recursive nesting)들의 수를 결정하여, 소정의 애플리케이션들에 대한 프로세서들의 용량을 제한한다. 장치(8)는 큰 수의 함유된 흐름 제어 명령들이 구현될 수 있는 환경을 경제적으로 제공한다. 스택 익스텐션을 사용함으로써, 장치(8)는 큰 수의 함유된 흐름 제어 명령들을 지원할 수도 있다.
도1의 예에서, 프로세서(10)는 단일 코어 프로세서를 포함한다. 따라서, 프로세서(10)는 단일 프로세서 코어(12)를 포함하는데, 이는 멀티미디어 애플리케이션 같은 소프트웨어 애플리케이션의 다수의 스레드를 실행하기 위한 환경을 제공한다. 다른 실시예에서, 프로세서(10)는 다수의 프로세서 코어들을 포함할 수도 있다. 프로세서 코어(12)는 예를 들어, 프로세서(10)의 동작을 제어하는 제어 유닛, 산술적 및 논리적 계산들을 실행하기 위한 산술 논리 유닛(ALU), 및 다수의 레지스터들 또는 캐시와 같은 소정 양의 메모리를 포함할 수도 있다. 프로세서(12)는 프로세서(10) 내에서 프로그램 가능 프로세싱 유닛을 형성한다. 고정된 함수 파이프라인들 또는 공동작용하는 유닛들과 같은 유닛 프로세서(10)의 다른 부분들은 프로세서 코어(12) 외부에 위치할 수도 있다. 또한, 프로세서(10)는 단일 프로세서 코어 또는 다수의 프로세서 코어들을 포함할 수도 있다.
프로세서 코어(12)는 프로세서 코어(12)의 로컬 메모리의 적어도 일부를 ("코어 스택(14)"으로 불리는) 코어 스택 데이터 구조(14)로서 제공한다. 코어 스택(14)은 고정된 크기이며, 애플리케이션의 스레드와 관련된 제어 명령 또는 데이터와 같은 스택 엔트리들을 포함한다. 코어 스택(14)은 예를 들어, 전체 16개의 엔트리, 32개의 엔트리, 64개의 엔트리, 또는 다수의 엔트리를 포함하도록 구성될 수도 있다. 일 실시예에서, 코어 스택(14)은 프로세서 코어(12)의 레벨1(L1) 캐시의 일부를 포함할 수도 있다. 따라서, 코어 스택(14)의 크기는 L1 캐시의 크기, 또는 제어 명령들을 저장하기 위해 전용되는 L1 캐시의 일부에 의해 한정될 수도 있다.
코어 스택(14)은 논리 스택들(15A-15N)("논리 스택들(15)")로 구성가능하다. 프로세서 코어(12)는 코어 스택(14)을 논리 스택들(15)로 동적으로 분할하여 현재 애플리케이션과 관련된 다수의 스레드를 수용한다. 각각의 논리 스택(15)은 프로세서(10) 상에서 현재 동작하는 애플리케이션의 스레드들 중 하나에 대응할 수도 있다. 논리 스택들(15)의 크기 및 번호는 현재 애플리케이션에서 동시에 작용하는 스레드의 수에 의존한다. 프로세서 코어(12)는 특정 애플리케이션과 관련된 현재스레드들의 수에 기초하여 각각의 애플리케이션에 대해 상이하게 코어 스택(14)을 분할할 수도 있다.
애플리케이션에 대해 작용하는 스레드들의 수가 클수록, 논리 스택들(15)의 수는 더 크고 논리 스택들(15)의 크기는 더 작다. 역으로, 애플리케이션에 대해 작용하는 스레드들의 수가 더 작을수록, 논리 스택들(15)의 수는 더 작고, 논리 스택들(15)의 크기는 더 크다. 애플리케이션과 관련된 스레드들의 수는 예를 들어, 특정 멀티미디어 애플리케이션의 리소스 요구에 따라 소프트웨어 드라이버에 의해 결정될 수도 있다. 이러한 구성 가능성은 전체 스택들의 사용을 최대화하고 상이한 애플리케이션 요구들에 대한 유연성을 제공한다. 논리 스택들(15)은 주어진 애플리케이션에 대해 통상적으로 동일한 크기를 각각 갖지만, 상기 크기는 상이한 애플리케이션에 대해서는 상이할 수도 있다.
프로세서 코어(12) 상에서 작용하는 스레드들은 제어 명령을 코어 스택(14)으로 푸시하며, 애플리케이션의 실행을 제어하기 위해 제어 명령들을 코어 스택에서 팝핑(pop)한다. 특히, 스레드들은 스레드와 관련된 논리 스택(15)으로 제어 명령들을 푸시하고, 상기 논리 스택에서 제어 명령들을 팝핑한다. 코어 스택(14) 및 논리 스택들(15)이 고정된 크기이기 때문에, 스레드가 스택들로 푸시할 수도 있는 제어 명령들의 수는 제한된다. 논리 스택들 중 하나로 너무 많은 제어 명령들을 푸싱하는 것은 스택 오버플로우를 초래하는데, 이는 하나 이상의 스레드들의 기능 불량 및 충돌을 초래할 수도 있다.
스택 오버플로우의 가능성을 감소시키기 위해, 장치(8)는 프로세서 코어(12)의 외부에 있는 메모리를 스택 익스텐션으로 사용한다. 장치(8)는 공통 캐시(16)의 일부, 외부 메모리(24) 또는 이둘 모두를 스택 익스텐션 또는 익스텐션들로 사용할 수도 있다. 공통 캐시(16)는 단일 프로세서 코어에 의해 사용되거나 다중 코어 프로세서 내의 다수의 프로세서 코어들에 의해 공유될 수도 있다.
공통 캐시(16)는 일반적으로 프로세서 코어(12)의 외부에 위치한 캐시 메모리를 의미한다. 공통 캐시(16)는 도1에 도시된 바와 같이, 프로세서(10) 내부에 위치할 수도 있으며, 인터넷 버스(20)를 통해 프로세서 코어(12)에 결합될 수도 있다. 공통 캐시(16)는 예를 들어, 프로세서(10)의 레벨2(L2) 캐시를 포함하는데 반해, 코어 스택(14)은 프로세서의 레벨1(L1) 캐시를 포함할 수도 있다. 택일적으로, 공통 캐시(16)는 프로세서(10)가 부착된 마더보드 또는 다른 특정 모듈과 같이 프로세서 외부에 위치할 수도 있다.
택일적으로, 외부 메모리(24)는 단독으로 또는 공통 캐시(16)에 부가하여 보조 스택 익스텐션으로 사용될 수도 있다. 메모리(24)는 프로세서(10)가 부착된 마더보드 또는 다른 특정 모듈과 같이 프로세서 외부에 위치된다. 프로세서(10)는 외부 버스(26)를 통해 메모리(24)에 결합된다. 외부 버스(26)는 다른 리소스들에 액세스하여 결국 추가의 하드웨어의 필요성을 줄이기 위해 프로세서(10)에 의해 사용된 동일한 데이터 버스일 수도 있다. 메모리(24)는 예를 들어, 범용 랜덤 액세스 메모리(RAM)를 포함할 수도 있다.
장치(8)는 공통 캐시(16) 내에 스택 익스텐션 데이터 구조들(18A-18N)(도1에서 "스택 익스텐션"으로 표시됨)을 포함한다. 각각의 스택 익스텐션들(18)은 논리 스택들(15) 중 하나에 대응하며, 결국 프로세서 코어(12)에서 동작하는 스레드들 중 하나와 관련된다. 스레드가 새로운 제어 명령을 논리 스택들 중 대응하는 하나(예를 들어, 논리 스택(15A))로 푸시하기를 원할 때, 그리고 논리 스택오버플로우트리들의 스레드 번호와 같이 임계 크기를 초과할 때, 예를 들어, 논리 스택(15A)이 채워져 있거나 거의 채워질 때, 프로세서 코어(12)는 대응하는 논리 스택(15A)의 콘텐츠들의 적어도 일부를 공통 캐시(16)로 이동시킨다. 특히, 프로세서 코어(12)는 논리 스택(15A)과 관련된 스택 익스텐션들(18) 중 하나(예를 들어, 스택 익스텐션(18A))와 관련된 스택 익스텐션들(18) 중 하나로 논리 스택(15A)의 콘텐츠들을 기록한다. 일 실시예에서, 프로세서 코어(12)는 공통 캐시(16)의 스택 익스텐션(18A)으로 전체 스택을 기록하기 위해 스왑-아웃(swap-out) 명령을 발생시킬 수도 있다. 만일 대응하는 논리 스택(15A)이 임계치 크기, 예를 들어, 엔트리들의 번호를 다시 초과하면, 프로세서 코어(12)는 논리 스택(15)의 더 많은 콘텐츠를 공통 캐시(16)에 위치한 대응하는 스택 익스텐션(18A)으로 이동시켜서, 이전에 전달된 제어 명령을 스택 익스텐션(18A)의 하위로 푸싱한다.
장치(8)는 예를 들어, 메모리(24) 내에 추가의 스택 익스텐션 데이터 구조들(22A-22N)(도1에 스택 익스텐션(22)으로 표시)을 포함할 수도 있다. 각각의 스택 익스텐션(22)은 프로세서 코어(12)에서 동작하는 스레드들 중 하나와 관련된다. 스택 익스텐션(22)은 공통 캐시(16)에서 스택 익스텐션들(18)의 오버플로우를 제어하기 위해 사용될 수도 있다. 공통 캐시(16)의 스택 익스텐션(18)이 채워지게 되면, 예를 들어, 장치(8)는 예를 들어, 논리 스택(15)의 콘텐츠들을 스택 익스텐션(18A)으로 이전시키는 것과 유사한 방식으로, 메모리(24)에서 스택 익스텐션(18)의 콘텐츠들 중 적어도 일부를 스택 익스텐션(22A)으로 스왑-아웃할 수도 있다. 이러한 방식에서, 장치(8)는 다중 레벨 스택 익스텐션, 즉, 공통 캐시(16) 내에 위치된 스택 익스텐션의 제1 레벨 부분 및 메모리(24) 내에 위치된 제2 레벨 부분을 이용하여 스택 오버플로우를 제어할 수도 있다. 택일적으로, 소정의 실시예에서, 장치(8)는 논리 스택(15A)의 오버플로우를 제어하기 위해 논리 스택(15A)의 콘텐츠들을 메모리(24)의 스택 익스텐션(22)으로 바로 이동시킬 수도 있다.
장치(8) 내의 소프트웨어 드라이버는 알려진 길이의 필요한 수의 스택 익스텐션(18)을 수용하기 위해 시작 어드레스 및 충분한 크기를 갖는 메모리 공간으로서 공통 캐시의 일부를 할당함으로써 스택 익스텐션들(18)과 같은 스택 익스텐션들을 형성할 수도 있다. 공통 캐시 메모리 저장소의 할당된 부분은 연속적이거나 비연속적일 수도 있다. 장치(8)는 할당된 공간을 코어 스택(14)을 논리 스택(15)으로 할당하는 것과 유사한 방식으로 할당된 공간을 다수의 동일한 크기의 스택 익스텐션들(18)로 분할할 수도 있다. 스택 익스텐션들(18)의 수와 크기는 프로세서(10) 내에서 실행하는 애플리케이션의 스레드들의 수, 및 결국 논리 스택들(15)의 수에 의존한다. 논리 스택(15)이 공통 캐시(16)로 스왑-아웃될 때, 장치(8)는 논리 스택의 콘텐츠를 스택의 시작 어드레스에서 시작하여 대응하는 스택 익스텐션(18)으로 기록한다. 시작 어드레스는 이하의 식에 따라 계산될 수도 있다. 시작 주소 = 바닥 주소 + 가상 카운터 * 스택 엔트리의 유닛 크기 (1)
여기서, 바닥 주소는 스택 익스텐션(18)의 바닥 엔트리의 주소를 의미하며, 스택 엔트리의 유닛 크기는 각각의 스택 엔트리의 예를 들어, 바이트 단위인 유닛 크기를 의미하며, 가상 카운터는 공통 캐시(16)의 스택 익스텐션으로 논리 스택(15)으로부터 스왑될 스택 엔트리들의 수를 따른다. 이러한 방식에서, 장치(8)는 스택 익스텐션들에 대한 공통 캐시 메모리 저장소의 일부를 빌린다. 각각의 스택 익스텐션에는 소프트웨어 드라이버에 의해 고정된 크기가 할당된다. 논리 스택(15)이 코어 스택(14)으로부터 스왑될 때, 장치(8)는 논리 스택의 스택 엔트리들을 시작 어드레스로부터 하나씩 가상 스택 공간으로 기록한다. 가상 스택이 채워질 때, 가상 스택의 콘텐츠들은 오프-칩 메모리(24)에서 추가의 스택 익스텐션(22)으로 스왑될 수도 있다.
공통 캐시(16)에서 코어 스택(14)과 스택 익스텐션(18) 사이에서 논리 스택(15)을 스왑하는 것에 대안으로, 캐시(16) 및 코어 스택(14)은 진정 캐시 모드(true cache mode)에서 하나의 연속적으로 어드레싱 가능한 스택으로 처리될 수도 있다. 특히, 코어 스택(14) 및 공통 캐시(16)에 미치는 결합된 스택의 크기가 증가함에 따라, 장치(8)는 공통 캐시(16)에 개별 스택 익스텐션 엔트리들을 자동으로 할당함으로써 스택 익스텐션들(18)을 형성할 수도 있다. 이러한 방식으로, 진정 스택 익스텐션은 장치(8)와 관련된 소프트웨어 드라이버에 의해 할당되어, 주어진 스택의 콘텐츠가 프로세서 코어(12) 내의 코어 스택(14)의 스택 엔트리들 및 공통 캐시(16)의 스택 엔트리들 모두에 미치는 연속한 스택으로서 액세스되게 한다. 다시 말해, 코어 스택(14) 및 공통 캐시(16)는 코어 스택(14) 및 공통 캐시(16) 사이의 논리 스택들(15)을 스왑함에 의해서라기 보다는 연속한 범위의 스택 엔트리들을 공통 스택으로서 저장하도록 사용된다.
이러한 택일적 캐시 방식의 경우, 프로세서 코어(12)는 각각의 스택 익스텐션(18)에 대한 가상 카운터 및 시작 어드레스를 유지한다. 장치(8)는 각각의 스택 엔트리를 L1 캐시 엔트리, 즉 코어 스택(14)의 일부로 맵핑한다. 이러한 방식에서, 스택 익스텐션(18)은 "가상" 스택 익스텐션으로 보여질 수 있다. 캐시 엔트리로 기록하거나 캐시 엔트리로부터 판독할 때, 만일 L1 캐시 히트가 있을 경우, 장치(8)는 코어 스택(14)의 캐시 엔트리로 기록하거나 그로부터 판독한다. 만일 캐시 미스가 존재하면, 장치(8)는 대신 공통 캐시(16), 예를 들어 L2 캐시에 관하여 판독 및 기록한다. 공통 캐시(16)는 동일한 메모리 어드레스를 L2 캐시의 일부로 맵핑한다. 만일 L2 캐시 히트가 존재하면, 장치(8)는 캐시 엔트리를 L2 캐시로 기록하고 L2 캐시로부터 캐시 엔트리를 판독한다. 만일 L1 또는 L2에서 캐시 히트가 없다면, 캐시 엔트리는 이용가능하다면, 동일한 메모리 어드레스에 따라, 오프-칩 메모리에 전용되거나 폐기된다. 캐시 엔트리로의 메모리 어드레스의 맵핑은 예를 들어, 인덱스로서 메모리 어드레스의 중간의 소정 비트들을 이용하고, 캐시 히트 또는 미스를 체크하기 위해 TAG로서 다른 비트들을 이용함으로써 행해질 수도 있다.
캐시-스왑 방식에 추가하여, 스레드가 논리 스택(15A)에서 제어 명령들을 팝핑할 필요가 있을 경우, 스레드는 프로세서 코어(12)로 하여금 스택의 최상위에 위치된 제어 명령을 팝핑하게 하며, 제어 명령에 의해 한정된 동작을 실행한다. 다시 실시예에서, 프로세스 스레드는 프로세서 코어(12)로 하여금 후입선출(LIFO) 방식에 따라 제어 명령들을 팝핑하게 한다.
프로세서 코어(12)는 대응하는 논리 스택(15A)의 엔트리들의 수가 스레드 크기, 예를 들어, 엔트리들의 임계 번호에 미달할 때까지 스레드에 대한 제어 명령을 계속 팝핑한다. 일 실시예에서, 임계치는 논리 스택이 비어 있을 때, 즉 제로 엔트리가 존재할 때 도달된다. 다른 실시예에서, 임계치는 논리 스택이 거의 비어 있는 상태에 대응하여 선택될 수도 있다.
논리 스택(15A)이 임계치에 미달할 때, 프로세서 코어(12)는 공통 캐시(16)의 대응하는 스택 익스텐션(18A)의 최상위 부분을 논리 스택(15A)으로 이동시킨다. 프로세서 코어(12)는 예를 들어, 공통 캐시(16)의 스택 익스텐션(15A)의 최상위 부분에서 판독하기 위해 스왑-인(swap-in) 명령을 발행할 수도 있다. 최상위 부분은 코어 스택의 크기에 부합하는 크기를 가질 수 있다. 따라서, 프로세서 코어(12)는 공통 캐시(16)의 관련된 스택 익스텐션(18A)에 저장된 엔트리로 논리 스택(15A)을 다시 채운다. 논리 스택(15A)은 스택 익스텐션(18A)에 저장된 엔트리들로 완전히 채워지거나 단지 부분적으로 채워질 수도 있다.
마찬가지로, 메모리(24)의 스택 익스텐션(22A)의 엔트리들은, 스택 익스텐션 또는 논리 스택이 적용가능한 임계치 레벨들에 도달할 때, 스택 익스텐션(18A) 또는 논리 스택(15A)으로 이동될 수도 있다. 장치(8)는 예를 들어, 스택 익스텐션(18A)의 엔트리들의 수가 임계치에 미달할 때 스택 익스텐션(22A)의 최상위 부분을 스택 익스텐션(18A)으로 이동시킨다. 택일적으로, 장치(8)는 예를 들어, 논리 스택(15A)의 엔트리들의 수가 임계치에 미달할 때 스택 익스텐션(22A)의 최상부를 논리 스택(15A)으로 이동시킨다. 또한, 이동된 부분은 적용가능한 바와 같이 스택 익스텐션(22A) 또는 논리 스택(15A)을 완전히 또는 부분적으로 채울 수 있다.
프로세서 코어(12)는 논리 스택(15A), 스택 익스텐션(18A) 및 스택 익스텐션(22A)의 제어 명령들이 실행될 때까지, 또는 프로세서 리소스들이 프로세서 코어(12) 내에서 동작하는 스레드들 중 다른 하나로 이전될 때까지 제어 명령들을 계속하여 팝핑 및 이전한다. 다른 스레드들은 프로세서 코어(12)로 하여금 동일한 방식으로 관련된 논리 스택(15) 및 스택 익스텐션(18 및 22)에 대해 다른 명령들을 팝핑 및 푸시하게 한다. 따라서, 프로세서(10)는 스택 익스텐션으로서 공통 캐시(16) 및/또는 메모리(24)의 일부를 이용함으로써 스택 오버플로우를 제어하여, 프로세서가 만일 제한되지 않는다면, 훨씬 많은 수의 함유된 플로우 제어 명령 구현을 가능하게 한다.
프로세서 코어(12)는 내부 버스(20)를 통해 제어 명령들을 논리 스택(15)으로부터 스택 익스텐션(18)으로 이동시킨다. 내부 버스(20)는 프로세서 코어(12)에 의해 액세스된 다른 리소스들에 의해 사용된 동일한 버스일 수도 있다. 프로세서 코어(12)는 예를 들어, 내부 버스(20)를 이용하여 공통 캐시(16)의 버퍼들 또는 레지스터들로 데이터를 기록할 수도 있다. 따라서, 프로세서 코어(12)에 의해 발행된 스왑-인 및 스왑-아웃 명령들은 프로세서 코어(12)의 외부의 가상 레지스터 파일들 또는 일반적인 부하/저장 버퍼들 및 명령 패치와 같은 다른 리소스 액세싱의 동일한 데이터 경로를 이용할 수도 있다. 이러한 방식에서, 추가의 하드웨어를 요구하지 않고, 프로세서 코어(12)는 제어 명령들을 공통 캐시(16)의 스택 익스텐션(18)으로 이동시킨다.
본 발명의 기술은 단지 설명의 목적을 위해 함유된 플로우 제어 명령들의 증가된 수를 실행하는 것에 대해 기술된다. 기술들은 또한 상이한 데이터를 저장하기 위해 실질적으로 제한되지 않은 크기의 스택을 구현하기 위해 사용될 수도 있다. 예를 들어, 기술들은 애플리케이션 개발자에 의해 프로그래밍된 적절한 푸시 및 팝핑 명령들을 통해 애플리케이션의 데이터를 저장하는 확장된 크기의 스택을 구현하기 위해 사용될 수도 있다.
도2는 스택 익스텐션으로서 프로세서 코어의 외부에 위치한 메모리를 이용함으로써 스택 오버플로우를 제어하는 장치(27)의 블록도이다. 장치(27)는 제1 프로세서 코어(29A) 및 제2 프로세서 코어(29B)("프로세서 코어(29)로 통칭")를 포함하는 다중 코어 프로세서(28)를 포함한다. 장치(27)는 실질적으로 도1의 장치(8)에 부합하지만, 장치(27)는 단일 프로세서 코어 대신에 다수의 프로세서 코어(29)를 포함한다. 장치(27) 및 특히 프로세서 코어들(29) 각각은 도1에 개시된 바와 같이 동작한다. 특히, 장치(27)는 프로세서 코어(29) 각각 내에서 코어 스택들(14)을 유지하며, 공통 캐시(16)의 스택 익스텐션들(18), 메모리(26)의 스택 익스텐션들(22) 또는 스택 익스텐션들(18 및 22)의 결합을 이용하여 코어 스택들(14)의 스택 오버플로우를 제어한다. 상이한 프로세서 코어(29)에 대한 스택 익스텐션들(18)은 통상적으로 중첩되지 않을 것이다. 대신, 개별 스택 익스텐션들(18)은 상이한 프로세서 코어들(29)에 대해 유지된다.
도3은 도1의 장치(8)를 더욱 상세하게 설명한 블록도이다. 장치(8)는 스택 오버플로우를 제어하기 위해, 스택 익스텐션으로서 프로세서 코어(10) 외부에 있는 메모리를 이용한다. 장치(8)는 제어 유닛(30), 코어 스택(14), 논리 스택 카운터들(34A-34N)("논리 스택 카운터(34)"), 스택 익스텐션 카운터들(36A-36N)("스택 익스텐션 카운터들(36)"), 및 스레드들(38A-38N)("스레드들(38)")을 포함하는 프로세서 코어(12)를 갖는 프로세서(10) 및 메모리(24)를 포함한다.
제어 유닛(30)은 프로세서(10) 상에서 실행하기 위한 스레드들(38)을 스케줄링하는 것을 포함하며, 프로세서(10)의 동작을 제어한다. 제어 유닛(30)은 예를 들어, 일정한 우선순위 스케줄링, 시간 슬라이싱 및/또는 소정의 다른 스레드 스케줄링 방법을 이용하여 스레드들(38)을 스케줄링할 수도 있다. 존재하는 스레드들의 수는 프로세서(10)에 의해 조절되고 있는 특정 애플리케이션 또는 애플리케이션들의 리소스 요구에 의존한다.
스레드들(38) 중 하나, 예를 들어, 스레드(38A)가 프로세서 코어(12) 상에서 실행하도록 스케줄링될 때, 스레드(38A)는 제어 유닛(30)으로 하여금 제어 명령들과 같은 스택 엔트리들을 논리 스택(15A)으로 푸시하거나 논리 스택(15A)에서 엔트리들을 팝핑하게 한다. 전술한 바와 같이, 제어 유닛(30)은 논리 스택(15)의 오버플로우를 방지하기 위해, 공통 캐시(16)의 스택 익스텐션들(18), 메모리(24)의 스택 익스텐션들(22) 또는 이둘 모두에 논리 스택(15A)의 콘텐츠의 적어도 일부, 및 선택적으로 논리 스택(15A)의 전체 콘텐츠를 이동시킨다.
각각의 스레드들(38)의 경우, 프로세서 코어(12)는 논리 스택 카운터(34) 및 스택 익스텐션 카운터(36)를 유지한다. 논리 스택 카운터들(34) 및 스택 익스텐션 카운터들(36)은 논리 스택들(15) 및 스택 익스텐션들(18 및 22)에서 제어 명령들의 수를 각각 추적한다. 예를 들어, 논리 스택 카운터(34A)는 논리 스택(15A)에서 제어 명령들의 수를 추적하고 스택 익스텐션 카운터(36A)는 스택 익스텐션(18)에서 제어 명령들의 수를 추적한다. 스택 익스텐션 카운터들(36) 중 다른 카운터들은 스택 익스텐션(220A)에 저장된 제어 명령들의 수를 추적할 수도 있다.
전술한 바와 같이, 프로세서(10)는 스택 익스텐션으로서 공통 캐시(16)의 일부를 사용함으로써 스택 오버플로우를 제어하여, 만일 실질적으로 제한되지 않은 크기가 아니라면, 프로세서(10)가 확장된 크기의 스택을 구현하게 한다. 초기에, 제어 유닛(30)은 새로운 제어 명령들 또는 애플리케이션과 관련된 다른 데이터를 스레드(38A)와 관련한 논리 스택(15A)으로 푸시하기 시작한다. 제어 유닛(30)은 논리 스택(15A)으로 푸시되는 새로운 제어 명령을 반영하기 위해 논리 스택 카운터(34A)를 증가시킨다. 제어 유닛(30)은, 논리 스택(15A)이 엔트리들의 임계 수를 초과할 때까지 스레드(38A)에 대해 논리 스택(15A)으로 새로운 제어 명령들을 계속 푸시한다. 일 실시예에서, 제어 유닛(30)은, 논리 스택(15)이 채워질 때까지 새로운 제어 명령들을 논리 스택(15A)으로 푸시할 수도 있다. 이러한 방식으로, 프로세서(10)는 논리 스택(15)의 콘텐츠들을 스택 익스텐션들(18)로 이동시켜야 하는 회수를 감소시킨다.
제어 유닛(30)은 논리 스택 카운터(34A)가 최대 임계치에 도달할 때 논리 스택(15A)이 임계치를 초과한다는 것을 스레드(38A)에 대해 결정할 수도 있다. 최대 임계치는 코어 스택(14)이 논리 스택들(15)로 분할될 때 결정될 수도 있으며, 논리 스택들(15)의 각각의 크기와 동일할 수도 있다. 제어 유닛(30)이 다른 제어 명령을 논리 스택(15A)으로 푸시할 필요가 있지만, 논리 스택(15A)이 임계치를 충족 또는 초과한다고 결정한 때, 제어 유닛(30)은 대응하는 논리 스택(15A)의 콘텐츠들의 적어도 일부를 스택 익스텐션(18A)으로 이동시킨다. 일 실시예에서, 제어 유닛(30)은 논리 스택(15A)의 전체 콘텐츠를 스택 익스텐션(18A)으로 이동시킨다. 예를 들어, 제어 유닛(30)은 전체 스택(15A)을 공통 캐시(16)의 스택 익스텐션으로 기록하기 위해 스왑-아웃 명령을 발행할 수도 있다. 택일적으로, 제어 유닛(30)은 스택(15A)의 콘텐츠의 단지 일부만을 스택 익스텐션(18A)으로 이동시킬 수도 있다. 예를 들어, 제어 유닛(30)은 최하위 제어 명령 또는 명령들만을 스택 익스텐션(18A)으로 이동시킬 수도 있다.
유사하게, 제어 유닛(30)은 마찬가지 방식으로 스택 익스텐션(18A)의 콘텐츠들 중 일부를 스택 익스텐션(22A)으로 이동시킬 수도 있다. 다시 말해, 제어 유닛(30)은 공통 캐시(16)의 스택 익스텐션들(18A)이 공통 캐시(16)의 스택 익스텐션(18A)의 콘텐츠들의 적어도 일부를 메모리(24)의 스택 익스텐션(22A)으로 이동시키기 위해 채워지게 될 때, 스왑-아웃 명령을 발행할 수도 있다. 이러한 방식으로, 장치(8)는 다중 레벨 스택 익스텐션, 즉 공통 캐시(16) 내에 위치되어 있는 스택 익스텐션의 일부 및 메모리 내에 위치된 부분을 이용하여 스택 오버플로우를 제어할 수도 있다. 택일적으로, 제어 유닛(30)은 논리 스택(15A)의 오버플로우를 제어하기 위해 메모리(24)의 스택 익스텐션(22A)으로 바로 논리 스택(15A)의 콘텐츠들을 이동시킬 수도 있다. 논리 스택 카운터(34A) 및 스택 익스텐션 카운터들(36A)은 콘텐츠들의 이동을 반영하기 위해 조절된다.
제어 유닛(30)은 스택들 사이의 엔트리들의 이동을 반영하기 위해 논리 스택 카운터(34) 및 스택 익스텐션 카운터들(36)을 조절한다. 일 실시예에서, 프로세서 코어(12)는 단일 카운터로서 스레드들 각각과 관련된 스택 익스텐션 카운터들(36) 및 논리 스택 카운터(34)를 구현한다. 예를 들어, 만일 논리 스택(15A)의 크기가 4개의 엔트리이고, 스택 익스텐션(18A)의 크기는 16개의 엔트리이며, 오프-칩 메모리에서 스택 익스텐션(22A)의 크기는 64개의 엔트리라면, 프로세서 코어(12)는 6비트를 갖는 하나의 스택 카운터를 이용할 수도 있다. 적어도 두 개의 최하위 비트(즉, 비트 0 및 1)는 논리 스택(15A)의 엔트리들의 수를 나타내며, 중간의 두 비트(즉, 비트 2 및 3)는 공통 캐시(16)에서 스택 익스텐션(18A)의 엔트리들의 수를 나타내며, 두 개의 최상위 비트들(즉, 비트 4 및 5)은 오프-칩 메모리(24)의 스택 익스텐션(22A)의 엔트리들의 수를 나타낸다.
초기에, 카운터는 -1로 설정되는데, 이는 임의의 스택들에 어떠한 엔트리도 없음을 의미한다. 논리 스택(15A)이 4개의 엔트리들을 가질 때, 6비트 카운터의 값은 3과 동일하다. 새로운 엔트리가 논리 스택(15A)으로 푸시될 때, 카운터의 값은 4와 동일할 것이다. 중앙의 두 비트에 대한 이러한 캐리 비트는 논리 스택(15A)의 전체 콘텐츠들을 대응하는 스택 익스텐션(18A)으로 스왑하기 위해 스왑 아웃 명령을 트리거링 할 것이다. 스왑 후, 카운터의 값은 4와 동일하며; 최하위의 두 비트는 0과 같은데, 이는 논리 스택(15)에 1개의 엔트리가 있음을 나타내며, 중간의 두 비트는 1과 같은데, 이는 하나의 논리 스택이 스택 익스텐션(15A)으로 오버플로우되었음을 나타낸다.
논리 스택이 3회 오버플로우될 경우, 중간 두 비트는 3과 동일하다. 다음 회의 오버플로우가 발생할 때, 스왑 아웃 명령은 스택 익스텐션(18A)의 전체 콘텐츠를 오프-칩 메모리(24)로 스왑하도록 트리거링되는데, 상기 콘텐츠는 3개의 논리 스택들의 콘텐츠들에 더하여 새롭게 오버플로우된 논리 스택 콘텐츠를 포함한다. 이어, 가장 높은 두 개의 비트는 1과 동일한데, 이는 오프-칩 메모리(26)로의 스택 익스텐션의 1회 오버플로우를 의미한다. 중간 두 비트는 0과 같은데, 이는 논리 스택(15A)의 어떠한 사본도 스택 익스텐션(18A)에 존재하지 않음을 의미한다. 스택이 팝핑되어 비어 있게 될 때, 적용가능한 카운터는 오프-칩 메모리로부터 스택 익스텐션(18A)으로 이어 논리 스택(15A)으로 스왑 인하도록 유사한 방식으로 카운트다운한다.
제어 유닛(30)은 하나의 연속한 데이터 블록으로서 논리 스택(15A)의 제어 명령들을 이동시킬 수도 있다. 다시 말해, 제어 유닛(30)은 단일 기록 동작으로 제어 명령들을 스택 익스텐션(18)으로 기록할 수도 있다. 택일적으로, 제어 유닛(30)은 둘 이상의 기록 동작을 이용하여 스택 익스텐션(18A)으로 제어 명령들을 기록할 수도 있다. 예를 들어, 제어 유닛(30)은 논리 스택(15A)의 개별 제어 명령들 각각에 대해 개별 기록 동작을 이용하여 제어 명령들을 기록할 수도 있다.
제어 유닛(30)이 논리 스택(15A)의 제어 명령들을 스택 익스텐션(18A)으로 전달하는 동안, 제어 유닛은 스레드(38A)를 SLEEP 큐로 설정하고 다른 스레드들(38)에 의한 사용을 위해 ALU 슬롯을 개방한다. 다시 말해, 스레드(38A)는 아이들 상태로 설정되어, 스레드들(38) 중 다른 하나가 프로세서 코어(12)의 리소스들을 이용하게 한다. 새로운 스레드는 프로세서 코어에서 다른 스레드들과 같은 동일한 메카니즘을 재사용한다. 예를 들어, 데이터를 스왑하기 전에, 명령 미스 또는 메모리 액세스의 경우, 현재 스레드는 SLEEP 큐로 이동할 것이며, ALU 슬롯은 다른 스레드들(38)에 의해 사용될 것이다.
일단 제어 명령들의 이동이 완료되면, 제어 유닛(30)은 다른 스레드가 더 높은 우선 순위를 갖지 않는다면, 스레드(38A)를 재활성화시킨다. 이러한 방식으로, 프로세서 코어(12)는 다수의 스레드를 실행시키기 위해 프로세서 코어의 리소스들을 더욱 효율적으로 이용하여, 제어 명령들을 스택 익스텐션들(18)로 전달하는 동안 낭비되는 프로세싱 주기의 회수를 감소시킨다. 부가적으로, 제어 유닛(30)은 논리 스택(15A) 및 스택 익스텐션(18A) 내에서 제어 명령들 또는 다른 데이터의 수를 각각 추적하도록 논리 스택 카운터(34A) 및 스택 익스텐션 카운터(36A)를 증가시킨다.
명백하게, 주어진 시간에 프로세서 코어(12)에서 동작하는 애플리케이션에 대한 스레드들의 수는 애플리케이션과 관련된 스레드들의 수에 반드시 대응하는 것은 아니다. 하나의 스레드가 완료된 후, 코어 스택(14) 내의 스레드 공간 및 논리 스택 공간은 새로운 스레드에 대해 재사용될 수 있다. 따라서, 주어진 시간에 코어 스택(14)을 이용하는 스레드들의 수는 애플리케이션의 스레드들의 전체수는 아니다. 예를 들어, 소정의 실시예에서, 프로세서 코어(12)는 주어진 애플리케이션의 16개의 스레드에 대한 충분한 스택 공간을 제공하도록 구성될 수도 있다. 그러나 동시에, 애플리케이션은 10,000 개의 스레드들보다 더 많이 가질 수도 있다. 결론적으로, 프로세서 코어(12)는 애플리케이션을 실행하는 동안 더 많은 스레드를 개시 및 완료하며, 고정된 수의 스레드들에 한정되지 않는다. 대신에, 스레드들은 애플리케이션의 실행 동안 반복적으로 동일한 스레드 공간 및 논리 스택 공간을 재사용한다.
제어 유닛(30)이 스레드(38A)에 대해 논리 스택의 제어 명령들을 팝핑할 필요가 있을 때, 제어 유닛(30)은 논리 스택(15A)의 최상위로부터 제어 명령들의 팝핑을 시작하고 논리 스택 카운터(34A)를 감소시킨다. 논리 스택(15A)이 최소 임계치에 미달할 때, 예를 들어, 논리 스택 카운터(34A)가 제로일 때, 제어 유닛(30)은 스레드(38A)와 관련된 소정의 제어 명령들은 스택 익스텐션(18A)에 위치된다. 제어 유닛(30)은 예를 들어, 소정의 제어 명령들이 스택 익스텐션에 남아 있는 지를 결정하기 위해 스택 익스텐션 카운터(36A)의 값을 체크할 수도 있다. 만일 스택 익스텐션(18A)에 제어 명령들이 존재하면, 제어 유닛(30)은 논리 스택(15A)을 다시 채우기 위해 스택 익스텐션(18A)의 최상위 부분으로부터 제어 명령을 검색한다. 제어 유닛(30)은, 예를 들어, 공통 캐시(16)의 스택 익스텐션(15A)의 최상위 부분에서 판독을 위해 스왑-인 명령을 발행할 수도 있다. 논리 스택(15A)이 비어져 있을 때 스택 익스텐션(18A)의 콘텐츠를 스왑-인하는 것은 스왑-인 명령의 수를 감소시킬 수도 있다.
마찬가지로, 메모리(24)의 스택 익스텐션(22A)의 엔트리들은 스택 익스텐션(18A) 또는 논리 스택(15A) 중 하나로 이동된다. 장치(8)는 예를 들어, 스택 익스텐션(18A)의 엔트리들의 수가 임계치에 미달할 때 스택 익스텐션(22A)의 최상위 부분을 스택 익스텐션(18A)으로 이동시킬 수도 있다. 택일적으로, 장치(8)는 예를 들어, 논리 스택(15A)의 엔트리들의 수가 임계치에 미달할 때 스택 익스텐션(22A)의 최상위 부분을 논리 스택(15A)으로 이동시킬 수도 있다. 스택 익스텐션(18A) 또는 스택 익스텐션(22A)의 최상위 부분은 크기면에서 논리 스택(15A)의 크기에 대응할 수도 있다.
제어 유닛(30)이 제어 명령들을 스택(15A)으로 전달하는 반면, 제어 유닛(30)은 스레드(38A)를 아이들 상태로 설정하여, 다른 스레드들이 프로세서(12)의 리소스들을 이용하게 한다. 제어 유닛(30)은 예를 들어, 스레드(38A)를 SLEEP 큐에 위치시킬 수도 있어서, 스레드들(38) 중 다른 스레드들 중 하나에 의한 사용을 위해 ALU 슬롯을 개방한다. 일단 제어 유닛(30)이 제어 명령들을 검색하면, 제어 유닛(30)은 다른 스레드에 스레드(38A)가 아이들인 동안 더 높은 우선 순위가 주어지지 않으면 스레드(38A)를 활성화한다. 더욱이, 제어 유닛(30)은 스택 익스텐션(18A)으로부터 제어 명령들의 제거를 위해 스택 익스텐션 카운터(36A)를 조절한다. 부가적으로, 제어 유닛(30)은 논리 스택(15A)에 배치된 제어 명령들을 관리하기 위해 논리 스택 카운터(34A)를 조절한다.
제어 유닛(30)은 스레드(38A)에 대해 논리 스택(15A)으로부터 제어 명령들을 계속 팝핑 및 실행한다. 이러한 프로세스는 논리 스택(15A) 및 스택 익스텐션(18A 및 22A) 모두에 유지된 제어 명령들 모두가 판독되고 스레드(38A)에 의해 실행될 때까지 또는 제어 유닛(30)이 프로세서 코어(12)의 리소스를 스레드들(38) 중 다른 하나에 할당할 때까지 계속된다. 이러한 방식에서, 프로세서(10)는 제어 명령들을 스택 익스텐션들(18 및 22)로 푸시하고 이후 이러한 제어 명령들을 검색함으로써 제한된 수의 함유된 제어 명령들을 구현할 수 있다. 그러나 전술한 바와 같이, 프로세서(10)는 제어 명령들이 아닌 데이터를 저장하기 위해 확장된 크기의 스택을 구현하기 위해 개시된 기술을 이용할 수도 있다.
도4는 코어 스택(14) 및 스택 익스텐션들(18)을 더욱 상세히 설명하는 블록도이다. 전술한 바와 같이, 코어 스택(14)은 고정된 크기의 데이터 구조이며, 프로세서 코어(12)의 메모리 내에 존재한다. 도4에 설명된 예에서, 코어 스택(14)은 24개의 제어 명령들을 유지하도록 구성된다. 코어 스택(14)은 소정 수의 제어 명령들을 유지하도록 구성될 수도 있다. 그러나 코어 스택의 크기는 프로세서 코어(12) 내의 메모리의 크기에 의해 제한될 수도 있다.
코어 스택(14)은 하나 이상의 논리 스택으로 구성가능한데, 논리 스택들 각각은 애플리케이션의 스레드에 대응한다. 전술한 바와 같이, 논리 스택들의 수 및 크기는 특정 애플리케이션의 리소스 요구들에 따른 소프트웨어 드라이버에 의해 결정될 수도 있는 현재 애플리케이션의 스레드들의 수에 의존한다. 다시 말해, 프로세서 코어(12)는 동적으로 특정 애플리케이션과 관련된 스레드들의 수에 기초하여 각각의 애플리케이션에 대해 상이하게 코어 스택(14)을 동적으로 분할한다.
도4에 설명된 예에서, 코어 스택(14)은 4개의 동일한 크기의 논리 스택들(15A-15D)("논리 스택(15)")로 구성된다. 논리 스택(15)은 각각 6개의 제어 명령들과 같은 6개의 엔트리들을 각각 유지한다. 그러나 전술한 바와 같이, 만일 애플리케이션이 더 많은 수의 스레드들을 포함하면, 코어 스택(14)은 더 많은 논리 스택들(15)로 분할될 것이다. 예를 들어, 만일 애플리케이션이 6개의 스레드를 포함하면, 코어 스택(14)은 4개의 제어 명령들을 각각 유지하는 6개의 논리 스택으로 구성될 수도 있다. 상반되게, 만일 애플리케이션이 더 작은 수의 스레드들을 포함하면, 코어 스택(14)은 더 적은 논리 스택들(15)로 분할될 것이다. 이러한 구성은 전체 스택들의 사용을 최대화할 수 있으며, 상이한 애플리케이션 요구에 대한 융통성을 제공한다.
프로세서(10)는 프로세서 코어(12) 내의 논리 스택들(15)과 공동 머신(16) 내의 스택 익스텐션들(18) 사이에서 제어 명령들을 이전시킴으로써 스택 오버플로우를 제어한다. 각각의 스택 익스텐션들(18)은 논리 스택들(15) 중 하나에 대응한다. 예를 들어, 스택 익스텐션(18A)은 논리 스택(15)에 대응할 수도 있다. 그러나 스택 익스텐션(18A)은 논리 스택(15A)보다 크지 않을 수도 있다. 도4에 도시된 예에서, 스택 익스텐션(18A)은 논리 스택(15A)보다 4배 더 크다. 따라서, 프로세서 코어(12)는 채워질 수 있으며 스택 익스텐션(18A)이 채워지기 전에 제어 명령들은 논리 스택(15A)으로부터 4회 이동될 수도 있다. 택일적으로, 스택 익스텐션(18A)은 논리 스택(15A)과 동일한 크기일 수도 있다. 이러한 경우, 프로세서 코어(12)는 하나의 전체 논리 스택의 제어 명령들만을 이전할 수 있다.
그러나 만일 스택 익스텐션이 공통 캐시의 크기보다 더 크면, 공통 캐시(16)는 오프-칩 메모리(24)로 데이터를 스왑인 및 오프-칩 메모리로부터 스왑 오프할 수도 있다. 택일적으로, 스택 익스텐션의 일부는 공통 캐시(16) 내에 위치될 수도 있고 일부는 메모리 내에 위치될 수 있다. 따라서, 프로세서(12)는 매우 낮은 비용으로 함유 흐름 제어 명령들의 제한된 수를 진정으로 구현할 수도 있다.
도5는 코어 스택의 스택 오버플로우를 방지하기 위해 공통 캐시의 스택 익스텐션으로 제어 명령들을 푸시하는 프로세서의 동작예를 설명한 흐름도이다. 초기에, 제어 유닛(30)은 스레드(38A)와 같은 스레드와 관련된 논리 스택(15A)으로 새로운 제어 명령을 푸시할 필요성(40)을 결정한다. 제어 유닛(30)은 예를 들어, 새로운 루프가 실행되어야 하는지 그리고 새로운 루프가 완료된 후 현재 루프로 리턴할 제어 명령을 푸시할 필요성을 결정할 수도 있다.
제어 유닛(30)은 논리 스택이 최대 임계치에 도달 또는 초과했는지를 결정(42)한다. 제어 유닛(30)은 예를 들어, 논리 스택(15A)이 채워져 있는 지를 결정하기 위해 논리 스택 카운터(34A)의 값을 임계치 값과 비교한다. 임계치 값은 예를 들어, 현재 애플리케이션과 관련된 스레드들의 수 및 코어 스택(14)의 크기에 기초하여 결정될 수도 있는 논리 스택(15)의 크기일 수도 있다.
만일 논리 스택(15A)의 엔트리들의 수가 최대 임계치를 초과하지 않으면, 제어 유닛(30)은 새로운 제어 명령을 스레드(38A)에 대한 논리 스택(15A)으로 푸시(44)한다. 부가적으로, 제어 유닛(30)은 논리 스택(15A)에 배치된 새로운 제어 명령에 대한 카운트로 논리 스택 카운터(46)를 증가(46)시킨다.
만일 논리 스택(15A)에서 엔트리들의 수가 최대 임계치에 도달하거나 초과하면, 제어 유닛(30)은 현재 스레드를 아이들 상태로 설정(48)한다. 스레드(38A)가 아이들 상태인 동안, 스레드들(38)의 다른 하나는 프로세서 코어(12)의 리소스들을 이용할 것이다. 부가적으로, 제어 유닛(30)은 논리 스택(15A)의 콘텐츠의 적어도 일부를 공통 캐시(16)의 대응하는 스택 익스텐션(18A)으로 이동(50)시킨다. 제어 유닛(30)은, 예를 들어, 논리 스택(15A)의 전체 콘텐츠를 스택 익스텐션(18A)으로 이동시킨다. 제어 유닛(30)은 단일 기록 동작 또는 다수의 연속한 기록 동작들로 논리 스택(15A)의 콘텐츠를 이동시킬 수도 있다. 논리 스택(15A)의 콘텐츠가 스택 익스텐션(18A)으로 이동된 후, 제어 유닛(30)은 스레드(38A)를 재활성화시킨다.
제어 유닛(30)은 스택 익스텐션(18A)으로 이동된 제어 명령들을 처리하기 위해 스택 익스텐션 카운터(36A)를 증가시킨다. 일 실시예에서, 제어 유닛(30)은 기록 동작들의 수의 함수로서 스택 익스텐션(36A)을 증가시킨다. 부가적으로, 제어 유닛(30)은 논리 스택(15A)으로부터 이동된 제어 명령들을 처리하기 위해 논리 스택 카운터(34A)를 조절(46)한다. 제어 유닛(30)은 예를 들어, 논리 스택 카운터(34A)를 제로로 리셋한다. 이어, 제어 유닛(30)은 이제 비어 있는 논리 스택(15A)으로 새로운 제어 명령을 푸시할 수도 있다.
전술한 바와 같이, 스택 관리 방식은 추가의 스택 익스텐션으로서 오프-칩 메모리(24)를 이용할 수도 있다. 특히, 공통 캐시(16)의 스택 익스텐션(18A)이 채워지게 되면, 예를 들어, 장치(8)는 논리 스택(15A)의 콘텐츠들이 스택 익스텐션(18A)으로 이동되는 것과 유사한 방식으로 공통 캐시(16)의 스택 익스텐션(18A)의 콘텐츠들의 적어도 일부를 메모리(24)의 스택 익스텐션(22A)으로 스왑-아웃할 수도 있다. 이러한 방식으로, 장치(8)는 다중 레벨 스택 익스텐션을 이용하여 스택 오버플로우를 제어할 수도 있는데, 즉, 스택 익스텐션의 일부는 공통 캐시(16) 내에 그리고 일부는 메모리(24) 내에 위치된다. 택일적으로, 장치(8)는 논리 스택(15A)의 오버플로우를 제어하기 위해 메모리(24)의 스택 익스텐션(22A)으로 논리 스택(15A)의 콘텐츠들을 바로 이동시킬 수도 있다. 논리 스택 카운터(32A) 및 스택 익스텐션 카운터들(34A)은 콘텐츠들의 이동을 반영하기 위해 조절된다.
도6은 스택 익스텐션에 저장된 제어 명령들을 검색하는 프로세서(10)의 동작예를 나타낸 흐름도이다. 초기에, 만일 스레드가 논리 스택의 제어 명령을 팝핑(60)하고, 논리 스택이 비워지지 않으면(62), 제어 명령은 논리 스택을 팝핑(63)하고, 논리 스택 카운터는 조절(76)된다. 제어 유닛(30)은 논리 스택(15A)의 엔트리들의 수가 최소 임계치에 미달하는 지를 결정한다. 일 실시예에서, 제어 유닛(30)은 논리 스택(15)이 비어 있는 지를 결정한다. 따라서, 이러한 경우, 임계치는 0 이다. 제어 유닛(30)은 예를 들어, 논리 스택(15A)이 논리 스택 카운터(34A)가 0 과 동일할 때 비어 있다고 결정할 수도 있다. 만일 논리 스택(15A)의 엔트리들의 수가 최소 임계치에 미달하면, 제어 유닛(30)은 스택 익스텐션(18A)의 최상위로부터 연속한 제어 명령을 팝핑하도록 시도한다.
만일 논리 스택(15A)의 엔트리들의 수가 최소 임계치에 도달하거나 미달하면, 제어 유닛은 스택 익스텐션(18A)이 비어 있는 지를 결정한다. 제어 유닛(30)은 예를 들어, 스택 익스텐션 카운터(36A)가 0 과 동일할 경우 스택 익스텐션(18A)이 비어있다고 결정한다. 만일 스택 익스텐션(18A)이 비어 있으면, 스레드(38A)와 관련된 모든 제어 명령이 실행되고 제어 유닛(30)은 다른 스레드(66)를 활성화시킬 수도 있다.
만일 스택 익스텐션(18A)이 비어 있으면, 제어 유닛(30)은 스레드(38A)를 아이들 상태로 설정(68)한다. 스레드(38A)가 아이들 상태인 동안, 스레드들(38) 중 다른 하나는 프로세서 코어(12)의 리소스들을 이용할 것이다. 제어 유닛(30)은 공통 캐시(16)의 대응하는 스택 익스텐션(18A)의 최상위 부분을 논리 스택(15A)으로 이동(70)시킨다. 일 실시예에서, 제어 유닛(30)은 논리 스택(15A)을 채우기 위해 스택 익스텐션(18A)으로부터 충분한 제어 명령들을 검색한다. 다시 말해, 제어 유닛(30)은 공통 캐시(16)의 관련된 스택 익스텐션(18A)에 저장된 엔트리들로 논리 스택(15A)을 다시 채운다. 제어 유닛은 아이들 스레드(38A)를 재활성화(72)시킨다.
더욱이, 제어 유닛(30)은 스택 익스텐션(18A)으로부터 제어 명령들의 제거를 처리하기 위해 스택 익스텐션 카운터(36A)를 조절한다. 부가적으로, 제어 유닛(30)은 논리 스택(15A)에 배치된 제어 명령들을 처리하기 위해 논리 스택 카운터를 조절(76)한다. 제어 유닛(30)은 계속하여 논리 스택(15A)으로부터 제어 명령들을 팝핑 및 실행한다.
비록 도5 및 6의 흐름도가 프로세서(10) 내에 위치된 공통 캐시(16) 내에서 스택 익스텐션을 이용하는 프로세서(10)를 설명하였지만, 프로세서(10)는 도2에 도시된 바와 같이 프로세서(10) 외부의 메모리 또는 외부 캐시에 위치된 스택 익스텐션을 유지 및 이용할 수도 있다. 택일적으로, 프로세서(10)는 프로세서(10) 내의 공통 캐시(16) 및 프로세서(10) 외부의 메모리 또는 캐시 중 하나를 이용하며 다중 레벨 익스텐션을 유지할 수도 있다.
개시된 기술들은 많은 장점들을 제공한다. 예를 들어, 기술들은 애플리케이션 개발자에 의해 프로그램된 명령들의 적절한 푸시 및 팝핑을 통해 애플리케이션의 다른 애플리케이션 데이터 또는 실질적으로 제한되지 않은 수의 함유된 흐름 제어 명령들을 경제적으로 구현하기 위한 성능을 갖는 프로세서 또는 다른 장치를 제공한다. 더욱이, 기술들은 장치 내에 이미 위치하는 리소스들을 이용한다. 예를 들어, 프로세서 또는 다른 장치는 다른 리소스 액세스를 위해 사용된 데이터 경로를 이용하여 스왑-인 및 스왑-아웃 명령들을 발행시킨다. 프로세서 또는 다른 장치는 또한 공통 캐시 또는 외부 메모리와 같은 프로세서 코어의 외부에 기존에 이용가능한 메모리를 또한 이용한다. 더욱이, 기술들은 프로세서 코어 상에서 실행하는 애플리케이션 및 드라이버에 완전히 투명하다.
상기 설명된 기술들은 하드웨어 소프트웨어, 펌웨어 또는 소정의 이들 결합으로 구현될 수도 있다. 예를 들어, 상기 기술들의 다양한 특징들은 하나 이상의 마이크로프로세서, 디지털 신호 처리기(DSP), 주문형 집적회로(ASIC)들, 필드 프로그램 가능한 논리 어레이(FPGA)들, 또는 다른 동등한 집적되거나 개별적인 논리 회로, 및 이들의 결합으로 구현될 수도 있다. "프로세서" 또는 "프로세싱 회로"는 다른 논리 회로와 단독으로 또는 결합하여 소정의 전술한 논리 회로에 일반적으로 통용될 수도 있다.
소프트웨어로 구현될 경우, 상기 설명된 시스템 및 장치에 대한 기능은 RAM, ROM, 비휘발성 RAM, 전기적으로 소거 가능한 프로그램 가능 ROM(EEPROM), 플래시 메모리, 자기 매체, 광학 매체 등과 같은 컴퓨터 판독 가능 매체 상의 명령으로서 실행될 수도 있다. 상기 명령들은 개시된 기능의 하나 이상의 특징을 지원하기 위해 실행된다.
본 발명의 다양한 실시예가 설명되었다. 설명된 실시예는 단지 예일 뿐이다. 다양한 실시예가 이하의 청구항의 사상 내에 속한다.
Claims (18)
- 프로세서에 의해 수행되는 방법으로서,
프로세서의 코어 내의 스택의 콘텐츠들이 제 1 임계 크기를 초과한다는 결정에 응답하여 상기 프로세서의 코어 외부의 스택 익스텐션에 연속적인 블록으로서 상기 스택의 제 1 다수의 논리 스택 엔트리들을 전달하는 단계 - 상기 스택 익스텐션의 스택 익스텐션 크기는 상기 스택의 스택 크기보다 더 크며, 상기 스택 익스텐션 크기는 상기 스택 크기의 정수배이고, 상기 정수배는 1보다 크며, 상기 스택은 상기 프로세서의 코어에서 실행하는 특정 스레드에 대응함 -;
상기 전달 동안 상기 특정 스레드를 슬립 모드(sleep mode)로 배치(place)하는 단계; 및
상기 전달 이후에 상기 특정 스레드를 재활성화(reactivate)하는 단계를 포함하는, 방법. - 삭제
- 프로세서에 의해 수행되는 방법으로서,
프로세서의 코어 외부의 스택 익스텐션에 스택의 제 1 다수의 논리 스택 엔트리들을 선택적으로 전달하는 단계 - 상기 스택은 상기 프로세서의 코어에서 실행하는 특정 스레드에 대응함 -;
상기 프로세서의 코어 내의 스택의 제 1 수의 엔트리들 및 상기 스택 익스텐션의 제 2 수의 엔트리들을 추적하기 위해 단일 스택 카운터를 사용하는 단계 - 상기 단일 스택 카운터의 제 1 부분은 상기 스택에 대응하고, 상기 단일 스택 카운터의 제 2 부분은 상기 스택 익스텐션에 대응함 -;
상기 전달 동안 상기 특정 스레드를 슬립 모드로 배치하는 단계; 및
상기 전달 이후에 상기 특정 스레드를 재활성화하는 단계를 포함하는, 방법. - 제 3 항에 있어서,
상기 스택에 엔트리를 부가하는 것에 응답하여 상기 단일 스택 카운터를 증가시키는 단계를 더 포함하고,
상기 제 1 부분으로부터 상기 제 2 부분으로의 캐리 비트는 상기 스택으로부터 상기 스택 익스텐션으로 엔트리들을 전달하기 위한 명령을 트리거링하는, 방법. - 제 3 항에 있어서,
상기 스택 익스텐션의 제 2 다수의 논리 스택 엔트리들을 제 2 스택 익스텐션으로 선택적으로 전달하는 단계를 더 포함하는, 방법. - 제 3 항에 있어서,
상기 단일 스택 카운터의 제 3 부분은 제 2 스택 익스텐션의 제 3 수의 엔트리들을 추적하기 위해 상기 제 2 스택 익스텐션에 대응하는, 방법. - 제 6 항에 있어서,
상기 스택은 4개의 엔트리들을 포함하고,
상기 스택 익스텐션은 16개의 엔트리들을 포함하고,
상기 제 2 스택 익스텐션은 64개의 엔트리들을 포함하는, 방법. - 제 6 항에 있어서,
상기 단일 스택 카운터의 최하위 제 1 및 제 2 비트들은 상기 단일 스택 카운터의 제 1 부분에 대응하고,
상기 단일 스택 카운터의 제 3 및 제 4 비트들은 상기 단일 스택 카운터의 제 2 부분에 대응하고,
상기 단일 스택 카운터의 제 5 및 제 6 비트들은 상기 단일 스택 카운터의 제 3 부분에 대응하는, 방법. - 제 8 항에 있어서,
상기 단일 스택 카운터의 제 1 및 제 2 비트들은 상기 스택의 엔트리들의 수를 나타내는, 방법. - 제 9 항에 있어서,
상기 단일 스택 카운터의 제 3 및 제 4 비트들은 상기 스택 익스텐션의 엔트리들의 수를 나타내는, 방법. - 제 10 항에 있어서,
상기 단일 스택 카운터의 제 5 및 제 6 비트들은 상기 제 2 스택 익스텐션의 엔트리들의 수를 나타내는, 방법. - 제 3 항에 있어서,
상기 스택이 하나의 엔트리를 가질 때 상기 단일 스택 카운터가 0의 값을 가지도록 상기 단일 스택 카운터는 초기에 -1 값으로 설정되는, 방법. - 제 3 항에 있어서,
상기 스택 익스텐션의 스택 익스텐션 크기는 상기 스택의 스택 크기의 1보다 큰 정수배이고,
상기 제 1 다수의 논리 스택 엔트리들은 상기 스택의 전체 콘텐츠들을 포함하는, 방법. - 제 13 항에 있어서,
상기 제 1 다수의 논리 스택 엔트리들은 상기 스택이 완전히 채워지고, 새로운 엔트리가 상기 스택에 부가될 때 전달되는, 방법. - 제 14 항에 있어서,
제 2 스택 익스텐션의 제 2 스택 익스텐션 크기는 상기 스택 익스텐션의 스택 익스텐션 크기의 1보다 큰 정수배이고,
제 2 다수의 논리 스택 엔트리들은 상기 스택 익스텐션의 전체 콘텐츠들을 포함하는, 방법. - 제 15 항에 있어서,
상기 제 2 다수의 논리 스택 엔트리들은 상기 스택 익스텐션이 완전히 채워지고 새로운 엔트리가 상기 스택 익스텐션에 부가될 때 전달되는, 방법. - 제 16 항에 있어서,
상기 스택이 3회 오버플로우한 후에 상기 단일 스택 카운터의 제 3 및 제 4 비트들 모두를 어서트(assert)하는 단계; 및
상기 스택 익스텐션에 대한 상기 스택의 제 4 오버플로우 후에 상기 제 2 스택 익스텐션에 상기 스택 익스텐션의 전체 콘텐츠들을 전달하는 단계
를 더 포함하는, 방법. - 제 17 항에 있어서,
상기 제 2 스택 익스텐션으로 상기 스택 익스텐션의 전체 콘텐츠들을 전달한 후에 상기 단일 스택 카운터의 제 5 비트를 어서트하고 상기 단일 스택 카운터의 제 3 및 제 4 비트들을 디어서트(deassert)하는 단계를 더 포함하는, 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/448,272 | 2006-06-06 | ||
US11/448,272 US20070282928A1 (en) | 2006-06-06 | 2006-06-06 | Processor core stack extension |
PCT/US2007/069191 WO2007146544A2 (en) | 2006-06-06 | 2007-05-17 | Processor core stack extension |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097000088A Division KR101068735B1 (ko) | 2006-06-06 | 2007-05-17 | 프로세서 코어 스택 익스텐션 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100133463A KR20100133463A (ko) | 2010-12-21 |
KR101200477B1 true KR101200477B1 (ko) | 2012-11-12 |
Family
ID=38686675
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020107024600A KR101200477B1 (ko) | 2006-06-06 | 2007-05-17 | 프로세서 코어 스택 익스텐션 |
KR1020097000088A KR101068735B1 (ko) | 2006-06-06 | 2007-05-17 | 프로세서 코어 스택 익스텐션 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097000088A KR101068735B1 (ko) | 2006-06-06 | 2007-05-17 | 프로세서 코어 스택 익스텐션 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20070282928A1 (ko) |
EP (1) | EP2024832A2 (ko) |
JP (1) | JP5523828B2 (ko) |
KR (2) | KR101200477B1 (ko) |
CN (2) | CN102841858A (ko) |
WO (1) | WO2007146544A2 (ko) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8271959B2 (en) * | 2008-04-27 | 2012-09-18 | International Business Machines Corporation | Detecting irregular performing code within computer programs |
KR101622168B1 (ko) * | 2008-12-18 | 2016-05-18 | 삼성전자주식회사 | 실시간 스케쥴링 방법 및 이를 이용한 중앙처리장치 |
US8347309B2 (en) * | 2009-07-29 | 2013-01-01 | Oracle America, Inc. | Dynamic mitigation of thread hogs on a threaded processor |
US8555259B2 (en) * | 2009-12-04 | 2013-10-08 | International Business Machines Corporation | Verifying function performance based on predefined count ranges |
US8341353B2 (en) * | 2010-01-14 | 2012-12-25 | Qualcomm Incorporated | System and method to access a portion of a level two memory and a level one memory |
US9928105B2 (en) * | 2010-06-28 | 2018-03-27 | Microsoft Technology Licensing, Llc | Stack overflow prevention in parallel execution runtime |
US20120017214A1 (en) * | 2010-07-16 | 2012-01-19 | Qualcomm Incorporated | System and method to allocate portions of a shared stack |
EP2472450A1 (en) | 2010-12-28 | 2012-07-04 | Hasso-Plattner-Institut für Softwaresystemtechnik GmbH | A search method for a containment-aware discovery service |
EP2472449A1 (en) * | 2010-12-28 | 2012-07-04 | Hasso-Plattner-Institut für Softwaresystemtechnik GmbH | A filter method for a containment-aware discovery service |
EP2472448A1 (en) | 2010-12-28 | 2012-07-04 | Hasso-Plattner-Institut für Softwaresystemtechnik GmbH | A communication protocol for a communication-aware discovery service |
US9665375B2 (en) | 2012-04-26 | 2017-05-30 | Oracle International Corporation | Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss |
CN103076944A (zh) * | 2013-01-05 | 2013-05-01 | 深圳市中兴移动通信有限公司 | 一种基于webos系统的应用切换方法、系统及移动手持终端 |
KR101470162B1 (ko) | 2013-05-30 | 2014-12-05 | 현대자동차주식회사 | 메모리 스택 사이즈 모니터링 방법 |
US9367472B2 (en) | 2013-06-10 | 2016-06-14 | Oracle International Corporation | Observation of data in persistent memory |
JP6226604B2 (ja) * | 2013-07-22 | 2017-11-08 | キヤノン株式会社 | ディスプレイリストを生成する装置、方法、プログラム |
US10705961B2 (en) * | 2013-09-27 | 2020-07-07 | Intel Corporation | Scalably mechanism to implement an instruction that monitors for writes to an address |
US9558035B2 (en) * | 2013-12-18 | 2017-01-31 | Oracle International Corporation | System and method for supporting adaptive busy wait in a computing environment |
CN104199732B (zh) * | 2014-08-28 | 2017-12-05 | 上海新炬网络技术有限公司 | 一种pga内存溢出智能处理方法 |
JP6227151B2 (ja) * | 2014-10-03 | 2017-11-08 | インテル・コーポレーション | アドレスへの書き込みに対する監視命令を実行するスケーラブル機構 |
CN104536722B (zh) * | 2014-12-23 | 2018-02-02 | 大唐移动通信设备有限公司 | 基于业务处理流程的栈空间优化方法和系统 |
CN106201913A (zh) * | 2015-04-23 | 2016-12-07 | 上海芯豪微电子有限公司 | 一种基于指令推送的处理器系统和方法 |
TWI647565B (zh) * | 2016-03-31 | 2019-01-11 | 物聯智慧科技(深圳)有限公司 | 計算堆疊大小之計算系統及方法 |
US10649786B2 (en) * | 2016-12-01 | 2020-05-12 | Cisco Technology, Inc. | Reduced stack usage in a multithreaded processor |
US11782762B2 (en) * | 2019-02-27 | 2023-10-10 | Qualcomm Incorporated | Stack management |
CN110618946A (zh) * | 2019-08-19 | 2019-12-27 | 中国第一汽车股份有限公司 | 堆栈内存分配方法、装置、设备和存储介质 |
KR102365261B1 (ko) * | 2022-01-17 | 2022-02-18 | 삼성전자주식회사 | 전자시스템, 그 동작방법 및 그 메모리 장치의 동작방법 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003271448A (ja) | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3810117A (en) * | 1972-10-20 | 1974-05-07 | Ibm | Stack mechanism for a data processor |
US4405983A (en) * | 1980-12-17 | 1983-09-20 | Bell Telephone Laboratories, Incorporated | Auxiliary memory for microprocessor stack overflow |
JPS6012658B2 (ja) * | 1980-12-22 | 1985-04-02 | 富士通株式会社 | スタック・メモリ装置 |
JPS57182852A (en) * | 1981-05-07 | 1982-11-10 | Nec Corp | Stack device |
JPS58103043A (ja) * | 1981-12-15 | 1983-06-18 | Matsushita Electric Ind Co Ltd | スタック形成方法 |
JPS5933552A (ja) * | 1982-08-18 | 1984-02-23 | Toshiba Corp | デ−タ処理装置 |
JPH01255035A (ja) * | 1988-04-05 | 1989-10-11 | Matsushita Electric Ind Co Ltd | プロセサ |
JPH02187825A (ja) * | 1989-01-13 | 1990-07-24 | Mitsubishi Electric Corp | コンピュータ |
JPH05143330A (ja) * | 1991-07-26 | 1993-06-11 | Mitsubishi Electric Corp | スタツクキヤツシユの制御方式及びスタツクキヤツシユ |
US5727178A (en) * | 1995-08-23 | 1998-03-10 | Microsoft Corporation | System and method for reducing stack physical memory requirements in a multitasking operating system |
US5901316A (en) * | 1996-07-01 | 1999-05-04 | Sun Microsystems, Inc. | Float register spill cache method, system, and computer program product |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
US6009499A (en) * | 1997-03-31 | 1999-12-28 | Sun Microsystems, Inc | Pipelined stack caching circuit |
JPH10340228A (ja) * | 1997-06-09 | 1998-12-22 | Nec Corp | マイクロプロセッサ |
JP3794119B2 (ja) * | 1997-08-29 | 2006-07-05 | ソニー株式会社 | データ処理方法、記録媒体及びデータ処理装置 |
US6108744A (en) * | 1998-04-16 | 2000-08-22 | Sun Microsystems, Inc. | Software interrupt mechanism |
US6167504A (en) * | 1998-07-24 | 2000-12-26 | Sun Microsystems, Inc. | Method, apparatus and computer program product for processing stack related exception traps |
CA2277636A1 (en) * | 1998-07-30 | 2000-01-30 | Sun Microsystems, Inc. | A method, apparatus & computer program product for selecting a predictor to minimize exception traps from a top-of-stack cache |
DE19836673A1 (de) * | 1998-08-13 | 2000-02-17 | Hoechst Schering Agrevo Gmbh | Herbizide Mittel für tolerante oder resistente Zuckerrübenkulturen |
US6502184B1 (en) * | 1998-09-02 | 2002-12-31 | Phoenix Technologies Ltd. | Method and apparatus for providing a general purpose stack |
JP3154408B2 (ja) * | 1998-12-21 | 2001-04-09 | 日本電気株式会社 | スタックサイズ設定装置 |
US6779065B2 (en) * | 2001-08-31 | 2004-08-17 | Intel Corporation | Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads |
US6671196B2 (en) * | 2002-02-28 | 2003-12-30 | Sun Microsystems, Inc. | Register stack in cache memory |
US6978358B2 (en) * | 2002-04-02 | 2005-12-20 | Arm Limited | Executing stack-based instructions within a data processing apparatus arranged to apply operations to data items stored in registers |
TWI220733B (en) * | 2003-02-07 | 2004-09-01 | Ind Tech Res Inst | System and a method for stack-caching method frames |
US7344675B2 (en) * | 2003-03-12 | 2008-03-18 | The Boeing Company | Method for preparing nanostructured metal alloys having increased nitride content |
EP1505490A1 (en) * | 2003-08-05 | 2005-02-09 | Sap Ag | Method and computer system for accessing thread private data |
CN1208721C (zh) * | 2003-09-19 | 2005-06-29 | 清华大学 | 基于PowerPC处理器结构的分级任务切换方法 |
US7249208B2 (en) * | 2004-05-27 | 2007-07-24 | International Business Machines Corporation | System and method for extending the cross-memory descriptor to describe another partition's memory |
US20060095675A1 (en) * | 2004-08-23 | 2006-05-04 | Rongzhen Yang | Three stage hybrid stack model |
JP4813882B2 (ja) * | 2004-12-24 | 2011-11-09 | 川崎マイクロエレクトロニクス株式会社 | Cpu |
US7478224B2 (en) * | 2005-04-15 | 2009-01-13 | Atmel Corporation | Microprocessor access of operand stack as a register file using native instructions |
JP2006309508A (ja) * | 2005-04-28 | 2006-11-09 | Oki Electric Ind Co Ltd | スタック制御装置およびその方法 |
US7805573B1 (en) * | 2005-12-20 | 2010-09-28 | Nvidia Corporation | Multi-threaded stack cache |
-
2006
- 2006-06-06 US US11/448,272 patent/US20070282928A1/en not_active Abandoned
-
2007
- 2007-05-17 WO PCT/US2007/069191 patent/WO2007146544A2/en active Application Filing
- 2007-05-17 KR KR1020107024600A patent/KR101200477B1/ko active IP Right Grant
- 2007-05-17 KR KR1020097000088A patent/KR101068735B1/ko active IP Right Grant
- 2007-05-17 CN CN2012102645242A patent/CN102841858A/zh active Pending
- 2007-05-17 CN CNA2007800206163A patent/CN101460927A/zh active Pending
- 2007-05-17 JP JP2009514458A patent/JP5523828B2/ja not_active Expired - Fee Related
- 2007-05-17 EP EP07797563A patent/EP2024832A2/en not_active Withdrawn
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003271448A (ja) | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
Also Published As
Publication number | Publication date |
---|---|
KR101068735B1 (ko) | 2011-09-28 |
JP5523828B2 (ja) | 2014-06-18 |
CN101460927A (zh) | 2009-06-17 |
WO2007146544A2 (en) | 2007-12-21 |
KR20100133463A (ko) | 2010-12-21 |
US20070282928A1 (en) | 2007-12-06 |
KR20090018203A (ko) | 2009-02-19 |
WO2007146544A3 (en) | 2008-01-31 |
JP2009540438A (ja) | 2009-11-19 |
CN102841858A (zh) | 2012-12-26 |
EP2024832A2 (en) | 2009-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101200477B1 (ko) | 프로세서 코어 스택 익스텐션 | |
US10817201B2 (en) | Multi-level memory with direct access | |
JP6314355B2 (ja) | メモリ管理方法およびデバイス | |
US8250332B2 (en) | Partitioned replacement for cache memory | |
US9098417B2 (en) | Partitioning caches for sub-entities in computing devices | |
US20170371654A1 (en) | System and method for using virtual vector register files | |
US10496550B2 (en) | Multi-port shared cache apparatus | |
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 | |
US20070079070A1 (en) | Cache controller | |
KR20110050457A (ko) | 플래시 메모리 저장 장치에서 동적 메모리 할당에 의해 일어나는 자기 축출을 회피하는 방법 | |
US7694041B2 (en) | Method for managing buffers pool and a system using the method | |
US10585701B2 (en) | Dynamically allocating storage elements to provide registers for processing thread groups | |
KR20140070133A (ko) | 메모리 관리 장치, 방법 및 시스템 | |
US8356141B2 (en) | Identifying replacement memory pages from three page record lists | |
US9483502B2 (en) | Computational processing device including request holding units each provided for each type of commands, information processing device including request holding units each provided for each type of commands, and method of controlling information processing device | |
US8443051B2 (en) | Direct memory access buffer management | |
Aamodt et al. | Memory System | |
JP2009026310A (ja) | データ記憶方法 | |
US20220164111A1 (en) | System and method for stream based data placement on hybrid ssd |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
J201 | Request for trial against refusal decision | ||
AMND | Amendment | ||
B701 | Decision to grant | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20150930 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20161028 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20170929 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20180928 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20190924 Year of fee payment: 8 |