KR101683014B1 - 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 - Google Patents
코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 Download PDFInfo
- Publication number
- KR101683014B1 KR101683014B1 KR1020157010661A KR20157010661A KR101683014B1 KR 101683014 B1 KR101683014 B1 KR 101683014B1 KR 1020157010661 A KR1020157010661 A KR 1020157010661A KR 20157010661 A KR20157010661 A KR 20157010661A KR 101683014 B1 KR101683014 B1 KR 101683014B1
- Authority
- KR
- South Korea
- Prior art keywords
- processor
- metric
- instruction
- ipc
- code area
- 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/324—Power saving characterised by the action undertaken by lowering clock frequency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3287—Power saving characterised by the action undertaken by switching off individual functional units in the computer system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3296—Power saving characterised by the action undertaken by lowering the supply or operating voltage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3442—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for planning or managing the needed capacity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0638—Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/885—Monitoring specific for caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/205—Hybrid memory, e.g. using both volatile and non-volatile memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
코드 영역들을 위한 최적 하드웨어 구성들에 대한 코드 영역들의 연속 자동 튜닝을 위한 메커니즘들이 본 명세서에서 기술된다. 하나의 메커니즘은 튜닝 가능 파라미터들의 상이한 세트들로 코드 영역을 실행하는 동안 메트릭을 계산하고 계산된 메트릭들에 기초하여 상이한 세트들 중 하나를 선택함으로써 경계 정해진 코드 영역을 위한 튜닝 가능 파라미터들을 자동적으로 튜닝한다.
Description
본 개시 내용은, 프로세싱 논리, 마이크로프로세서들, 및 프로세서 또는 기타 프로세싱 논리에 의해 실행될 때 논리적, 수학적, 또는 기타 함수 연산(functional operation)들을 실행하는 연관된 명령어 세트 아키텍처의 분야에 관한 것이다.
프로세서들은 제조 시에, 또는 BIOS(Basic Input-Output System)에 의한 것과 같은 시스템 부팅 시간에, 또는 운영 체제(OS)에 의한 것과 같은 실행 시간에 설정될 수 있는 많은 튜닝 가능 파라미터들을 가진다. 이러한 튜닝 가능 파라미터들 중 몇몇은 다음을 포함한다: (1) 몇몇 HW 프리페처들을 턴 온하거나 턴 오프하는 것을 포함하는 하드웨어(HW) 프리페처 설정; (2) SW 프리페치 명령어들을 무시하거나 존중하는 것을 포함하는 소프트웨어(SW) 프리페치 명령어 설정들; (3) 캐시 축출(cache evict)/교체 힌트들을 무시하거나 존중하는 것을 포함하는 캐시 축출/교체 힌트들; (4) 동적으로 캐시 크기들을 구성하는 것을 포함하는 캐시 크기들; (5) DRAM 페이지 개방 정책들 및 버퍼 크기들을 구성하는 것을 포함하는 DRAM 채널들; 및 (6) 다양한 HW 버퍼 크기들 또는 HW 구조 크기들을 구성하는 것을 포함하는 HW 버퍼 크기.
그와 같은 파라미터들은 광범위한 애플리케이션들과 호환 가능하기 위해(예를 들어, BIOS에) 일반적으로 영구적으로 설정된다. 이에 따라, 이러한 설정들은 주어진 애플리케이션에 대해 최적이지 않을 수 있다. 예를 들어, 주어진 프리페처 설정이 애플리케이션 A에 유익할 수 있는 반면, 동일 설정이 애플리케이션 B의 성능을 감소시킬 수 있다. 덧붙여, 프리페처 설정이 광범위한 애플리케이션들에 대해 고정되기 때문에 이 설정은 애플리케이션 B의 실행을 최적화하도록 튜닝되지 않는다.
튜닝 가능 파라미터들(tunable parameters)은 예를 들어 상이한 능력들을 가진 코어들(예를 들어, Atom 및 Xeon 코어들)이 존재하는 이종 코어 프로세서에서 더욱 조악한 알갱이들이 될 수 있다. 여기서, 프리페처 설정을 선발하는 대신에, 전체 코어가 코드 피스를 실행하기 위해 선발된다. Atom 코어가 코드의 어느 한 피스를 실행하는 데에 적절할 수 있었던 반면에, 코드의 또 다른 피스는 Xeon 코어로부터 정말로 혜택을 입을 수 있다.
도 1a는 일 실시예에 따른 시스템의 블록도이다.
도 1b는 일 실시예에 따른 시스템의 블록도이다.
도 1c는 일 실시예에 따른 시스템의 블록도이다.
도 2는 일 실시예에 따른 프로세서의 블록도이다.
도 3a는 일 실시예에 따른 패킹된 데이터 형들을 도해한다.
도 3b는 일 실시예예 따른 패킹된 데이터 형들을 도해한다.
도 3c는 일 실시예에 따른 패킹된 데이터 형들을 도해한다.
도 3d는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 3e는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 3f는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 4a는 일 실시예에 따른 프로세서 마이크로 아키텍처의 요소들을 도해한다.
도 4b는 일 실시예에 따른 프로세서 마이크로 아키텍처의 요소들을 도해한다.
도 5는 일 실시예에 따른 프로세서의 블록도이다.
도 6은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 7은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 8은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 9는 일 실시예에 따른 SoC의 블록도이다.
도 10은 일 실시예에 따른 프로세서의 블록도이다.
도 11은 일 실시예에 따른 IP 코어 개발 시스템의 블록도이다.
도 12는 일 실시예에 따른 아키텍처 에뮬레이션 시스템을 도해한다.
도 13은 일 실시예에 따른 명령어들을 번역하기 위한 시스템을 도해한다.
도 14는 멀티코어 프로세서를 포함하는 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 15는 프로세서에 대한 블록도의 실시예를 도해한다.
도 16은 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 17은 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 18은 일 실시예에 따른 코드 영역들의 연속적 자동 튜닝을 위한 프로세서의 블록도이다.
도 19는 일 실시예에 따른 코드 영역들의 연속적 자동 튜닝을 위한 방법의 흐름도이다.
도 20은 일 실시예에 따른 도 19의 코드 영역들의 연속적 자동 튜닝을 위한 방법의 흐름도이다.
도 1b는 일 실시예에 따른 시스템의 블록도이다.
도 1c는 일 실시예에 따른 시스템의 블록도이다.
도 2는 일 실시예에 따른 프로세서의 블록도이다.
도 3a는 일 실시예에 따른 패킹된 데이터 형들을 도해한다.
도 3b는 일 실시예예 따른 패킹된 데이터 형들을 도해한다.
도 3c는 일 실시예에 따른 패킹된 데이터 형들을 도해한다.
도 3d는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 3e는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 3f는 일 실시예에 따른 명령어 인코딩을 도해한다.
도 4a는 일 실시예에 따른 프로세서 마이크로 아키텍처의 요소들을 도해한다.
도 4b는 일 실시예에 따른 프로세서 마이크로 아키텍처의 요소들을 도해한다.
도 5는 일 실시예에 따른 프로세서의 블록도이다.
도 6은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 7은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 8은 일 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 9는 일 실시예에 따른 SoC의 블록도이다.
도 10은 일 실시예에 따른 프로세서의 블록도이다.
도 11은 일 실시예에 따른 IP 코어 개발 시스템의 블록도이다.
도 12는 일 실시예에 따른 아키텍처 에뮬레이션 시스템을 도해한다.
도 13은 일 실시예에 따른 명령어들을 번역하기 위한 시스템을 도해한다.
도 14는 멀티코어 프로세서를 포함하는 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 15는 프로세서에 대한 블록도의 실시예를 도해한다.
도 16은 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 17은 컴퓨팅 시스템에 대한 블록도의 또 다른 실시예를 도해한다.
도 18은 일 실시예에 따른 코드 영역들의 연속적 자동 튜닝을 위한 프로세서의 블록도이다.
도 19는 일 실시예에 따른 코드 영역들의 연속적 자동 튜닝을 위한 방법의 흐름도이다.
도 20은 일 실시예에 따른 도 19의 코드 영역들의 연속적 자동 튜닝을 위한 방법의 흐름도이다.
하기 설명에서, 본 발명의 철저한 이해를 도모하기 위하여, 특정한 유형의 프로세서 및 시스템 구성, 특정한 하드웨어 구조, 특정한 아키텍처 및 마이크로 아키텍처 세부사항, 특정 레지스터 구성, 특정 명령어 유형, 특정 시스템 컴포넌트, 특정 측정/높이, 특정 프로세서 파이프라인 단 및 연산 등의 예들과 같은 수많은 특정한 세부사항이 제시된다. 그러나, 이 특정한 세부사항들은 본 발명을 실시하는데 반드시 이용될 필요는 없다는 것이 통상의 기술자에게 명백할 것이다. 기타 경우들에서, 특정한 및 대안적 프로세서 아키텍처, 설명된 알고리즘에 대한 특정한 논리 회로/코드, 특정한 펌웨어 코드, 특정한 상호 접속 동작, 특정한 논리 구성, 특정한 제조 기술 및 물질, 특정한 컴파일러 구현, 코드 내의 알고리즘의 특정한 표현, 특정한 전원 차단 및 게이팅 기술/논리 및 컴퓨터 시스템의 기타 특정한 동작 세부사항 등의 공지된 컴포넌트 또는 방법은 본 발명을 불필요하게 모호하게 하는 것을 피하기 위하여 상세히 설명되지 않았다.
이하의 실시예들은 컴퓨팅 플랫폼이나 마이크로프로세서에서와 같은 특정한 집적 회로에서의 에너지 절감 및 에너지 효율 면에서 설명될 수 있지만, 다른 실시예들이 다른 유형의 집적 회로 및 논리 장치들에 적용될 수 있다. 본 명세서에서 기술되는 실시예들의 유사한 기술들 및 교시들이 더 나은 에너지 효율 및 에너지 절감으로부터 역시 혜택을 입을 수 있는 다른 유형의 회로 또는 반도체 장치에 적용될 수 있다. 예를 들어, 개시된 실시예들은 Intel® UltrabooksTM 컴퓨터와 같은 데스크톱 컴퓨터 시스템 또는 휴대용 컴퓨터에 한정되지 않는다. 그리고 핸드헬드 장치, 태블릿, 다른 박형 노트북, SoC(Systems on a chip) 장치, 및 내장된 애플리케이션과 같은 기타 장치들에 또한 이용될 수 있다. 핸드헬드 장치의 몇몇 예들은 셀룰러 폰, 인터넷 프로토콜 장치, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 내장된 애플리케이션들은 전형적으로 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱박스, 네트워크 허브, 광역 네트워크(WAN) 스위치, 또는 하기에서 교시되는 기능들 및 동작들을 수행할 수 있는 임의의 다른 시스템을 포함한다. 더욱이, 본 명세서에서 기술되는 장치, 방법, 및 시스템은 물리적 컴퓨팅 장치에만 제한되지는 않고, 에너지 절감 및 효율을 위한 소프트웨어 최적화에도 관련될 수 있다. 이하의 설명에서 쉽게 명백하게 되는 바와 같이, 본 명세서에서 설명되는 방법, 장치 및 시스템의 실시예들은 (하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합을 참조하였든지 간에) 성능 고려사항과 균형을 이룬 미래 '녹색 기술'에 핵심적인 것들이다.
하기 실시예들이 프로세서를 참조하여 기술되기는 하였지만, 기타 실시예들은 기타 유형의 집적 회로들 및 논리 장치들에 적용 가능하다. 본 발명의 실시예의 유사한 기술 및 교시는 더 높은 파이프라인 처리량 및 향상된 성능으로부터 혜택을 입을 수 있는 다른 유형의 회로 또는 반도체 장치에 적용될 수 있다. 본 발명의 실시예들의 교시는 데이터 조작(data manipulation)을 수행하는 임의의 프로세서나 기계에 적용 가능하다. 그러나, 본 발명은 512 비트, 256 비트, 128 비트, 64 비트, 32 비트, 또는 16 비트 데이터 연산을 실행하는 프로세서나 기계로 제한되지 않고, 데이터의 조작 또는 관리가 실행되는 임의의 프로세서 및 기계에 적용될 수 있다. 덧붙여, 다음의 설명은 예들을 제공하고, 첨부 도면들은 예시를 위해 다양한 예들을 보여준다. 그러나, 이들 예들은 본 발명의 실시예들의 모든 가능한 구현의 빠짐없는 목록을 제공하기 보다는 단지 본 발명의 실시예들의 예들을 제공하기 위한 것일 뿐이므로 제한적 의미로 해석해서는 안 된다.
이하의 예들은 실행 유닛 및 논리 회로의 맥락에서 명령어 취급 및 분배를 기술하지만, 본 발명의 다른 실시예들은 기계에 의해 실행될 때 기계로 하여금 본 발명의 적어도 일 실시예와 일치하는 기능들을 실행하도록 하는 기계 판독 가능 유형(tangible) 매체상에 저장되는 데이터 또는 명령어에 의해 성취될 수 있다. 일 실시예에서, 본 발명의 실시예와 연관되는 기능들은 기계 실행 가능 명령어들로 구체화된다. 이 명령어들은 이 명령어들로 프로그래밍되는 범용 또는 특수 목적 프로세서로 하여금 본 발명의 단계들을 실행하게 야기하기 위해 이용될 수 있다. 본 발명의 실시예들은 본 발명의 실시예들에 따라 하나 이상의 연산들을 실행하도록 컴퓨터(또는 기타 전자 장치)를 프로그래밍하는데 이용될 수 있는 명령어들을 그 상에 저장하는 기계 또는 컴퓨터 판독 가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 대안으로서, 본 발명의 실시예의 동작들은 동작들을 실행하기 위한 고정 기능 논리를 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들과 고정 기능 하드웨어 컴포넌트들의 임의의 조합에 의해 실행될 수 있다.
본 발명의 실시예들을 실행하기 위해 논리를 프로그래밍하는데 이용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 기타 저장 장치와 같은 시스템 내의 메모리에 저장될 수 있다. 더욱이, 명령어들은 네트워크를 통해 또는 기타 컴퓨터 판독 가능 매체에 의해 배포될 수 있다. 따라서, 기계 판독 가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘, 이를테면 플로피 디스크, 광학 디스크, CD-ROM, 및 광자기 디스크, ROM, RAM, EPROM, EEPROM, 자성 또는 광학적 카드, 플래시 메모리, 또는 전기적, 광학적, 음향 또는 기타 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 기타 등등)을 통해 인터넷에 걸쳐서 정보의 전송에 사용되는 유형의 기계 판독 가능 저장 장치를 포함할 수 있지만 이것들에만 제한되는 것은 아니다. 따라서, 컴퓨터 판독 가능 매체는, 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 전자적 명령어나 정보를 저장 또는 전송하기에 적합한 임의 유형의 유형 기계 판독 가능 매체를 포함한다.
설계는 작성으로부터 시뮬레이션을 거쳐 제조에 이르기까지 다양한 국면들을 거칠 수 있다. 설계를 나타내는 데이터는 다수의 방식으로 설계를 나타낼 수 있다. 첫째로, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어(hardware description language) 또는 또 다른 기능적 기술 언어를 사용하여 표현될 수 있다. 부가적으로, 논리 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델은 설계 절차의 몇몇 국면들에서 산출될 수 있다. 더욱이, 대부분의 설계들은, 몇몇 국면들에서, 하드웨어 모델에서의 다양한 장치들의 물리적 배치를 표현하는 데이터 레벨에 도달한다. 종래의 반도체 제조 기법들이 이용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생산하기 위해 사용되는 마스크들에 대한 상이한 마스크 층들상의 다양한 피처들의 유무를 지정하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의 형태의 기계 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 저장 장치는, 이러한 정보를 전송하도록 변조되거나 기타 방식으로 발생되는 광학적 또는 전기적 파형을 통해 전송되는 정보를 저장하는 기계 판독 가능 매체일 수 있다. 코드 또는 설계를 표시하거나 전달하는 전기적 반송파가 전송될 때, 전기적 신호의 복사, 버퍼링 또는 재전송이 실행되는 한, 새로운 사본이 만들어진다. 따라서, 통신 공급자 또는 네트워크 공급자는 유형의 기계 판독 가능 매체상에 본 발명의 실시예들의 기술을 구체화한, 반송파 내에 인코딩된 정보와 같은 아티클을 적어도 일시적으로 저장할 수 있다.
최신 프로세서들에서는, 각종의 코드 및 명령어들을 처리 및 실행하기 위해 다수의 상이한 실행 유닛이 이용된다. 일부 명령어들은 더 빨리 완료되는 반면 다른 명령어들은 완료하는 데에 다수의 클록 주기를 요구할 수 있기 때문에, 모든 명령어들이 동등하게 생성되는 것은 아니다. 명령어들의 처리율이 보다 빠를수록, 프로세스의 전체 성능은 더 향상된다. 따라서 동일한 수의 명령어들을 가능한 한 빨리 실행하는 것이 유리할 것이다. 그러나, 더 큰 복잡성을 가지고 실행 시간 및 프로세서 리소스 측면에서 더 많은 것을 요구하는 소정 명령어들이 있다. 예를 들면, 부동 소수점 명령어들, 로드/저장 연산들, 데이터 이동 등이 있다.
더 많은 컴퓨터 시스템들이 인터넷, 텍스트와 멀티미디어 애플리케이션들에 사용됨에 따라, 부가적 프로세서 지원이 시간이 지나면서 도입되었다. 일 실시예에서, 명령어 세트는, 데이터 형, 명령어, 레지스터 아키텍처, 어드레싱 모드, 메모리 아키텍처, 인터럽트 및 예외 처리, 외부 입력 및 출력(I/O)을 포함하는 하나 이상의 컴퓨터 아키텍처들과 연관될 수 있다.
일 실시예에서, 명령어 세트 아키텍처(instruction set architecture: ISA)는 하나 이상의 명령어 세트를 구현하는데 이용되는 프로세서 논리 및 회로를 포함하는 하나 이상의 마이크로 아키텍처에 의해 구현될 수 있다. 그에 따라, 상이한 마이크로 아키텍처를 갖는 프로세서들은 공통 명령어 세트의 적어도 일부분을 공유할 수 있다. 예를 들어, Intel® Pentium 4 프로세서들, Intel® CoreTM 프로세서들, 및 캘리포니아주 서니베일 소재의 Advanced Micro Devices Inc.로부터의 프로세서들은 거의 동일한 버전의 x86 명령어 세트(더 새로운 버전이 부가된 몇몇 확장들이 있음)를 구현하지만, 상이한 내부 설계들을 갖는다. 마찬가지로, ARM Holdings, Ltd., MIPS, 또는 이들의 실시권자 또는 채택자들과 같은 기타 프로세서 개발사들에 의해 설계된 프로세서들은 공통 명령어 세트의 적어도 일부분을 공유할 수 있지만 상이한 프로세서 설계들을 포함할 수 있다. 예를 들어, ISA의 동일 레지스터 아키텍처는 전용 물리적 레지스터, 레지스터 리네이밍 메커니즘을 이용하는(예를 들어, RAT(Register Alias Table), ROB(Reorder Buffer) 및 라타이어먼트 레지스터 파일(retirement register file)을 이용하는) 하나 이상의 동적으로 할당된 물리적 레지스터들을 포함하는 새로운 또는 공지된 기술을 이용하여 상이한 마이크로 아키텍처들에서 상이한 방식들로 구현될 수 있다. 일 실시예에서, 레지스터들은 소프트웨어 프로그래머에 의해 어드레싱 가능하거나 가능하지 않은 하나 이상의 레지스터들, 레지스터 아키텍처들, 레지스터 파일들, 또는 기타 레지스터 세트들을 포함할 수 있다.
일 실시예에서, 한 명령어는 하나 이상의 명령어 포맷들을 포함할 수 있다. 일 실시예에서, 한 명령어 포맷은, 무엇보다도, 수행될 연산 및 해당 연산이 그에 대해 수행될 피연산자(들)를 지정하는 다양한 필드들(비트들의 수, 비트들의 로케이션 등)을 표시할 수 있다. 몇몇 명령어 포맷들은 명령어 템플릿들(또는 서브포맷들)에 의해 정의되어 더 분해될 수 있다. 예를 들어, 한 주어진 명령어 포맷의 명령어 템플릿들은 명령어 포맷의 필드들의 상이한 서브세트들을 갖도록 정의되거나 및/또는 한 주어진 필드가 상이하게 해석되게끔 정의될 수 있다. 일 실시예에서, 한 명령어는 명령어 포맷을 이용하여 (및 만일 정의되어 있다면, 해당 명령어 포맷의 명령어 템플릿들 중 한 주어진 것으로) 표현되고 또한 연산 및 이 연산이 그에 대해 연산할 피연산자들을 지정하거나 표시한다.
과학, 금융, 자동 벡터화된 범용, RMS(recognition, mining and synthesis), 및 시각적 및 멀티미디어 애플리케이션들(예를 들어, 2D/3D 그래픽, 이미지 프로세싱, 비디오 압축/압축 해제, 음성 인식 알고리즘들 및 오디오 조작)은 동일 연산이 대단히 많은 수의 데이터 아이템에 대해 수행될 것을 요구할 수 있다. 일 실시예에서, SIMD는 프로세서로 하여금 다중 데이터 성분에 대한 한 연산을 수행하도록 야기하는 명령어 유형을 지칭한다. SIMD 기술은 레지스터 내의 비트들을 각각이 별개의 값을 표현하는 복수의 고정 크기 또는 가변 크기 데이터 성분으로 논리적으로 분할할 수 있는 프로세서들에서 이용될 수 있다. 예를 들어, 일 실시예에서, 64 비트 레지스터 내의 비트들은 각각이 별개의 16 비트 값을 표현하는 4개의 별개의 16 비트 데이터 성분을 포함하는 소스 피연산자로서 조직될 수 있다. 이러한 유형의 데이터는 '패킹된(packed)' 데이터 형 또는 '벡터' 데이터 형이라고 지칭할 수 있고, 이런 데이터 형의 피연산자들은 패킹된 데이터 피연산자들 또는 벡터 피연산자들이라고 지칭된다. 일 실시예에서, 패킹된 데이터 아이템 또는 벡터는 단일 레지스터 내에 저장되는 패킹된 데이터 성분들의 시퀀스일 수 있고, 패킹된 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(또는 '패킹된 데이터 명령어' 또는 '벡터 명령어')의 소스 또는 목적지 피연산자일 수 있다. 일 실시예에서, SIMD 명령어는, 데이터 성분들의 동일하거나 상이한 수를 가지며 및 동일하거나 상이한 데이터 성분 순서로, 동일하거나 상이한 사이즈의 목적지 벡터 피연산자(결과 벡터 피연산자라고도 함)를 발생하기 위해 2개의 소스 벡터 피연산자에 대해 수행될 단일 벡터 연산을 지정한다.
x86, MMXTM 명령어 세트, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어들을 포함하는 명령어 세트를 가지는 Intel® CoreTM 프로세서들, VFP(Vector Floating Point) 및/또는 NEON 명령어들을 포함하는 명령어 세트를 가지는 ARM Cortex® 계열의 프로세서들과 같은 ARM 프로세서들, 및 중국 과학원(Chinese Academy of Sciences)의 ICT(Institute of Computing Technology)에 의해 개발된 Loongson 계열의 프로세서들과 같은 MIPS 프로세서들에 의해 채택된 것과 같은 SIMD 기술은 애플리케이션 성능의 상당한 향상을 가능하게 해주었다(CoreTM 및 MMXTM은 캘리포니아주 산타클라라 소재의 인텔사의 등록 상표 또는 상표임).
일 실시예에서, 목적지 및 소스 레지스터들/데이터는 대응하는 데이터 또는 연산의 소스 및 목적지를 표현하는 총칭적 용어들이다. 몇몇 실시예들에서, 이들은 레지스터들, 메모리, 또는 묘사된 것들과 다른 명칭들 또는 기능들을 갖는 다른 저장 지역들에 의해 구현될 수 있다. 예를 들어, 일 실시예에서, "DEST1"은 임시 저장 레지스터 또는 기타 저장 지역인 반면, "SRC1" 및 "SRC2"는 제1 및 제2 소스 저장 레지스터 또는 기타 저장 지역일 수 있고, 계속 그런 식으로 될 수 있다. 다른 실시예들에서, SRC 및 DEST 저장 지역들 중 2개 이상은 동일한 저장 지역(예컨대, SIMD 레지스터) 내의 상이한 데이터 저장 장치 요소들에 대응할 수 있다. 일 실시예에서, 예를 들어 제1 및 제2 소스 데이터에 대해 수행되는 연산의 결과를 목적지 레지스터들로서 역할하는 2개의 소스 레지스터 중 하나에 라이트백(write back)함으로써, 소스 레지스터들 중 하나는 목적지 레지스터로서 또한 행동할 수 있다.
도 1a를 참조하면, 명령어를 실행하기 위한 실행 유닛들을 포함하는 프로세서를 갖도록 형성되는 예시적 컴퓨터 시스템의 블록도가 도시되는데, 여기서 상호 접속들 중 하나 이상이 본 발명의 일 실시예에 따른 하나 이상의 특징들을 구현한다. 시스템(100)은, 본 명세서에 기술되는 실시예에 따라, 데이터를 처리하기 위한 알고리즘들을 수행하는 논리를 포함하는 실행 유닛들을 채택하는 프로세서(102)와 같은 컴포넌트를 포함한다. 시스템(100)은 캘리포니아주 산타클라라 소재의 인텔사로부터 입수 가능한 PENTIUM IIITM, PENTIUM 4TM, Xeon™, Itanium, XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초한 프로세싱 시스템을 나타내지만, 기타 시스템들(기타 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션, 셋톱박스 등을 포함함)도 사용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 워싱턴주 레드몬드 소재의 마이크로소프트사로부터 입수 가능한 WINDOWS™ 운영 체제의 버전을 실행할 수 있지만, 기타 운영 체제들(예컨대, UNIX 및 Linux), 내장된 소프트웨어, 및/또는 그래픽 사용자 인터페이스들도 역시 사용될 수 있다. 따라서, 본 발명의 실시예들은 하드웨어 회로 및 소프트웨어의 임의의 특정한 조합에만 제한되지는 않는다.
실시예들은 컴퓨터 시스템들에만 제한되지는 않는다. 본 발명의 대안 실시예들은 핸드헬드 장치들 및 내장된 애플리케이션들과 같은 다른 장치들에서 이용될 수 있다. 핸드헬드 장치들의 일부 예들은 휴대폰, 인터넷 프로토콜 장치, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 내장된 애플리케이션들은 마이크로 컨트롤러, DSP(digital signal processor), SoC(system on chip), 네트워크 컴퓨터(NetPC), 셋톱박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 적어도 일 실시예에 따라 하나 이상의 명령어들을 수행할 수 있는 임의의 기타 시스템을 포함할 수 있다.
이 예시된 실시예에서, 프로세서(102)는 적어도 하나의 명령어를 수행하게 될 알고리즘을 구현하기 위한 하나 이상의 실행 유닛들(108)을 포함한다. 일 실시예가 단일 프로세서 데스크톱 또는 서버 시스템의 맥락에서 기술될 수 있지만, 대안 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브' 시스템 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호를 처리하기 위한 프로세서(102)를 포함한다. 프로세서(102)는, 하나의 실례가 되는 예로서, 예를 들어 CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는 디지털 신호 처리기와 같은 임의의 기타 프로세서 장치를 포함한다. 프로세서(102)는 프로세서(102)와 시스템(100) 내의 기타 컴포넌트들 사이에서 데이터 신호들을 전송하는 프로세서 버스(110)에 결합된다. 시스템(100)의 요소들(예를 들어, 그래픽 가속기(112), 메모리 컨트로러 허브(116), 메모리(120), I/O 컨트롤러 허브(124), 무선 송수신기(126), 플래시 BIOS(128), 네트워크 컨트롤러(134), 오디오 컨트롤러(136), 직렬 확장 포트(138), I/O 컨트롤러(140) 등)은 통상의 기술자에게 공지되어 있는 이들의 종래 기능들을 수행한다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함한다. 아키텍처에 의존하여, 프로세서(102)는 단일 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 기타 실시예들은 특정 구현 및 필요성에 따라 내부 및 외부 캐시들 양쪽의 조합을 포함한다. 레지스터 파일(106)은 정수 레지스터들, 부동 소수점 레지스터들, 벡터 레지스터들, 뱅크형 레지스터들, 섀도우 레지스터들, 체크포인트 레지스터들, 상태 레지스터들, 및 명령어 포인터 레지스터를 포함하는 다양한 레지스터들에 상이한 유형의 데이터를 저장한 것이다.
정수 및 부동 소수점 연산들을 수행하는 논리를 포함하는 실행 유닛(108)도 프로세서(102) 내에 상주한다. 프로세서(102)는, 하나의 실시예에서, 실행될 때, 소정 매크로 명령어들에 대한 알고리즘들을 실행하거나 복잡한 시나리오들을 취급하는 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함한다. 여기서, 마이크로코드는 프로세서(102)에 대한 논리 버그들/픽스(fix)들을 취급하기 위해 잠재적으로 갱신 가능하다. 일 실시예에서, 실행 유닛(108)은 패킹된 명령어 세트(109)를 취급하는 논리를 포함한다. 명령어들을 실행하는 연관 회로와 함께, 범용 프로세서(102)의 명령어 세트에 패킹된 명령어 세트(109)를 포함시킴으로써, 많은 멀티미디어 애플리케이션들에 의해 이용되는 연산들은 범용 프로세서(102)에서 패킹된 데이터를 이용하여 수행될 수 있다. 따라서, 많은 멀티미디어 애플리케이션들은 패킹된 데이터에 대한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전폭(full width)을 이용함으로써 가속될 수 있고 보다 효율적으로 실행될 수 있다. 이는 한번에 하나의 데이터 성분에 대한 하나 이상의 연산들을 수행하기 위해 프로세서의 데이터 버스에 걸쳐서 보다 작은 데이터 유닛들을 전송할 필요를 잠재적으로 제거한다.
실행 유닛(108)의 대안 실시예들이 또한 마이크로 컨트롤러들, 내장된 프로세서들, 그래픽 장치들, DSP들 및 기타 유형의 논리 회로에 사용될 수 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 DRAM(dynamic random access memory) 장치, SRAM(static random access memory) 장치, 플래시 메모리 장치, 또는 기타 메모리 장치를 포함한다. 메모리(120)는 프로세서(102)에 의해 실행될 데이터 신호들에 의해 표현되는 명령어들 및/또는 데이터를 저장한다.
시스템 논리 칩(116)은 프로세서 버스(110) 및 메모리(120)에 결합된다. 예시된 실시예에서의 시스템 논리 칩(116)은 메모리 컨트롤러 허브(memory controller hub: MCH)이다. 프로세서(102)는 프로세서 버스(110)를 통하여 MCH(116)와 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위해 및 그래픽 명령들, 데이터 및 텍스처들의 저장을 위해 메모리(120)에게 큰 대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120), 및 시스템(100) 내의 기타 컴포넌트들 사이에서 데이터 신호들을 안내(direct)하고 또한 프로세서 버스(110), 메모리(120), 및 시스템 I/O(122) 사이에서 그 데이터 신호들을 브리징하기 위한 것이다. 몇몇 실시예들에서, 시스템 논리 칩(116)은 그래픽 컨트롤러(112)에 결합하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통하여 메모리(120)에 결합된다. 그래픽 카드(112)는 AGP(Accelerated Graphics Port) 상호 접속부(114)를 통해 MCH(116)에게 결합된다.
시스템(100)은 MCH(116)를 I/O 컨트롤러 허브(ICH)(130)에게 결합시키기 위해 독점적 허브 인터페이스 버스(122)를 사용한다. ICH(130)는 로컬 I/O 버스를 통하여 일부 I/O 장치들에게의 직접 접속들을 제공한다. 로컬 I/O 버스는 주변 장치들을 메모리(120), 칩셋, 및 프로세서(102)에게 접속하기 위한 고속 I/O 버스이다. 일부 예들은 오디오 컨트롤러, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 저장 장치(124), 사용자 입력 및 키보드 인터페이스들을 포함하는 레거시 I/O 컨트롤러, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 컨트롤러(134)이다. 데이터 저장 장치(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 장치, 플래시 메모리 장치, 또는 기타 대용량 저장 장치를 포함할 수 있다.
시스템의 또 다른 실시예에 대해, 일 실시예에 따른 명령어는 SoC와 함께 사용될 수 있다. SoC의 일 실시예는 프로세서 및 메모리를 포함한다. 하나의 그러한 시스템에 대한 메모리는 플래시 메모리이다. 플래시 메모리는 프로세서 및 기타 시스템 컴포넌트들과 동일한 다이상에 자리 잡을 수 있다. 부가적으로, 메모리 컨트롤러 또는 그래픽 컨트롤러와 같은 기타 논리 블록들도 SoC상에 자리 잡을 수 있다.
도 1b는 본 발명의 일 실시예의 원리를 구현하는 데이터 프로세싱 시스템(140)을 예시한다. 통상의 기술자라면 본 명세서에 기술되는 실시예들이 본 발명의 실시예들의 범위를 벗어나지 않고서 대안 프로세싱 시스템들에서 사용될 수 있다는 것을 쉽게 알 수 있을 것이다.
컴퓨터 시스템(140)은 일 실시예에 따라 적어도 하나의 명령어를 수행할 수 있는 프로세싱 코어(159)를 포함한다. 일 실시예에 있어서, 프로세싱 코어(159)는 CISC, RISC 또는 VLIW 유형 아키텍처를 포함하지만 이들에만 제한되지는 않는 임의 유형의 아키텍처의 프로세싱 유닛을 나타낸다. 프로세싱 코어(159)는 또한 하나 이상의 공정 기술로 제조하기에 적합할 수 있고 또한 기계 판독 가능 매체상에서 충분히 상세히 표현됨으로써 상기 제조를 용이하게 하기에 적합할 수 있다.
프로세싱 코어(159)는 실행 유닛(142), 레지스터 파일(들)의 세트(145), 및 디코더(144)를 포함한다. 프로세싱 코어(159)는 또한 본 발명의 실시예들의 이해에 필요하지 않은 부가적 회로(도시 생략)를 포함한다. 실행 유닛(142)은 프로세싱 코어(159)에 의해 수신되는 명령어들을 실행하는 데 이용된다. 통상적인 프로세서 명령어들을 수행하는 것에 부가하여, 실행 유닛(142)은 패킹된 데이터 포맷들에 대한 연산들을 수행하기 위해 패킹된 명령어 세트(143) 내의 명령어들을 수행할 수 있다. 패킹된 명령어 세트(143)는 본 발명의 실시예들을 수행하기 위한 명령어들 및 기타 패킹된 명령어들을 포함한다. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 결합된다. 레지스터 파일(145)은 데이터를 포함하는 정보를 저장하기 위한 프로세싱 코어(159)상의 저장 장치 지역을 나타낸다. 전술한 바와 같이, 패킹된 데이터를 저장하는 데 이용되는 저장 장치 지역이 결정적인 중요성을 갖지 않는다는 것을 이해해야 한다. 실행 유닛(142)은 디코더(144)에 결합된다. 디코더(144)는 프로세싱 코어(159)에 의해 수신되는 명령어들을 제어 신호들 및/또는 마이크로코드 엔트리 포인트들이 되도록 디코딩하는 데 이용된다. 이들 제어 신호 및/또는 마이크로코드 엔트리 포인트들에 응답하여, 실행 유닛(142)은 적절한 연산들을 수행한다. 일 실시예에서, 디코더는 어느 연산이 명령어 내에 표시되는 대응 데이터에 대해 수행되어야만 하는지를 표시하는 명령어의 연산 부호(opcode)를 인터프리팅하는 데 사용된다.
프로세싱 코어(159)는, 예를 들어 SDRAM(synchronous dynamic random access memory) 컨트롤(146), SRAM(static random access memory) 컨트롤(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA/CF(personal computer memory card international association/compact flash) 카드 컨트롤(149), LCD(liquid crystal display) 컨트롤(150), DMA(direct memory access) 컨트롤러(151), 및 대안 버스 마스터 인터페이스(152)를 포함할 수 있지만 이들로만 제한되지는 않는 다양한 기타 시스템 장치들과 통신하기 위해 버스(141)와 결합된다. 일 실시예에서, 데이터 프로세싱 시스템(140)은 또한 I/O 버스(153)를 통하여 다양한 I/O 장치들과 통신하기 위한 I/O 브리지(154)를 포함할 수 있다. 이러한 I/O 장치들은, 예를 들어, UART(universal asynchronous receiver/transmitter)(155), USB (156), 블루투스 무선 UART(157) 및 I/O 확장 인터페이스(158)를 포함할 수 있지만 이들로만 제한되지는 않는다.
데이터 프로세싱 시스템(140)의 일 실시예는 텍스트 스트링 비교 연산을 포함하는 SIMD 연산들을 수행할 수 있는 모바일, 네트워크 및/또는 무선 통신 및 프로세싱 코어(159)를 제공한다. 프로세싱 코어(159)는, Walsh-Hadamard 변환, FFT(fast Fourier transform), DCT(discrete cosine transform), 및 이들 각자의 역 변환들과 같은 이산 변환들; 색 공간 변환, 비디오 인코드 움직임 추정 또는 비디오 디코드 움직임 보상과 같은 압축/압축 해제 기술; 및 PCM(pulse coded modulation)과 같은 변/복조(modulation/demodulation: MODEM) 기능들을 포함하는 다양한 오디오, 비디오, 이미징 및 통신 알고리즘들로 프로그래밍될 수 있다.
도 1c는 SIMD 텍스트 스트링 비교 연산을 실행할 수 있는 데이터 프로세싱 시스템의 또 다른 대안 실시예를 도해한다. 하나의 대안 실시예에 따라, 데이터 프로세싱 시스템(160)은 주 프로세서(166), SIMD 보조 프로세서(161), 캐시 메모리(167), 및 입출력 시스템(168)을 포함할 수 있다. 입출력 시스템(168)은 무선 인터페이스(169)에 결합될 수 있다. SIMD 보조 프로세서(161)는 일 실시예에 따라 명령어들을 포함하는 연산들을 수행할 수 있다. 프로세싱 코어(170)는 하나 이상의 공정 기술들로 제조하기에 적합할 수 있고, 기계 판독 가능 매체상에서 충분히 상세히 표현됨으로써 프로세싱 코어(170)를 포함하는 데이터 프로세싱 시스템(160)의 전부 또는 일부의 제조를 용이하게 하기에 적합할 수 있다.
일 실시예에 대해, SIMD 보조 프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들)의 세트(164)를 포함한다. 주 프로세서(166)의 일 실시예는 실행 유닛(162)에 의한 실행을 위한 일 실시예에 따라 명령어들을 포함하는 명령어 세트(163)의 명령어들을 인식하는 디코더(165)를 포함한다. 대안 실시예들에 대해, SIMD 보조 프로세서(161)는 또한 명령어 세트(163)의 명령어들을 디코딩하는 디코더(165B)의 적어도 일부를 포함한다. 프로세싱 코어(170)는 또한 본 발명의 실시예들의 이해에 필요하지 않은 부가적 회로(도시 생략)를 포함한다.
동작 시에, 주 프로세서(166)는 캐시 메모리(167), 및/또는 입출력 시스템(168)과의 상호 작용들을 포함하는 일반적 유형의 데이터 처리 연산들을 제어하는 데이터 처리 명령어들의 스트림을 실행한다. 데이터 처리 명령어들의 스트림 내에는 SIMD 보조 프로세서 명령어들이 내장된다. 주 프로세서(166)의 디코더(165)는 이들 SIMD 보조 프로세서 명령어들을, 소속된 SIMD 보조 프로세서(161)에 의해 실행되어야 하는 유형인 것으로서 인식한다. 그에 따라, 주 프로세서(166)는 보조 프로세서 버스(166)상에 이들 SIMD 보조 프로세서 명령어들(또는 SIMD 보조 프로세서 명령어들을 나타내는 제어 신호들)을 발행하는데, 이 명령어들은 보조 프로세서 버스로부터 임의의 소속된 SIMD 보조 프로세서들에 의해 수신된다. 이 경우에, SIMD 보조 프로세서(161)는 자신에 대해 의도된 임의의 수신된 SIMD 보조 프로세서 명령어들을 받아들여서 실행할 것이다.
SIMD 보조 프로세서 명령어들에 의한 처리를 위해 무선 인터페이스(169)를 통하여 데이터가 수신될 수 있다. 일례로, 음성 통신이 디지털 신호 형태로 수신될 수 있고, 이것은 음성 통신을 나타내는 디지털 오디오 샘플들을 재생하기 위해 SIMD 보조 프로세서 명령어들에 의해 처리될 수 있다. 다른 예로, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림 형태로 수신될 수 있고, 이것은 디지털 오디오 샘플들 및/또는 모션 비디오 프레임들을 재생하기 위해 SIMD 보조 프로세서에 의해 처리될 수 있다. 프로세싱 코어(170)의 일 실시예에서, 주 프로세서(166) 및 SIMD 보조 프로세서(161)는 실행 유닛(162), 레지스터 파일(들)의 세트(164), 및 일 실시예에 따라 명령어들을 포함하는 명령어 세트(163)의 명령어들을 인식하는 디코더(165)를 포함하는 단일 프로세싱 코어(170) 내에 통합된다.
도 2는 본 발명의 일 실시예에 따라 명령어들을 수행하기 위한 논리 회로들을 포함하는 프로세서(200)에 대한 마이크로 아키텍처의 블록도이다. 몇몇 실시예들에서, 일 실시예에 따른 명령어는 바이트, 워드, 더블워드, 쿼드워드 등의 사이즈뿐만 아니라, 단정도 및 배정도 정수 및 부동 소수점 데이터 형들과 같은 데이터 형들을 갖는 데이터 성분들에 대해 연산하도록 구현될 수 있다. 일 실시예에서, 순차적(in-order) 프론트 엔드(201)는 실행될 명령어들을 페치하고 이들이 프로세서 파이프라인에서 추후에 이용되도록 준비하는 프로세서(200)의 일부분이다. 프론트 엔드(201)는 몇 개의 유닛을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(prefetcher)(226)는 메모리로부터 명령어들을 페치하고 이들을 명령어 디코더(228)에게 공급하고, 명령어 디코더는 다음 차례로 이들을 디코딩하거나 인터프리팅한다. 예를 들어, 일 실시예에서, 디코더는 수신된 명령어를, 기계가 실행할 수 있는 "마이크로 명령어들" 또는 "마이크로 연산들"(마이크로 op 또는 uops라고도 함)이라고 불리는 하나 이상의 연산들이 되도록 디코딩한다. 다른 실시예들에서, 디코더는 명령어를, 일 실시예에 따른 연산들을 수행하기 위해 마이크로 아키텍처에 의해 이용되는 연산 부호 및 대응 데이터 및 제어 필드들이 되도록 파싱한다. 일 실시예에서, 트레이스 캐시(230)는 디코딩된 uops를 취하고, 실행을 위해 이것들을 uop 큐(234) 내의 프로그램 정렬된 시퀀스들 또는 트레이스들이 되도록 조립한다. 트레이스 캐시(230)가 복합 명령어를 만날 때, 마이크로코드 ROM(232)은 연산을 완료하는데 필요한 uops를 제공한다.
일부 명령어들은 단일 마이크로 op가 되도록 변환되는 반면, 다른 명령어들은 전체 연산을 완료하기 위해 몇 개의 마이크로 op들을 필요로 한다. 일 실시예에서, 명령어를 완료하는 데에 4개를 넘는 마이크로 op가 필요한 경우, 디코더(228)는 명령어를 행하기 위해 마이크로코드 ROM(232)에 접근한다. 일 실시예에 대해, 명령어는 명령어 디코더(228)에서의 처리를 위해 작은 개수의 마이크로 op들이 되도록 디코딩될 수 있다. 또 다른 실시예에서, 한 명령어는 다수의 마이크로 op들이 연산을 달성하는데 필요하다면 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 마이크로 코드 ROM(232)으로부터 일 실시예에 따라 하나 이상의 명령어들을 완료하기 위한 마이크로 코드 시퀀스들을 판독하도록 정확한 마이크로 명령어 포인터를 결정하기 위해 엔트리 포인트 PLA(programmable logic array)를 참조한다. 마이크로코드 ROM(232)이 명령어에 대해 마이크로 op들을 시퀀싱하는 것을 마친 후에, 기계의 프론트 엔드(201)는 트레이스 캐시(230)로부터 마이크로 op들을 페치하는 것을 재개한다.
비순차적(out-of-order) 실행 엔진(203)에서는 명령어들이 실행을 위해 준비된다. 비순차적 실행 논리는 명령어들이 파이프라인을 따라 나아가고 실행을 위해 스케줄링됨에 따라 성능을 최적화하기 위해 명령어들의 흐름을 매끄럽게 하고 재정렬하기 위한 다수의 버퍼를 가진다. 할당기 논리는 각각의 uop가 실행하기 위하여 필요로 하는 기계 버퍼들 및 리소스들을 할당한다. 레지스터 리네이밍 논리는 논리 레지스터들을 레지스터 파일 내의 엔트리들상으로 리네이밍한다. 할당기는 또한 명령어 스케줄러들: 메모리 스케줄러, 고속 스케줄러(202), 저속/범용 부동 소수점 스케줄러(204), 및 단순 부동 소수점 스케줄러(206) 앞에서, 메모리 연산들에 대한 하나 및 비 메모리 연산들에 대한 하나인 2개의 uop 큐 중 하나에 각각의 uop에 대한 엔트리를 할당한다. uop 스케줄러들(202, 204, 206)은 이들의 종속적 입력 레지스터 피연산자 소스들의 준비 상태 및 uops가 이들의 연산을 완료하기 위해 필요로 하는 실행 리소스들의 가용성에 기초하여 uop가 실행할 준비가 되어 있는 때를 결정한다. 일 실시예의 고속 스케줄러(202)는 주 클록 주기의 각각의 절반에 스케줄링될 수 있는 반면, 기타 스케줄러들은 주 프로세서 클록 주기당 한번 스케줄링될 수 있을 뿐이다. 스케줄러들은 디스패치 포트들이 실행을 위해 uops를 스케줄링하는 것을 중재한다.
레지스터 파일들(208, 210)은 실행 블록(211) 내에서 스케줄러들(202, 204, 206)과 실행 유닛들(212, 214, 216, 218, 220, 222, 224) 사이에 위치한다. 제각기, 정수 및 부동 소수점 연산들에 대하여 개별 레지스터 파일(208, 210)이 있다. 일 실시예의 각각의 레지스터 파일(208, 210)은 또한 레지스터 파일에 아직 기입되지 않은 방금 완료된 결과들을 새로운 종속 uops에게 바이패스하거나 포워딩할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 서로 데이터를 통신할 수 있다. 일 실시예에 대해, 정수 레지스터 파일(208)은 2개의 개별 레지스터 파일, 즉 데이터의 하위 32 비트에 대한 하나의 레지스터 파일 및 데이터의 상위 32 비트에 대한 제2 레지스터 파일이 되도록 나누어진다. 일 실시예의 부동 소수점 레지스터 파일(210)은 부동 소수점 명령어들이 통상적으로 폭이 64 내지 128 비트인 피연산자들을 갖기 때문에 128 비트 폭 엔트리들을 갖는다.
실행 블록(211)은 명령어들이 실제로 실행되는 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은 마이크로 명령어들이 실행하는 데에 필요로 하는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. 일 실시예의 프로세서(200)는 많은 실행 유닛들: 주소 발생 유닛(AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)을 포함한다. 일 실시예에서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD, 및 SSE, 또는 기타 연산들을 실행한다. 일 실시예의 부동 소수점 ALU(222)는 나눗셈, 제곱근, 및 나머지 마이크로 op들을 실행하는 64비트 바이 64비트 부동 소수점 나눗셈기(64 bit by 64 bit floating point divider)를 포함한다. 본 발명의 실시예에 대해, 부동 소수점 값을 수반하는 명령어들은 부동 소수점 하드웨어에 의해 취급될 수 있다. 일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(216, 218)에게 주어진다. 일 실시예의 고속 ALU들(216, 218)은 절반 클록 주기의 실효 대기 시간(latency)으로 고속 연산들을 실행할 수 있다. 일 실시예에 대해, 가장 복잡한 정수 연산들은 저속 ALU(220)에게 주어지는데, 이는 저속 ALU(220)가 곱셈기, 시프트들, 플래그 논리, 및 브랜치 처리와 같은 긴 대기 시간 유형의 연산들을 위한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/저장 연산들은 AGU들(212, 214)에 의해 실행된다. 일 실시예에 대해, 정수 ALU들(216, 218, 220)은 64 비트 데이터 피연산자들에 대해 정수 연산들을 수행하는 맥락에서 기술된다. 대안 실시예들에서, ALU들(216, 218, 220)은 16, 32, 128, 256 등을 포함하는 다양한 데이터 비트들을 지원하기 위해 구현될 수 있다. 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭들의 비트들을 갖는 소정 범위의 피연산자들을 지원하기 위해 구현될 수 있다. 일 실시예에 대해, 부동 소수점 유닛들(222, 224)은 SIMD 및 멀티미디어 명령어들과 함께 128 비트 폭의 패킹된 데이터 피연산자들에 대해 연산할 수 있다.
일 실시예에서, uops 스케줄러들(202, 204, 206)은, 부모 로드(parent load)가 실행을 마치기 전에, 종속 연산들을 디스패치한다. uops가 프로세서(200)에서 추론적으로 스케줄링되고 실행되므로, 프로세서(200)는 또한 메모리 미스(memory miss)들을 취급하는 논리를 포함한다. 만일 데이터 로드가 데이터 캐시에서 미스하면, 스케줄러에게 일시적으로 부정확한 데이터를 남기는 파이프라인 내에서의 실행(flight) 중인 종속 연산들이 있을 수 있다. 리플레이(replay) 메커니즘은 부정확한 데이터를 이용하는 명령어들을 추적하고 재실행한다. 종속 연산들이 리플레이될 것이고 비종속 연산들은 완료되도록 허용된다. 프로세서의 일 실시예의 스케줄러들 및 리플레이 메커니즘은 텍스트 스트링 비교 연산들을 위한 명령어 시퀀스들을 붙잡도록 또한 설계된다.
용어 "레지스터들"이란 피연산자들을 식별하기 위한 명령어들의 일환으로서 이용되는 온 보드 프로세서 저장 장치 로케이션들을 지칭할 수 있다. 다시 말하면, 레지스터들은(프로그래머의 관점에서 볼 때) 프로세서의 외부로부터 이용 가능한 것들일 수 있다. 그러나, 실시예의 레지스터들은 그 의미에 있어서 특정 유형의 회로에만 제한되어서는 안 된다. 오히려, 실시예의 레지스터는 데이터를 저장 및 제공하고, 본 명세서에 기술되는 기능들을 수행할 수 있다. 본 명세서에 기술되는 레지스터들은 전용 물리적 레지스터들, 레지스터 리네이밍을 이용하는 동적으로 할당된 물리적 레지스터들, 전용 및 동적으로 할당되는 물리적 레지스터들의 조합들 등과 같은 임의 수의 상이한 기술들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 패킹된 데이터에 대한 8개의 멀티미디어 SIMD 레지스터를 포함한다. 이하에서의 논의를 위해, 레지스터들은 패킹된 데이터를 보유하도록 설계된 데이터 레지스터들, 예컨대 캘리포니아주 산타클라라 소재의 인텔사의 MMX™ 기술에 의해 가능하게 되는 마이크로프로세서들에서의 64 비트 폭의 MMX 레지스터(일부 경우들에서, "mm" 레지스터들이라고도 함)인 것으로 이해된다. 정수 및 부동 소수점 형식들 모두에서 이용 가능한 이들 MMX 레지스터들은 SIMD 및 SSE 명령어들을 동반하는 패킹된 데이터 성분들로 연산할 수 있다. 유사하게, SSE2, SSE3, SSE4, 또는 그 이상(총칭적으로 "SSEx"라고 함)의 기술에 관련된 128 비트 폭의 XMM 레지스터들도 이러한 패킹된 데이터 피연산자들을 보유하는 데 사용될 수 있다. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장하는데 있어서, 레지스터들은 2개의 데이터 형 사이에서 구분할 필요가 없다. 일 실시예에서, 정수 및 부동 소수점은 동일한 레지스터 파일에 포함되거나 상이한 레지스터 파일들에 포함된다. 더욱이, 일 실시예에서, 부동 소수점 및 정수 데이터는 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다.
하기 도면들의 예들에서는, 다수의 데이터 피연산자들이 기술된다. 도 3a는 본 발명의 일 실시예에 따라 멀티미디어 레지스터들 내의 다양한 패킹된 데이터 형 표현들을 예시한 것이다. 도 3a는 128 비트 폭 피연산자들에 대한 패킹된 바이트(310), 패킹된 워드(320), 및 패킹된 더블워드(dword)(330)에 대한 데이터 형들을 예시한 것이다. 이 예의 패킹된 바이트 포맷(310)은 128 비트 길이이고 16개의 패킹된 바이트 데이터 성분을 포함한다. 바이트는 여기서 8 비트의 데이터로서 정의된다. 각각의 바이트 데이터 성분에 대한 정보는 바이트 0에 대해 비트 7 내지 비트 0에, 바이트 1에 대해 비트 15 내지 비트 8에, 바이트 2에 대해 비트 23 내지 비트 16에, 및 마지막으로 바이트 15에 대해 비트 120 내지 비트 127에 저장된다. 따라서 모든 가용 비트들은 레지스터에서 사용된다. 이 저장 장치 배치에 의해 프로세서의 저장 장치 효율성이 증가한다. 마찬가지로, 16개의 데이터 성분이 접근됨에 따라, 이제 하나의 연산이 16개의 데이터 성분에 대해 병렬로 수행될 수 있다.
일반적으로, 한 데이터 성분은 동일한 길이의 기타 데이터 성분들과 함께 단일 레지스터 또는 메모리 로케이션에 저장되는 개개의 데이터 피스이다. SSEx 기술에 관련된 패킹된 데이터 시퀀스들에서, XMM 레지스터에 저장되는 데이터 성분들의 수는 128 비트를 개개의 데이터 성분의 비트들의 길이로 나눈 값이다. 유사하게, MMX 및 SSE 기술에 관련된 패킹된 데이터 시퀀스들에서, MMX 레지스터에 저장되는 데이터 성분들의 수는 64 비트를 개개의 데이터 성분의 비트들의 길이로 나눈 값이다. 도 3a에 예시되어 있는 데이터 형들이 128 비트 길이이지만, 본 발명의 실시예들은 64 비트 폭, 또는 기타 사이즈의 피연산자들로도 연산할 수 있다. 이 예의 패킹된 워드 포맷(320)은 128 비트 길이이고 8개의 패킹된 워드 데이터 성분들을 포함한다. 각각의 패킹된 워드는 16 비트 정보를 포함한다. 도 3a의 패킹된 더블워드 포맷(330)은 128 비트 길이이고 4개의 패킹된 더블워드 데이터 성분을 포함한다. 각각의 패킹된 더블워드 데이터 성분은 32 비트 정보를 포함한다. 패킹된 쿼드워드는 128 비트 길이이고 2개의 패킹된 쿼드워드 데이터 성분을 포함한다.
도 3b는 대안적 레지스터 내(in-register) 데이터 저장 포맷들을 예시한 것이다. 각각 패킹된 데이터는 둘 이상의 독립적 데이터 성분을 포함할 수 있다. 3개의 패킹된 데이터 포맷이 예시되었다; 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343). 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 성분들을 포함한다. 대안 실시예에 있어서, 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 성분들을 포함할 수 있다. 패킹된 하프(341)의 하나의 대안 실시예는 8개의 16 비트 데이터 성분을 포함하는 128 비트 길이를 갖는다. 패킹된 싱글(342)의 일 실시예는 128 비트 길이이고 4개의 32 비트 데이터 성분을 포함한다. 패킹된 더블(343)의 일 실시예는 128 비트 길이이고 2개의 64 비트 데이터 성분을 포함한다. 그와 같은 패킹된 데이터 포맷들은 예를 들어 96 비트, 160 비트, 192 비트, 224 비트, 256 비트, 또는 그 이상인 기타 레지스터 길이들로 추가로 확장될 수 있다.
도 3c는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 부호형 및 무부호형 패킹된 데이터 형 표현들을 예시한다. 무부호형 패킹된 바이트 표현(344)은 SIMD 레지스터 내의 무부호형 패킹된 바이트의 저장을 예시한다. 각각의 바이트 데이터 성분에 대한 정보는 바이트 0에 대해 비트 7 내지 비트 0에, 바이트 1에 대해 비트 15 내지 비트 8에, 바이트 2에 대해 비트 23 내지 비트 16에, 및 마지막으로 바이트 15에 대해 비트 120 내지 비트 127에 저장된다. 따라서, 모든 가용 비트들은 레지스터에서 사용된다. 이 저장 배치에 의해 프로세서의 저장 효율성이 증가할 수 있다. 마찬가지로, 16개의 데이터 성분이 접근됨에 따라, 이제 하나의 연산이 16개의 데이터 성분에 대해 병렬 방식으로 수행될 수 있다. 부호형 패킹된 바이트 표현(345)은 부호형 패킹된 바이트의 저장을 예시한다. 모든 바이트 데이터 성분마다의 8번째 비트가 부호 표시자인 것을 주의하라. 무부호형 패킹된 워드 표현(346)은 SIMD 레지스터에서 워드 7 내지 워드 0가 어떻게 저장되는지를 예시한다. 부호형 패킹된 워드 표현(347)은 무부호형 패킹된 워드 레지스터 내 표현(346)과 유사하다. 각각의 워드 데이터 성분의 16번째 비트가 부호 표시자인 것을 주의하라. 무부호형 패킹된 더블워드 표현(348)은 더블워드 데이터 성분들이 어떻게 저장되는지를 보여준다. 부호형 패킹된 더블워드 표현(349)은 무부호형 패킹된 더블워드 레지스터 내 표현(348)과 유사하다. 필요한 부호 비트가 각각의 더블워드 데이터 성분의 32번째 비트인 것을 주의하라.
도 3d는 32 비트 또는 더 많은 비트들을 가지는 연산 인코딩(opcode) 포맷(360), 및 "IA-32 인텔 아키텍처 소프트웨어 개발자의 매뉴얼 2권: 명령어 세트 레퍼런스"(이는 intel.com/design/litcentr의 월드 와이드 웹(www)상에서 캘리포니아, 산타클라라에 소재한 인텔사로부터 입수 가능함)에 기술된 일 유형의 opcode 포맷에 대응하는 레지스터/메모리 피연산자 어드레싱 모드들의 일 실시예의 묘사이다. 일 실시예에서, 명령어는 필드들(361 및 362) 중 하나 이상에 의해 인코딩될 수 있다. 2개까지의 소스 피연산자 식별자(364 및 365)를 포함하는, 명령어당 2개까지의 피연산자 로케이션이 식별될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일한 반면, 다른 실시예들에서는 이들이 상이하다. 대안 실시예에 있어서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일한 반면, 다른 실시예들에서는 이들은 상이하다. 일 실시예에서, 소스 피연산자 식별자들(364 및 365)에 의해 식별되는 소스 피연산자들 중 하나는 텍스트 스트링 비교 연산들의 결과에 의해 오버라이트되는 반면, 다른 실시예들에서는 식별자(364)는 소스 레지스터 요소에 대응하고 식별자(365)는 목적지 레지스터 요소에 대응한다. 일 실시예에서, 피연산자 식별자들(364 및 365)은 32 비트 또는 64 비트 소스 및 목적지 피연산자들을 식별하는 데 사용될 수 있다.
도 3e는 40 비트 또는 그 이상의 비트들을 갖는 또 다른 대안 연산 인코딩(opcode) 포맷(370)의 묘사이다. opcode 포맷(370)은 opcode 포맷(360)에 대응하고 프리픽스 바이트(378)를 포함한다. 일 실시예에 따른 명령어는 필드들(378, 371, 및 372) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 2개까지의 피연산자 로케이션들이 소스 피연산자 식별자들(374 및 375)에 의해 및 프리픽스 바이트(378)에 의해 식별될 수 있다. 일 실시예에서, 프리픽스 바이트(378)는 32 비트 또는 64 비트 소스 및 목적지 피연산자들을 식별하는 데 사용될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일한 반면, 다른 실시예들에서는 이들이 상이하다. 대안 실시예에 있어서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일한 반면, 다른 실시예들에서는 이들은 상이하다. 일 실시예에서, 명령어는 피연산자 식별자들(374 및 375)에 의해 식별되는 피연산자들 중 하나 이상에 대해 연산하고, 피연산자 식별자들(374 및 375)에 의해 식별되는 하나 이상의 피연산자들은 명령어의 결과들에 의해 오버라이트되는 반면, 다른 실시예들에서는 식별자들(374 및 375)에 의해 식별되는 피연산자들은 또 다른 레지스터 내의 또 다른 데이터 성분에 기입된다. opcode 포맷들(360 및 370)은 부분적으로 MOD 필드들(363 및 373)에 의해 및 스케일 인덱스 베이스 및 변위 바이트들에 의해 지정되는 레지스터 투 레지스터, 메모리 투 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 즉치(register by immediate), 레지스터 투 메모리 어드레싱을 허용한다.
그 다음에 도 3f를 참조하면, 몇몇 대안 실시예들에서, 64 비트 SIMD 산술 연산들이 CDP(coprocessor data processing) 명령어를 통해 수행될 수 있다. 연산 인코딩(opcode) 포맷(380)은 CDP opcode 필드들(382 및 389)을 갖는 하나의 그런 CDP 명령어를 묘사한다. 이 유형의 CDP 명령어는, 대안 실시예들에 대해, 필드들(383, 384, 387 및 388) 중 하나 이상에 의해 인코딩될 수 있다. 2개까지의 소스 피연산자 식별자들(385 및 390) 및 하나의 목적지 피연산자 식별자(386)를 포함하는 명령어당 3개까지의 피연산자 로케이션들이 식별될 수 있다. 보조 프로세서의 일 실시예는 8, 16, 32, 및 64 비트 값들에 대해 연산할 수 있다. 일 실시예에서, 명령어는 정수 데이터 성분들에 대해 수행된다. 몇몇 실시예들에서, 명령어는 조건 필드(381)를 이용하여 조건부로 실행될 수 있다. 몇몇 실시예들에 대해, 소스 데이터 사이즈들은 필드(383)에 의해 인코딩될 수 있다. 몇몇 실시예들에서, 제로(Z), 부정(N), 캐리(C), 및 오버플로(V) 검출이 SIMD 필드들에 대해 이뤄질 수 있다. 일부 명령어들에 대해, 포화 형(type of saturation)이 필드(384)에 의해 인코딩될 수 있다.
도 4a는 본 발명의 적어도 일 실시예에 따른 순차적 파이프라인(in-order pipeline) 및 레지스터 리네이밍 단(register renaming stage), 비순차 발행/실행 파이프라인을 예시하는 블록도이다. 도 4b는 본 발명의 적어도 일 실시예에 따라 프로세서에 포함될 순차적 아키텍처 코어(in-order architecture core) 및 레지스터 리네이밍 논리, 비순차적 발행/실행 논리를 예시하는 블록도이다. 도 4a에서의 실선 박스들은 순차적 파이프라인을 나타내는 반면, 점선 박스들은 레지스터 리네이밍, 비순차적 발행/실행 파이프라인을 나타낸다. 마찬가지로, 도 4b에서의 실선 박스들은 순차적 아키텍처 논리를 나타내는 반면, 점선 박스들은 레지스터 리네이밍 논리 및 비순차적 발행/실행 논리를 나타낸다.
도 4a에서, 프로세서 파이프라인(400)은 페치 단(402), 길이 디코드 단(404), 디코드 단(406), 할당 단(408), 리네이밍 단(410), 스케줄링[디스패치(dispatch) 또는 발행이라고도 함] 단(412), 레지스터 판독/메모리 판독 단(414), 실행 단(416), 라이트백(write back)/메모리 기입 단(418), 예외 처리 단(422), 및 커밋(commit) 단(424)을 포함한다.
도 4b에서, 화살표들은 2개 이상의 유닛들 간의 결합을 나타내고, 화살표의 방향은 그런 유닛들 사이의 데이터 흐름의 방향을 나타낸다. 도 4b는 실행 엔진 유닛(450)에게 결합되는 프론트 엔드 유닛(front end unit)(430)을 포함하는 프로세서 코어(490)를 보여주는데, 실행 엔진 유닛과 프론트 엔드 유닛은 메모리 유닛(470)에게 결합된다.
코어(490)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(490)는, 예를 들어 네트워크 또는 통신 코어, 압축 엔진, 그래픽 코어 등의 특수 목적 코어일 수 있다.
프론트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 결합되는 브랜치 예측 유닛(432)을 포함하고, 명령어 캐시 유닛은 명령어 TLB(translation lookaside buffer)(436)에 결합되고, 명령어 TLB는 명령어 페치 유닛(438)에 결합되고, 명령어 페치 유닛은 디코드 유닛(440)에 결합된다. 디코드 유닛 또는 디코더는 명령어들을 디코딩하고, 출력으로서 하나 이상의 마이크로연산들, 마이크로코드 엔트리 포인트들, 마이크로명령어들, 기타 명령어들, 또는 최초 명령어들로부터 디코딩되거나 다른 식으로 최초 명령어들을 반영하거나 최초 명령어들로부터 도출되는 기타 제어 신호들을 발생한다. 디코더는 다양하고 상이한 메커니즘들을 이용하여 구현될 수 있다. 적합한 메커니즘들의 예들은, 룩업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 마이크로코드 ROM(Read Only Memory)들 등을 포함하지만, 이것들에만 국한되지는 않는다. 명령어 캐시 유닛(434)은 메모리 유닛(470) 내의 레벨 2(L2) 캐시 유닛(476)에 추가로 결합된다. 디코드 유닛(440)은 실행 엔진 유닛(450) 내의 리네이밍/할당기 유닛(452)에 결합된다.
실행 엔진 유닛(450)은 리타이어먼트(retirement) 유닛(454) 및 하나 이상의 스케줄러 유닛(들)(456)의 세트에 결합되는 리네이밍/할당기 유닛(452)을 포함한다. 스케줄러 유닛(들)(456)은 명령어 대기열들, 중앙 명령어 윈도 등을 포함하는 임의 수의 상이한 스케줄러들을 표현한다. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들) 유닛(들)(458)에 결합된다. 각각의 물리적 레지스터 파일(들) 유닛들(458)은, 그 중 상이한 것들이 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 기타 등등, 상태(예를 들어, 실행될 다음 명령어의 주소인 명령어 포인터), 기타 등등과 같은 하나 이상의 상이한 데이터 형들을 저장하는 하나 이상의 물리적 레지스터 파일들을 표현한다. 물리적 레지스터 파일(들) 유닛(들)(458)은 레지스터 리네이밍 및 비순차적 실행이 구현될 수 있는 다양한 방법들(예를 들어, 리오더 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 장래 파일(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵들 및 레지스터들의 풀을 이용하여; 기타 등등)을 예시하기 위해 리타이어먼트 유닛(454)에 의해 중첩된다. 일반적으로, 아키텍처 레지스터들은 프로세서의 외부로부터 또는 프로그래머의 조망으로부터 볼 수 있다. 레지스터들은 임의의 알려진 특정 유형의 회로에만 제한되지는 않는다. 다양하고 상이한 유형들의 레지스터들이 이들이 본 명세서에서 설명된 바와 같이 데이터를 저장하고 제공할 수 있는 한 적합하다. 적합한 레지스터들의 예들은, 전용 물리적 레지스터들, 레지스터 리네이밍을 이용하는 동적 할당 물리적 레지스터들, 전용 및 동적 할당 물리적 레지스터들의 조합들, 기타 등등을 포함하지만, 이것들에만 제한되는 것은 아니다. 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 결합된다. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛들(462)의 세트 및 하나 이상의 메모리 접근 유닛들(464)의 세트를 포함한다. 실행 유닛(462)은 다양한 유형의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대하여 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. 몇몇 실시예들은 특정 기능(function)들이나 기능들의 세트들에 전용인 다수의 실행 유닛을 포함할 수 있지만, 기타 실시예들은 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 다중 실행 유닛을 포함할 수 있다. 소정 실시예들이 데이터/연산들의 소정 유형들에 대한 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 그들 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 메모리 접근 파이프라인, 및 개별 메모리 접근 파이프라인의 경우에 이 파이프라인의 실행 클러스터가 메모리 접근 유닛(들)(464)을 갖는 소정 실시예들이 구현됨)을 생성하기 때문에, 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458), 및 실행 클러스터(들)(460)는 가능하게는 복수인 것으로 보여진다. 개별 파이프라인들이 사용되는 경우, 이들 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해해야 한다.
메모리 접근 유닛(464)의 세트는 메모리 유닛(470)에 결합되고, 메모리 유닛은 레벨 2(L2) 캐시 유닛(476)에 결합되는 데이터 캐시 유닛(474)에 결합되는 데이터 TLB 유닛(472)을 포함한다. 하나의 예시적 실시예에서, 메모리 접근 유닛(464)은 로드 유닛, 저장 주소 유닛, 및 저장 데이터 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(470) 내의 데이터 TLB 유닛(472)에 결합된다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨들의 캐시에 및 결국에는 주 메모리에 결합된다.
예시로서, 예시적 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다. 1) 명령어 페치(438)가 페치 및 길이 디코딩 단들(402 및 404)을 수행하고; 2) 디코드 유닛(440)은 디코드 단(406)을 수행하고; 3) 리네이밍/할당기 유닛(452)은 할당 단(408) 및 리네이밍 단(410)을 수행하고; 4) 스케줄러 유닛(들)(456)은 스케줄링 단(412)을 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 단(414)을 수행하고; 실행 클러스터(460)는 실행 단(416)을 수행하고; 6) 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 라이트 백/메모리 기입 단(418)을 수행하고; 7) 다양한 유닛들은 예외 처리 단(422)에 수반될 수 있고; 및 8) 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 커밋 단(424)을 수행한다.
코어(490)는 하나 이상의 명령어 세트들((예를 들어, 새로운 버전들에서는 부가된 몇몇 확장을 갖는) x86 명령어 세트); 캘리포니아 서니베일의 MIPS 테크놀로지의 MIPS 명령어 세트; (캘리포니아 서니베일의 ARM 홀딩스의 (NEON 등의 추가의 확장을 갖는) ARM 명령어 세트를 지원할 수 있다.
코어는 (두 개 이상의 병렬 세트들의 연산들 또는 스레드들을 실행하는) 멀티스레딩을 지원할 수 있고, 또한 시분할 멀티스레딩(time sliced multithreading), (단일 물리적 코어가, 해당 물리적 코어가 동시에 멀티스레딩할 수 있는 스레드들 각각에 대해 논리적 코어를 제공하는) 동시 멀티스레딩, 또는 이들의 조합(예를 들어, Intel® Hyperthreading 기술에서와 같은 시분할 페칭 및 디코딩과 그 후의 동시 멀티스레딩)을 포함하는 다양한 방식으로 멀티스레딩을 지원할 수 있다는 점을 이해해야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수도 있다는 점을 이해해야 한다. 프로세서의 예시적 실시예가 또한 별개의 명령어 및 데이터 캐시 유닛들(434/474) 및 공유된 L2 캐시 유닛(476)을 포함하고 있기는 하지만, 대안 실시예들은 예를 들어 레벨 1(L1) 내부 캐시와 같은 명령어들과 데이터 양쪽 모두에 대한 단일 내부 캐시, 또는 다중 레벨의 내부 캐시를 가질 수 있다. 몇몇 실시예들에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시들은 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 5는 본 발명의 실시예들에 따른 통합 메모리 컨트롤러 및 그래픽을 갖는 단일 코어 프로세서 및 멀티코어 프로세서(500)의 블록도이다. 도 5에서의 실선 박스들은 단일의 코어(502A), 시스템 에이전트(510), 및 하나 이상의 버스 컨트롤러 유닛들(516)의 세트를 갖는 프로세서(500)를 예시한 것인 반면, 옵션적 부가인 점선 박스들은 다중 코어(502A-N), 시스템 에이전트 유닛(510) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(514)의 세트, 및 통합 그래픽 논리(508)를 갖는 대안 프로세서(500)를 예시한 것이다.
메모리 계층 구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(506)의 세트, 및 통합 메모리 컨트롤러 유닛들(514)의 세트에 결합되는 외부 메모리(도시 생략)를 포함한다. 공유 캐시 유닛들(506)의 세트는 레벨 2(L 2), 레벨 3(L 3), 레벨 4(L 4), 또는 기타 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, 최종 레벨 캐시(last level cache: LLC), 및/또는 이들의 조합들을 포함할 수 있다. 일 실시예에서 링 기반 상호 접속 유닛(ring based interconnect unit)(512)이 통합 그래픽 논리(508), 공유 캐시 유닛들(506)의 세트, 및 시스템 에이전트 유닛(510)을 상호 접속시키는 한편, 대안 실시예들은 이러한 유닛들을 상호 접속시키기 위한 임의 수의 공지된 기법들을 이용할 수 있다.
몇몇 실시예들에서, 코어들(502A-N) 중 하나 이상은 멀티스레딩이 가능하다.
시스템 에이전트(510)는 코어들(502A-N)을 조정하고 작동시키는 그런 컴포넌트들을 포함한다. 시스템 에이전트 유닛(510)은, 예를 들어 PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(502A-N) 및 통합 그래픽 논리(508)의 전력 상태를 조절하는 데 필요한 논리 및 컴포넌트거나 이것을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(502A-N)은 아키텍처 및/또는 명령어 세트 면에서 동종이거나 이종일 수 있다. 예를 들어, 코어들(502A-N) 중 일부는 순차적일 수 있는 반면, 다른 것들은 비순차적이다. 또 다른 예로서, 코어들(502A-N) 중 2개 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 것들은 해당 명령어 세트의 서브세트 또는 상이한 명령어 세트를 실행할 수 있다.
프로세서는 CoreTM i3, i5, i7, 2 듀오 및 쿼드, Xeon™, Itanium™, XScaleTM 또는 StrongARMTM 프로세서와 같은 범용 프로세서일 수 있는데, 이들은 캘리포니아 산타클라라에 소재한 인텔사로부터 입수 가능하다. 대안적으로, 프로세서는 ARM Holdings, Ltd, MIPS 등과 같은 또 다른 회사의 것일 수 있다. 프로세서는, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 보조 프로세서, 내장된 프로세서, 또는 그와 유사한 것과 같은 특수 목적 프로세서일 수도 있다. 프로세서는 하나 이상의 칩상에 구현될 수 있다. 프로세서(500)는, 예를 들어 BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 임의의 것을 이용하여 하나 이상의 기판들의 일부가 될 수 있고/또는 이들 기판들상에 구현될 수 있다.
도 6 내지 도 8은 프로세서(500)를 포함하기에 적합한 예시적인 시스템들인 한편, 도 9는 코어들(502) 중 하나 이상을 포함할 수 있는 예시적 SoC(system on a chip)이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 내장된 프로세서들, 디지털 신호 처리기들(DSP들), 그래픽 장치들, 비디오 게임 장치들, 셋톱박스들, 마이크로 컨트롤러들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 기타 전자 장치들에 대한 본 기술 분야에서 공지된 기타 시스템 설계들 및 구성들도 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 기타 실행 논리를 수용할 수 있는 매우 다양한 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 시스템(600)의 블록도가 도시되어 있다. 시스템(600)은 GMCH(graphics memory controller hub)(620)에 결합되는 하나 이상의 프로세서들(610, 615)을 포함할 수 있다. 부가적 프로세서들(615)의 옵션적 속성이 도 6에서 파선들로 표기된다.
각각의 프로세서(610, 615)는 프로세서(500)의 어떤 버전일 수 있다. 그렇지만, 유의할 점은 통합 그래픽 논리 및 통합 메모리 제어 유닛들이 프로세서들(610, 615)에 존재하지 않을 가능성도 있다는 것이다. 도 6은 GMCH(620)가, 예를 들어 DRAM(dynamic random access memory)일 수 있는 메모리(640)에 결합될 수 있다는 것을 예시한다. DRAM은, 적어도 일 실시예의 경우, 비휘발성 캐시와 연관될 수도 있다.
GMCH(620)는 칩셋, 또는 칩셋의 일부분일 수 있다. GMCH(620)는 프로세서(들)(610, 615)와 통신하고 또한 프로세서(들)(610, 615)와 메모리(640) 사이의 상호 작용을 제어할 수 있다. GMCH(620)는 또한 프로세서(들)(610, 615)와 시스템(600)의 기타 요소들 사이의 가속 버스 인터페이스(accelerated bus interface)로서 기능할 수 있다. 적어도 일 실시예에서, GMCH(620)는 FSB(frontside bus)(695)와 같은 멀티 드롭 버스(multi-drop bus)를 통해 프로세서(들)(610, 615)와 통신한다.
더욱이, GMCH(620)는 (평판 디스플레이와 같은) 디스플레이(645)에 결합된다. GMCH(620)는 통합 그래픽 가속기를 포함할 수 있다. GMCH(620)는 다양한 주변 장치들을 시스템(600)에 결합시키는 데 사용될 수 있는 ICH[I/O(input/output) controller hub](650)에 결합된다. 다른 주변 장치(670)와 함께, ICH(650)에 결합되는 개별 그래픽 장치일 수 있는 외부 그래픽 장치(660)가, 예를 들어 도 6의 실시예에 도시되어 있다.
다른 대안으로서, 부가의 또는 상이한 프로세서들이 또한 시스템(600)에 존재할 수 있다. 예를 들어, 부가적 프로세서(들)(615)는 프로세서(610)와 동일한 부가적 프로세서(들), 프로세서(610)에 대해 이종이거나 비대칭인 부가적 프로세서(들), 가속기[예컨대, 그래픽 가속기 또는 DSP(digital signal processing) 유닛 등], FPGA(field programmable gate array)들, 또는 임의의 기타 프로세서를 포함할 수 있다. 아키텍처, 마이크로 아키텍처, 열적, 전력 소비 특성 등을 비롯한 장점 양태(metric of merit)의 범위 면에서 물리 리소스들(610, 615) 간에 다양한 차이점이 있을 수 있다. 이들 차이점은 사실상 프로세서들(610, 615) 중의 비대칭 및 이종성(heterogeneity)으로서 자신들을 내보일 수 있다. 적어도 일 실시예에서, 다양한 프로세서들(610, 615)이 동일한 다이 패키지에 상주할 수 있다.
이제 도 7을 참조하면, 본 발명의 일 실시예에 따른 제2 시스템(700)의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 포인트 투 포인트(point-to-point) 상호 접속 시스템이고, 포인트 투 포인트 상호 접속(750)을 통해 결합되는 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 각각의 프로세서들(770 및 780)은 프로세서들(610, 615) 중 하나 이상으로서의 프로세서(500)의 어떤 버전일 수 있다.
2개의 프로세서(770 및 780)를 갖는 것으로 도시되지만, 본 발명은 이것에만 한정되지는 않는다는 것을 이해해야 한다. 다른 실시예들에서, 하나 이상의 부가적 프로세서들이 주어진 프로세서에 존재할 수 있다.
프로세서들(770 및 780)은 제각기 통합 메모리 컨트롤러 유닛들(772 및 782)을 포함하는 것으로 도시된다. 프로세서(770)는 또한 그 버스 컨트롤러 유닛들의 일부로서 포인트 투 포인트(P-P) 인터페이스들(776 및 778)을 포함하고; 마찬가지로, 제2 프로세서(780)는 P-P 인터페이스들(786 및 788)을 포함한다. 프로세서들(770, 780)은 P-P 인터페이스 회로들(778, 788)을 이용하여 포인트 투 포인트(P-P) 인터페이스(750)를 통해 정보를 교환할 수 있다. 도 7에 도시된 것처럼, IMC들(772 및 782)은 프로세서들을 제각기 메모리들, 즉 메모리(732)와 메모리(734)에 결합하는데, 이 메모리들은 제각기 프로세서들에 지역적으로 소속되는 주 메모리의 일부분들일 수 있다.
프로세서들(770, 780)은 각각 포인트 투 포인트 인터페이스 회로들(776, 794, 786, 798)을 이용하여 개개의 P-P 인터페이스들(752, 754)을 통해 칩셋(790)과 정보를 교환할 수 있다. 칩셋(790)은 또한 고성능 그래픽 인터페이스(739)를 통해 고성능 그래픽 회로(738)와 정보를 교환할 수 있다.
공유된 캐시(도시되지 않음)는 프로세서의 어느 쪽이든 포함되거나 양쪽 프로세서의 외부에 있지만 여전히 P-P 상호 접속을 통해 프로세서들과 접속될 수 있어서, 어느 쪽 프로세서이든 이것의 또는 양쪽 프로세서들의 로컬 캐시 정보가 한 프로세서가 저 전력 모드에 놓이는 경우 공유된 캐시에 저장될 수 있게 된다.
칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 결합될 수 있다. 일 실시예에서, 제1 버스(716)는 PCI(peripheral component interconnect) 버스, 또는 PCI 익스프레스 버스 또는 또 다른 3세대 I/O 상호 접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이것에만 한정되지는 않는다.
도 7에 도시된 바와 같이, 다양한 I/O 장치들(714)은, 제1 버스(716)를 제2 버스(720)에 결합하는 버스 브리지(718)와 함께, 제1 버스(716)에 연결될 수 있다. 일 실시예에서, 제2 버스(720)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어 키보드 및/또는 마우스(722), 통신 장치들(727) 및 명령어들/코드 및 데이터(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 장치와 같은 저장 장치 유닛(728)을 포함하는 다양한 장치들이 제2 버스(720)에 결합될 수 있다. 추가로, 오디오 I/O(724)는 제2 버스(720)에 결합될 수 있다. 기타 구조들도 가능하다는 점에 유의하라. 예를 들어, 도 7의 포인트 투 포인트 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 기타 그러한 아키텍처를 구현할 수 있다.
이제 도 8을 참조하면, 본 발명의 일 실시예에 따른 제3 시스템(800)의 블록도가 도시되어 있다. 도 7과 도 8에서의 유사 요소들은 유사 참조 번호들을 지니며, 및 도 7의 소정 양태들은 도 8의 다른 양태들을 모호하게 하는 것을 회피하기 위해 도 8에서 생략되었다.
도 8은 프로세서(870, 880)가, 제각기, 통합 메모리 및 I/O 제어 논리("CL")(872 및 882)를 포함할 수 있다는 것을 예시한다. 적어도 일 실시예에 대해, CL(872, 882)은 도 5 및 도 7과 관련하여 위에서 기술된 것과 같은 통합 메모리 컨트롤러 유닛들을 포함할 수 있다. 또한, CL(872, 882)은 또한 I/O 제어 논리를 포함할 수 있다. 도 8은 메모리들(832, 834)이 CL(872, 882)에 결합되어 있을 뿐만 아니라 I/O 장치(814)가 또한 제어 논리(872, 882)에 결합되어 있는 것을 예시하고 있다. 레거시 I/O 장치들(815)은 칩셋(890)에 결합되어 있다.
이제 도 9를 참조하면, 본 발명의 실시예에 따른 SoC(900)의 블록도가 도시되어 있다. 도 5에 있는 유사한 요소들은 유사한 참조 부호들을 지닌다. 또한, 점선 박스들은 더욱 향상된 SoC들상에 있는 피처들이다. 도 9에서, 상호 접속 유닛(들)(902)은: 하나 이상의 코어들(502A-N)의 세트 및 공유 캐시 유닛(들)(506)을 포함하는 애플리케이션프로세서(910); 시스템 에이전트 유닛(510); 버스 컨트롤러 유닛(들)(516); 통합 메모리 컨트롤러 유닛(들)(514); 통합 그래픽 논리(508), 스틸 및/또는 비디오 카메라 기능성을 제공하기 위한 이미지 프로세서(924), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(926), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(928)를 포함할 수 있는 하나 이상의 미디어 프로세서들(920)의 세트; SRAM(static random access memory) 유닛(930); DMA(direct memory access) 유닛(932); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(940)에 결합되어 있다.
도 10은, 일 실시예에 따라 적어도 하나의 명령어를 수행할 수 있는, 중앙 프로세싱 유닛(CPU) 및 그래픽 프로세싱 유닛(GPU)을 포함하는 프로세서를 예시한다. 일 실시예에서, 적어도 일 실시예에 따라 연산들을 수행하기 위한 명령어는 CPU에 의해 실행될 수 있다. 또 다른 실시예에서, 명령어는 GPU에 의해 수행될 수 있다. 다시 또 다른 실시예에서, 명령어는 GPU 및 CPU에 의해 수행되는 연산들의 조합을 통해 수행될 수 있다. 예를 들어, 일 실시예에서, 일 실시예에 따른 명령어는 GPU상에서의 실행에 대해 수신되고 디코딩될 수 있다. 그러나, 디코딩된 명령어 내의 하나 이상의 연산들은 CPU에 의해 수행될 수 있고, 그 결과는 명령어의 최종 리타이어먼트를 위해 GPU에게 반환될 수 있다. 역으로, 몇몇 실시예들에서, CPU는 1차 프로세서로서 역할하고 GPU는 보조 프로세서로서 역할할 수 있다.
몇몇 실시예들에서, 고도로 병렬인 스루풋(throughput) 프로세서로부터 이득을 보는 명령어들은 GPU에 의해 수행될 수 있는 한편, 더 다단으로 파이프라인화된 아키텍처로부터 이득을 보는 프로세서들의 성능으로부터 이득을 보는 명령어는 CPU에 의해 수행될 수 있다. 예를 들어, 그래픽, 과학 응용, 재무 응용 및 기타의 병렬 작업 부하는 GPU의 성능으로부터 이득을 볼 수 있고 그에 따라 실행될 수 있는 한편, 운영 체제 커널 또는 애플리케이션 코드와 같은 더 순차적인 응용들은 CPU에 더 적합할 수 있다.
도 10에서, 프로세서(1000)는 CPU(1005), GPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 컨트롤러(1025), UART 컨트롤러(1030), SPI/SDIO 컨트롤러(1035), 디스플레이 장치(1040), 메모리 인터페이스 컨트롤러(1045), MIPI 컨트롤러(1050), 플래시 메모리 컨트롤러(1055), DDR(dual data rate) 컨트롤러(1060), 보안 엔진(1065), 및 I2S/I2C 컨트롤러(1070)를 포함한다. 더 많은 CPU들 또는 GPU들 및 기타 주변 장치 인터페이스 컨트롤러들을 포함하는 기타 논리 및 회로들이 도 10의 프로세서에 포함될 수 있다.
적어도 하나 실시예의 하나 이상의 양태들이 프로세서 내에서 다양한 논리를 대표하는 기계 판독 가능 매체상에 저장되는 대표 데이터(representative data)에 의해 구현될 수 있는데, 이 대표 데이터는 기계에 의해 판독될 때 기계로 하여금 본 명세서에서 기술된 기술을 수행하기 위한 논리를 제조하도록 야기한다. "IP 코어들"이라고 알려진 이러한 대표들은, 유형의 기계 판독 가능 매체("테이프")상에 저장될 수 있으며, 논리 또는 프로세서를 실제로 만드는 제조 기계 내에 로딩하기 위해 다양한 고객이나 제조 설비에 공급될 수 있다. 예를 들어, ARM Holdings, Ltd.에 의해 개발된 CortexTM 계열의 프로세서들 및 중국 과학원의 ICT(Institute of Computing Technology)에 의해 개발된 Loongson IP 코어들과 같은 IP 코어들이 텍사스 인스트루먼트, ??컴, 애플, 또는 삼성 등의 다양한 고객 또는 실시권자에게 사용 허가되거나 판매될 수 있고, 이들 고객 또는 실시권자에 의해 생산되는 프로세서들에 구현될 수 있다.
도 11은 일 실시예에 따른 IP 코어들의 개발을 예시하는 블록도를 도시한 것이다. 저장 장치(1130)는 시뮬레이션 소프트웨어(1120) 및/또는 하드웨어 또는 소프트웨어 모델(1110)을 포함한다. 일 실시예에서, IP 코어 설계를 나타내는 데이터가 메모리(1140)(예컨대, 하드 디스크), 유선 연결(예컨대, 인터넷)(1150) 또는 무선 연결(1160)을 통해 저장 장치(1130)에게 제공될 수 있다. 시뮬레이션 도구 및 모델에 의해 발생되는 IP 코어 정보는 이후 IP 코어가 적어도 일 실시예에 따라 적어도 하나의 명령어를 수행하기 위해 제3 자에 의해 제조될 수 있는 제조 시설에게 전송될 수 있다.
몇몇 실시예들에서, 하나 이상의 명령어들은 제1 유형 또는 아키텍처(예컨대, x86)에 대응할 수 있고 또한 상이한 유형 또는 아키텍처(예컨대, ARM)의 프로세서상에서 변역되거나 에뮬레이팅될 수 있다. 일 실시예에 따른 명령어는, 따라서, ARM, x86, MIPS, GPU, 또는 기타 프로세서 유형 또는 아키텍처를 포함하는 임의의 프로세서 또는 프로세서 유형상에서 수행될 수 있다.
도 12는 어떻게 제1 유형의 명령어가 일 실시예에 따라 상이한 유형의 프로세서에 의해 에뮬레이팅되는지를 예시한다. 도 12에서, 프로그램(1205)은 일 실시예에 따라 한 명령어와 동일한 또는 실질적으로 동일한 기능을 수행할 수 있는 몇몇 명령어들을 포함한다. 그렇지만, 프로그램(1205)의 명령어들은 프로세서(1215)와 상이하거나 호환되지 않는 유형 및/또는 포맷을 가질 수 있고, 이는 프로그램(1205)에서의 이 유형의 명령어들이 프로세서(1215)에 의해 선천적으로 실행되지 않을 수도 있다는 것을 의미한다. 그렇지만, 에뮬레이션 논리(1210)의 도움으로, 프로그램(1205)의 명령어들은 프로세서(1215)에 의해 선천적으로 실행될 수 있는 명령어들로 번역된다. 일 실시예에서, 에뮬레이션 논리는 하드웨어로 구현된다. 또 다른 실시예에서, 에뮬레이션 논리는 프로그램(1205)에서의 이 유형의 명령어들을 프로세서(1215)에 의해 선천적으로 실행 가능한 유형으로 번역하는 소프트웨어를 포함하는 유형의(tangible) 기계 판독 가능 매체에 구현된다. 또 다른 실시예들에서, 에뮬레이션 논리는 고정 기능 또는 프로그램가능 하드웨어 및 유형의(tangible) 기계 판독 가능 매체상에 저장되는 프로그램의 조합이다. 일 실시예에서, 프로세서는 에뮬레이션 논리를 포함하는 반면, 다른 실시예들에서 에뮬레이션 논리는 프로세서의 외부에 존재하고 제3자에 의해 제공된다. 일 실시예에서, 프로세서는 프로세서에 포함되거나 그와 연관되는 마이크로코드 또는 펌웨어를 실행함으로써 소프트웨어를 포함하는 유형의(tangible) 기계 판독 가능 매체에 구현되는 에뮬레이션 논리를 로딩할 수 있다.
도 13은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 이진 명령어들을 타깃 명령어 세트에서의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 13은 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(1316)에 의해 선천적으로 실행될 수 있는 x86 이진 코드(1306)를 발생하기 위해 고급언어(1302)로 된 프로그램이 x86 컴파일러(1304)를 사용하여 컴파일링될 수 있다는 것을 보여준다. 적어도 하나의 x86 명령어 세트 코어를 구비한 프로세서(1316)는, 적어도 하나의 x86 명령어 세트 코어를 구비한 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 구비한 Intel 프로세서상에서 실행하는 것을 목표로 하는 애플리케이션 또는 기타 소프트웨어의 오브젝트 코드 버전들을 호환 가능하게 실행하거나 다른 방식으로 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 구비한 Intel 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1304)는, 부가적 연계(linkage) 처리에 의해 또는 부가적 연계 처리 없이, 적어도 하나의 x86 명령어 세트 코어(1316)를 구비한 프로세서상에서 실행될 수 있는 x86 이진 코드(1306)(예컨대, 오브젝트 코드)를 발생하도록 동작 가능한 컴파일러를 나타낸다. 유사하게, 도 13은 적어도 하나의 x86 명령어 세트 코어를 구비하지 않은 프로세서(1314)(예컨대, 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 구비한 프로세서)에 의해 선천적으로 실행될 수 있는 대안 명령어 세트 이진 코드(1310)를 발생하기 위해 고급 언어(1302)로 된 프로그램이 대안 명령어 세트 컴파일러(1308)를 사용하여 컴파일링될 수 있다는 것을 보여준다. 명령어 변환기(1312)는 x86 이진 코드(1306)를 x86 명령어 세트 코어를 구비하지 않은 프로세서(1314)에 의해 선천적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이 변환된 코드가 대안 명령어 세트 이진 코드(1310)와 동일할 것 같지는 않은데, 그 이유는 이것을 할 수 있는 명령어 변환기는 만들기에 어렵기 때문이다; 그러나 변환된 코드는 일반적 연산을 달성할 것이고 대안 명령어 세트로부터의 명령어들로 구성될 것이다. 이와 같이, 명령어 변환기(1312)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 구비하지 않은 프로세서 또는 기타 전자 장치가 x86 이진 코드(1306)를 실행하도록 허용하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
이제 도 14를 참조하면, 멀티코어 프로세서의 실시예의 블록도가 도시되어 있다. 도 14의 실시예에 도시된 바와 같이, 프로세서(1400)는 다중 도메인을 포함한다. 구체적으로는, 코어 도메인(1430)은 복수의 코어(1430A-1430N)를 포함하고, 그래픽 도메인(1460)은 미디어 엔진(1465)을 가지는 하나 이상의 그래픽 엔진들을 포함하고, 시스템 에이전트 도메인(1410)이 있다.
다양한 실시예들에서, 시스템 에이전트 도메인(1410)은 전력 제어 이벤트들 및 전력 관리를 처리하여, 도메인들(1430 및 1460)의 개개의 유닛들(예컨대, 코어들 및/또는 그래픽 엔진들)이 주어진 유닛에서 발생하는 활성화(또는 비활성화)를 고려하여 적절한 전력 모드/레벨(예컨대, 활성, 터보, 슬리프, 하이버네이트(hibernate), 딥 슬리프(deep sleep), 또는 기타 ACPI(Advanced Configuration Power Interface) 유사 상태)에서 동적으로 동작하도록 독립적으로 제어 가능하다. 도메인들(1430 및 1460)의 각각은 상이한 전압 및/또는 전력에서 동작할 수 있고, 더욱이 도메인들 내의 개개의 유닛들 각각은 잠재적으로는 독립적인 주파수 및 전압에서 동작한다. 유의할 점은, 단지 3개의 도메인이 도시되어 있지만, 본 개시의 범주가 이와 관련하여 제한되지 않고, 다른 실시예들에서 부가 도메인들이 존재할 수 있다는 것이다.
도시된 바와 같이, 각각의 코어(1430)는 다양한 실행 유닛들과 부가적 프로세싱 요소들뿐만 아니라 저 레벨 캐시들을 추가로 포함한다. 여기서, 다양한 코어들은 서로에게 및 최종 레벨 캐시(LLC)(1440A-1440N)의 복수의 유닛 또는 슬라이스로 형성되는 공유 캐시 메모리에 결합될 수 있고; 이런 LLC들은 종종 저장 장치 및 캐시 컨트롤러 기능성을 포함하고 또한 코어들 중에서뿐만 아니라 잠재적으로 그래픽 엔진 중에서도 공유된다.
알 수 있는 바와 같이, 링 상호 접속부(1450)는 코어들을 함께 결합시키고, 복수의 링 스톱들(ring stops)(1452A 내지 1452N) - 각각은 코어와 LLC 슬라이스 사이의 결합부(coupling)에 있음 - 을 통해 코어 도메인(1430), 그래픽 도메인(1460) 및 시스템 에이전트 회로(1410) 사이의 상호 접속을 제공한다. 도 14에서 보는 바와 같이, 상호 접속부(1450)는 주소 정보, 데이터 정보, 확인 응답 정보, 및 스누프/무효 정보를 비롯한 다양한 정보를 전달하는 데 사용된다. 링 상호 접속부가 예시되어 있지만, 임의의 공지된 온다이(on-die) 상호 접속부 또는 패브릭이 이용될 수 있다. 예시적인 예로서, 앞서 논의된 패브릭들(예컨대, 또 다른 온다이 상호 접속부, 인텔 온칩 시스템 패브릭(Intel On-chip System Fabric: IOSF), AMBA(Advanced Microcontroller Bus Architecture) 상호 접속부, 다차원 메시 패브릭, 또는 다른 공지된 상호 접속 아키텍처) 중 일부가 유사한 방식으로 활용될 수 있다.
추가로 묘사되는 바와 같이, 시스템 에이전트 도메인(1410)은 연관된 디스플레이의 제어 및 그에 대한 인터페이스를 제공하는 디스플레이 엔진(1412)을 포함한다. 시스템 에이전트 도메인(1410)은 하기와 같은 기타 유닛들을 포함할 수 있다: 시스템 메모리에게 인터페이스를 제공하는 통합 메모리 제어기(1420)(예를 들어, 다중 DIMM으로 구현되는 DRAM; 메모리 일관성 동작들을 실행하기 위한 일관성 논리(coherence logic)(1422). 다중 인터페이스가 존재하여 프로세서와 기타 회로 사이의 상호 접속을 가능케 할 수 있다. 예를 들어, 일 실시예에서, 적어도 하나의 DMI(direct media interface)(1416) 인터페이스가 하나 이상의 PCIeTM 인터페이스들(1414)로서 마찬가지로 제공된다. 디스플레이 엔진 및 이들 인터페이스들은 전형적으로 PCIeTM 브리지(1418)를 통해 메모리에 결합한다. 또한, 부가 프로세서 또는 기타 회로와 같은 기타 에이전트들 사이의 통신을 제공하기 위해, 하나 이상의 기타 인터페이스들(예로, Intel® Quick Path Interconnect(QPI) 패브릭)이 제공될 수 있다.
이제 도 15를 참조하면, 대표적 코어의 블록도가 도시되는데; 구체적으로는, 도 14로부터의 코어(1430)와 같은, 코어의 백 엔드의 논리 블록들이 도시되어 있다. 일반적으로, 도 15에 도시된 구조는 들어오는 명령어들을 페치하고, 다양한 처리(예컨대, 캐싱, 디코딩, 브랜치 예측 등)를 실행하며, 명령어들/연산들을 비순차적(out-of-order: OOO) 엔진(1580)에게 통과시키는데 사용되는 프런트 엔드 유닛(1570)을 가지는 비순차적 프로세서를 포함한다. OOO 엔진(1580)은 디코딩된 명령어들에 대해 추가적 처리를 실행한다.
구체적으로는, 도 15의 실시예에서, 비순차적 엔진(1580)은 프런트 엔드 유닛(1570)으로부터 하나 이상의 마이크로 명령어들 또는 uop들의 형태로 되어 있을 수 있는 디코딩된 명령어들을 수신하고 그들을 레지스터들 및 기타 등등과 같은 적절한 리소스들에 할당하는 할당 유닛(1582)을 포함한다. 그 다음에, 명령어들이 복수의 실행 유닛(1586A-1586N) 중 하나상에서의 실행을 위해 리소스들을 유보(reserve)하고 리소스들을 스케줄링하는 명령어 대기열(reservation station)(1584)에게 제공된다. 예를 들어 무엇보다도 산술논리 연산 유닛들(ALU들), 로드 및 저장 유닛들, 벡터 프로세싱 유닛들(VPU들), 부동 소수점 실행 유닛들을 포함하는 다양한 유형의 실행 유닛들이 존재할 수 있다. 이들 상이한 실행 유닛들로부터의 결과들은 정렬되지 않은 결과들을 받아서 이들을 올바른 프로그램 순서로 반환하는 ROB(reorder buffer)(1588)에게 제공된다.
여전히 도 15를 참조하면, 유의할 점은, 프런트 엔드 유닛(1570) 및 비순차적 엔진(1580) 둘 모두가 메모리 계층구조의 상이한 레벨들에 결합되어 있다는 것이다. 구체적으로는, 명령어 레벨 캐시(1572)가 도시되어 있고, 이는 다음 차례로 중간 레벨 캐시(1576)에 결합되어 있고, 이는 다음 차례로 최종 레벨 캐시(1595)에 결합되어 있다. 일 실시예에서, 최종 레벨 캐시(1595)는 온 칩(때로는 언코어(uncore)라고 함) 유닛(1590)에 구현된다. 예로서, 유닛(1590)은 도 14의 시스템 에이전트(1410)와 유사하다. 앞서 논의한 바와 같이, 언코어(1590)는, 예시된 실시예에서 ED RAM을 통해 구현되는 시스템 메모리(1599)와 통신한다. 또한, 유의할 점은 비순차적 엔진(1580) 내의 다양한 실행 유닛들(1586)이 중간 레벨 캐시(1576)와 또한 통신 상태에 있는 제1 레벨 캐시(1574)와 통신한다는 것이다. 부가적 코어들(1530N-2 - 1530N)이 LLC(1595)에 결합할 수 있다는 것을 또한 유의한다. 도 15의 실시예에서 이런 높은 레벨로 도시되기는 하였지만, 다양한 변경들 및 부가적 컴포넌트들이 존재할 수 있다는 것을 이해해야 한다.
이제 도 16을 참조하면, 본 발명의 실시예에 따른 컴퓨터 시스템에 존재하는 컴포넌트들의 블록도가 도시되어 있다. 도 16에 도시된 바와 같이, 시스템(1600)은 컴포넌트들의 임의의 조합을 포함한다. 이들 컴포넌트들은, IC들, 그 일부분들, 개별 전자 장치들, 또는 기타 모듈들, 논리, 하드웨어, 소프트웨어, 펌웨어, 또는 컴퓨터 시스템에 적응된 이들의 조합으로서, 또는 컴퓨터 시스템의 섀시 내에 다른 식으로 수용되는 컴포넌트들로서 구현될 수 있다. 도 16의 블록도가 컴퓨터 시스템의 많은 컴포넌트들의 높은 레벨의 뷰를 보여주도록 의도된다는 것을 또한 유의한다. 그러나, 다른 구현들에서는, 도시된 컴포넌트들 중 일부가 생략될 수 있고, 부가적 컴포넌트들이 존재할 수 있으며, 도시된 컴포넌트들 중 상이한 배치가 발생할 수 있다는 것을 이해해야 한다. 그 결과, 위에서 기술된 본 발명의 실시예들은 아래 설명되거나 예시되는 상호 접속부들 중 하나 이상의 임의의 부분에 구현될 수 있다.
도 16에 도시된 바와 같이, 프로세서(1610)는, 일 실시예에서, 마이크로프로세서, 멀티코어 프로세서, 멀티스레드 프로세서, 초 저 전압 프로세서, 내장된 프로세서, 또는 기타 공지된 프로세싱 요소를 포함한다. 예시된 구현에서, 프로세서(1610)는 시스템(1600)의 다양한 컴포넌트들 중 많은 것과의 통신을 위한 주 프로세싱 유닛 및 중앙 허브로서 동작한다. 한 예로서, 프로세서(1610)는 SoC로서 구현된다. 특정의 도시된 예에서, 프로세서(1610)는 캘리포니아, 산타클라라에 소재한 인텔사로부터 입수가능한 i3, i5, i7, 또는 또 다른 그와 같은 프로세서와 같은 Intel® 아키텍처 Core™를 갖는 프로세서를 포함한다. 그러나, 캘리포니아, 서니베일에 소재한 AMD(Advanced Micro Devices, Inc.)로부터 입수 가능한 기타 저 전력 프로세서들, 캘리포니아, 서니베일 소재의 MIPS Technologies, Inc.로부터의 MIPS 기반 설계, ARM Holdings, Ltd. 또는 그 고객사, 또는 그 실시권자 또는 채택자들로부터의 실시 허락된 ARM 기반 설계가 Apple A5/A6 프로세서, Qualcomm Snapdragon 프로세서, 또는 TI OMAP 프로세서와 같은 다른 실시예들에서 그 대신에 존재할 수 있다는 것을 이해해야 한다. 그와 같은 프로세서들의 고객 버전들은 많은 것이 수정되고 변경된다는 것을 유의하라; 그러나, 이들은 프로세서 실시 허락자에 의해 제시된 바와 같은 정의된 알고리즘들을 실행하는 특정 명령어 세트를 지원하거나 인식할 수 있다. 여기서, 마이크로 아키텍처 구현은 변할 수 있지만, 프로세서의 아키텍처 기능은 보통 일관적이다. 한 구현에서의 프로세서(1610)의 아키텍처 및 동작에 관한 소정 상세사항이 예시적 예를 제공하기 위해 이하에서 더 논의될 것이다.
프로세서(1610)는, 일 실시예에서, 시스템 메모리(1615)와 통신한다. 예시된 예로서, 이것은 실시예에서 주어진 양의 시스템 메모리를 공급하기 위해 다중 메모리 장치를 통해 구현될 수 있다. 예들로서, 메모리는 JEDEC JESD 209-2E(2009년 4월 공개)에 따른 현행의 LPDDR2 표준, 또는 대역폭을 증가시키기 위해 LPDDR2에 대한 확장들을 제공할 LPDDR3 또는 LPDDR4라고 지칭되는 차세대 LPDDR 표준과 같은 JEDEC(Joint Electron Devices Engineering Council) LPDDR(low power double data rate) 기반 설계에 따른 것일 수 있다. 다양한 구현들에서, 개개의 메모리 장치들은 SDP(single die package), DDP(dual die package), 또는 QDP(quad die package) 등의 상이한 패키징 유형을 가질 수 있다. 이들 장치들은, 몇몇 실시예들에서, 머더보드상으로 직접 납땜되어 저 전력 프로파일 솔루션을 제공하는 한편, 다른 실시예들에서 이 장치들은 주어진 커넥터에 의해 다음 차례로 머더보드에 결합되는 하나 이상의 메모리 모듈로서 구성된다. 물론, 예를 들어, microDIMM들, MiniDIMM들을 포함하지만 이것들에만 제한되지는 않는 상이한 종류들의 DIMM들(dual inline memory modules)인 다른 유형의 메모리 모듈들과 같은 다른 메모리 구현들도 가능하다. 특정 예시적 실시예에서, 메모리는 2GB 내지 16GB로 크기가 정해지고, BGA(ball grid array)를 통해 머더보드상으로 납땜되는 LPDDR2 또는 LPDDR3 메모리 또는 DDR3LM 패키지로서 구성될 수 있다.
데이터, 애플리케이션들, 하나 이상의 운영 체제들 및 기타 등등과 같은 정보의 영구 저장 장치를 제공하기 위해, 대용량 저장 장치(1620)가 또한 프로세서(1610)에 결합될 수 있다. 다양한 실시예들에서, 시스템 응답성을 향상시킬 뿐만 아니라 더 얇고 더 경량의 시스템 설계를 가능케 하기 위해, 이 대용량 저장 장치는 SSD을 통해 구현될 수 있다. 그러나, 다른 실시예들에서, 대용량 저장 장치는 주로, 전원 차단 이벤트 동안에 콘텍스트 상태와 기타 그런 정보의 비휘발성 저장을 가능케 하여 시스템 활동의 재개시 시에 빠른 전원 투입이 일어날 수 있도록 하는 SSD 캐시로서 작용하는 더 작은 용량의 SSD 저장 장치를 갖춘 하드 디스크 드라이브(HDD)를 이용하여 구현될 수 있다. 도 16에 또한 도시된 바와 같이, 플래시 장치(1622)는, 예를 들어, 직렬 주변 장치 인터페이스(SPI; serial peripheral interface)를 통해 프로세서(1610)에 결합될 수 있다. 이 플래시 장치는, BIOS 뿐만 아니라 시스템의 다른 펌웨어를 포함하는 시스템 소프트웨어의 비휘발성 저장을 제공할 수 있다.
다양한 실시예들에서, 시스템의 대용량 저장 장치는 SSD 단독으로, 또는 SSD 캐시를 갖춘 디스크, 광학적 또는 기타 드라이브로서 구현될 수 있다. 몇몇 실시예들에서, 대용량 저장 장치는 SSD으로서 또는, RST(restore) 캐시 모듈과 함께하는 HDD로서 구현된다. 다양한 구현들에서, HDD는 320GB 내지 4 테라바이트(TB) 및 그 이상의 저장 정치를 제공하는 반면, RST 캐시는 24GB 내지 256GB의 용량을 갖는 SSD로 구현된다. 이러한 SSD 캐시는 적절한 레벨의 응답성을 제공하기 위해 단일 레벨 캐시(SLC) 또는 다중 레벨 캐시(MLC) 옵션으로서 구성될 수 있다는 점에 유의한다. SSD 단독 옵션에서, 모듈은 mSATA 또는 NGFF 슬롯 내에서와 같이 다양한 로케이션들에 수용될 수 있다. 예로서, SSD는 120GB 내지 1TB 범위의 용량을 가진다.
다양한 입/출력(10) 장치들이 시스템(1600) 내에 존재할 수 있다. 도 16의 실시예에 특정하게 도시된 것은 섀시의 리드 부분(lid portion) 내에 구성되는 고선명 LCD 또는 LED 패널일 수 있는 디스플레이(1624)이다. 이 디스플레이 패널은 또한, 예를 들어 디스플레이 패널 위에 외부적으로 맞추어진 터치 스크린(1625)을 제공하여 이 터치 스크린과의 사용자 상호 작용을 통해 사용자 입력들이 시스템에 제공되어 예를 들어, 정보의 디스플레이, 정보의 접근 및 기타 등등에 대한 원하는 동작들을 가능케 할 수 있다. 일 실시예에서, 디스플레이(1624)는 고성능 그래픽스 상호 접속부로서 구현될 수 있는 디스플레이 상호 접속부를 통해 프로세서(1610)에 결합될 수 있다. 터치 스크린(1625)은 일 실시예에서 I2C 상호 접속부일 수 있는 또 다른 상호 접속부를 통해 프로세서(1610)에 결합될 수 있다. 도 16에 더 도시된 바와 같이, 터치 스크린(1625)에 더하여, 터치에 의한 사용자 입력은 또한 터치 패드(1630)를 통해 생길 수 있고, 이 터치 패드는 섀시 내에서 구성되고 또한 터치 스크린(1625)과 동일한 I2C 상호 접속부에 결합될 수 있다.
디스플레이 패널은 복수의 모드로 동작할 수 있다. 제1 모드에서, 디스플레이 패널은 디스플레이 패널이 가시 광에 대해 투명한 투명 상태로 배치될 수 있다. 다양한 실시예들에서, 디스플레이 패널의 대부분은 주변부 부근의 베젤을 제외한 디스플레이일 수 있다. 시스템이 노트북 모드에서 동작하고 디스플레이 패널이 투명 상태에서 동작할 때, 사용자는 디스플레이 패널상에 제시되는 정보를 보면서 또한 디스플레이 배후의 물체들을 볼 수 있다. 또한, 디스플레이 패널상에 표시되는 정보는 디스플레이 배후에 위치한 사용자가 볼 수 있다. 또는 디스플레이 패널의 동작 상태는 가시 광이 디스플레이 패널을 투과하지 못하는 불투명 상태일 수 있다.
태블릿 모드에서, 시스템은 베이스 패널의 바닥 표면이 한 표면 상에 안착하거나 사용자에 의해 잡힐 때, 디스플레이 패널의 후방 디스플레이 표면이 한 위치에 안착하게 되어 이것이 사용자 방향에 대해 바깥쪽으로 향하는 식으로 접혀서 닫힌다. 태블릿 동작 모드에서, 후방 디스플레이 표면은, 이 표면이 터치 스크린 기능을 갖고 또한 태블릿 장치와 같은 종래의 터치 스크린 장치의 다른 공지된 기능을 실행할 수 있기 때문에, 디스플레이 및 사용자 인터페이스의 역할을 실행한다. 이 목적을 위해, 디스플레이 패널은 터치 스크린 층과 전방 디스플레이 표면 사이에 배치되는 투명도 조절 층을 포함할 수 있다. 몇몇 실시예들에서, 투명도 조절 층은 전기변색 층(electrochromic layer: EC), LCD 층, 또는 EC와 LCD 층들의 조합일 수 있다.
다양한 실시예들에서, 디스플레이는 상이한 크기를 가질 수 있는데, 예를 들어, 11.6" 또는 13.3" 스크린일 수 있고, 16:9 종횡비를 가지며, 적어도 300 니트 휘도(nits brightness)를 가질 수 있다. 또한 디스플레이는 풀 HD 해상도(적어도 1920 x 1080p)를 가질 수 있고, 내장된 디스플레이 포트(eDP)와 호환될 수 있으며, 패널 자가 리프레시를 구비한 저 전력 패널일 수도 있다.
터치 스크린 능력에 관해서는, 시스템은 멀티 터치 용량식이고 적어도 5 손가락 수용형인 멀티 터치 패널을 제공할 수 있다. 그리고 몇몇 실시예들에서, 디스플레이는 10 손가락 수용형일 수 있다. 일 실시예에서, 터치 스크린은 "손가락 달아오름(finger burn)"을 감소시키고 "손가락 건너뜀(finger skipping)"을 회피하기 위한 작은 마찰을 위해 손상 및 긁힘 방지 유리 및 코팅(예를 들어, Gorilla GlassTM 유리 및 코팅 또는 Gorilla Glass 2TM 유리 및 코팅) 내에 수용된다. 향상된 터치 경험과 응답성을 제공하기 위해, 터치 패널은 몇몇 실시예들에서 핀치 줌(pinch zoom) 동안의 정적 뷰당 2보다 적은 프레임(30 Hz)과 같은 멀티 터치 기능성과, 200ms(손가락 대 포인터에 관한 지연)를 가진 프레임(30Hz)당 1cm 미만의 단일 터치 기능성을 가진다. 디스플레이는, 몇몇 구현들에서, 패널 표면과 동일 평면에 있는 최소 스크린 베젤을 갖고 멀티터치를 이용할 때 제한된 IO 간섭을 갖는 에지 투 에지 유리를 지원한다.
인지 컴퓨팅 및 기타의 목적을 위해, 다양한 센서들이 시스템에 내에 존재할 수 있고 상이한 방식들로 프로세서(1610)에 결합될 수 있다. 소정의 관성 및 환경 센서들이, 예를 들어, I2C 상호 접속부를 경유해 센서 허브(1640)를 통해 프로세서(1610)에 결합될 수 있다. 도 16에 도시된 실시예에서, 이들 센서들은, 가속도계(1641), 주변광 센서(ambient light sensor: ALS)(1642), 나침반(1643) 및 자이로스코프(1644)를 포함할 수 있다. 기타의 환경 센서들은, 몇몇 실시예들에서 SMBus(system management bus) 버스를 통해 프로세서(1610)에 결합되는 하나 이상의 열 센서들(1646)를 포함할 수 있다.
플랫폼에 존재하는 다양한 관성 및 환경 센서를 이용하여, 많은 상이한 이용 사례가 실현될 수 있다. 이들 이용 사례들은 인지 컴퓨팅을 포함하는 진보된 컴퓨팅 동작을 가능케 하고 또한 전력 관리/배터리 수명, 보안, 및 시스템 응답성에 관한 향상을 허용한다.
예를 들어, 전력 관리/배터리 수명 문제에 관해, 적어도 부분적으로 주변 광 센서로부터의 정보에 기초하여, 플랫폼의 로케이션에서의 주변 광 상태가 결정되고 디스플레이의 강도가 그에 따라 제어된다. 따라서, 디스플레이를 작동시키는 데에 소비되는 전력이 소정 광 상태들에서 감소된다.
보안 동작에 대해서는, 로케이션 정보와 같은 센서들로부터 획득되는 정황 정보에 기초하여, 사용자가 소정 보안 문서들에 접근하는 것이 허용되는지가 결정될 수 있다. 예를 들어, 사용자는 근무지나 가정에서 이러한 문서들에 접근하는 것이 허용될 수 있다. 그러나, 사용자는 플랫폼이 공공 장소에 있는 경우에는 이러한 문서들에 접근하는 것이 금지된다. 이 결정은, 일 실시예에서, 예를 들어, GPS 센서 또는 표지물들의 카메라 인식을 통해 결정되는 로케이션 정보에 기초한다. 기타 보안 동작들은 서로 근접한 범위 내에 있는 장치들, 예를 들어 본 명세서에서 설명된 휴대용 플랫폼과 사용자의 데스크톱 컴퓨터, 모바일 전화 또는 기타 등등의 페어링을 제공하는 것을 포함할 수 있다. 소정의 공유는, 몇몇 실시예들에서, 이들 장치들이 이와 같이 페어링될 때 근거리 통신을 통해 실현된다. 그러나, 장치들이 소정 범위를 넘어서면, 이러한 공유는 디스에이블링될 수 있다. 더욱이, 본 명세서에서 설명된 플랫폼과 스마트폰을 페어링할 때, 장치들이 공공 장소에 있을 때 서로로부터 미리 결정된 거리보다 멀리 이동하면 경보가 트리거링되도록 구성될 수 있다. 대조적으로, 이들 페어링된 장치들이 안전한 로케이션에 예를 들어 근무지나 가정에 있을 때, 장치들은 이러한 경보를 트리거링하지 않고서 이 미리 결정된 한계를 넘어설 수 있다.
응답성은 또한 센서 정보를 이용하여 향상될 수 있다. 예를 들어, 플랫폼이 저 전력 상태에 있을 때에도, 센서들은 비교적 낮은 빈도로 가동되도록 여전히 인에이블링될 수 있다. 그에 따라, 예를 들어 관성 센서, GPS 센서, 또는 기타 등등에 의해 결정되는 플랫폼의 로케이션에서의 임의의 변화들이 결정된다. 어떠한 이런 변화들도 등록되지 않았다면, 이 경우에 가용 무선 네트워크 리소스들을 스캐닝할 필요가 없기 때문에, Wi-FiTM 액세스 포인트 또는 유사한 무선 인에이블러(wireless enabler) 와 같은 사전 무선 허브로의 더 빠른 연결이 일어난다. 따라서, 저 전력 상태로부터 웨이크업될 때 더 큰 응답성 레벨이 달성된다.
본 명세서에서 설명되는 플랫폼 내의 통합 센서를 통해 획득되는 센서 정보를 이용하는 많은 다른 이용 사례가 가능하게 될 수 있고, 상기 예들은 오직 예시 목적을 위한 것일 뿐이라는 점을 이해해야 한다. 본 명세서에서 설명된 시스템을 이용하면, 인지 컴퓨팅 시스템은 제스처 인식을 포함하는 대안적 입력 양식의 부가를 허용할 수 있고, 시스템이 사용자 동작과 의도를 감지하는 것을 가능케 한다.
몇몇 실시예들에서 하나 이상의 적외선 또는 기타 열 감지 요소들, 또는 사용자의 존재나 움직임을 감지하기 위한 기타 임의의 요소가 존재할 수 있다. 이러한 감지 요소들은 함께 동작하거나, 순차적으로 동작하거나, 양쪽 모두인 다중의 상이한 요소를 포함할 수 있다. 예를 들어, 감지 요소들은 광이나 소리 투사와 같은 초기 감지와, 이어서 예를 들어 초음파 비행 시간 카메라(ultrasonic time of flight camera) 또는 패터닝된 광 카메라(patterned light camera)에 의한 제스처 검출의 감지를 제공하는 요소들을 포함한다.
또한 몇몇 실시예들에서, 시스템은 조명된 라인(illuminated line)을 산출하는 광 발생기를 포함한다. 몇몇 실시예들에서, 이 라인은 가상 경계에 관한 시각적 단서, 즉 공간에서의 가공의 또는 가상적 로케이션을 제공하는데, 여기서 이 가상적 경계 또는 평면을 통과하거나 깨뜨리는 사용자의 행동은 컴퓨팅 시스템에 참여하려는 의도로서 해석된다. 몇몇 실시예들에서, 조명된 라인은, 컴퓨팅 시스템이 사용자에 관해 상이한 상태로 천이할 때 색들을 바꿀 수 있다. 조명된 라인은 공간에서의 가상적 경계에 대해 시각적 단서를 사용자에게 제공하는데 이용될 수 있고, 또한 사용자가 컴퓨터에 참여하기를 원하는 때를 결정하는 것을 포함하여 사용자에 관한 컴퓨터 상태에서의 천이들을 결정하기 위해 시스템에 의해 이용될 수 있다.
몇몇 실시예들에서, 컴퓨터는 사용자 위치를 감지하고 또한 가상 경계를 통과하는 사용자 손의 움직임을 컴퓨터에 참여하려는 사용자의 의도를 나타내는 제스처로서 해석하도록 동작한다. 몇몇 실시예들에서, 사용자가 가상 라인 또는 평면을 통과하면 광 발생기에 의해 발생되는 광이 변하고, 그에 의해 사용자가 컴퓨터에게 입력을 제공하도록 제스처들을 제공하기 위한 지역에 진입했다는 시각적 피드백을 사용자에게 제공할 수 있다.
디스플레이 스크린들은 사용자에 관한 컴퓨팅 시스템 상태의 천이들의 시각적 표시들을 제공할 수 있다. 몇몇 실시예들에서, 제1 스크린이 사용자의 존재가 감지 요소들 중 하나 이상의 이용을 통해 하는 것과 같이 시스템에 의해 감지되는 제1 상태에서 제공된다.
몇몇 구현들에서, 시스템은 얼굴 인식에 의해 하는 것처럼 사용자의 신원을 감지하도록 작용한다. 여기서, 제2 스크린으로의 천이는 컴퓨팅 시스템이 사용자 신원을 인식한 제2 상태에서 제공될 수 있는데, 여기서 이 제2 스크린은 사용자가 새로운 상태로 천이했다는 시각적 피드백을 사용자에게 제공한다. 제3 스크린으로의 천이는 사용자가 사용자의 인식을 확인한 제3 상태에서 발생할 수 있다.
몇몇 실시예들에서, 컴퓨팅 시스템은 사용자에 대한 가상 경계의 로케이션을 결정하기 위해 천이 메커니즘을 이용할 수 있는데, 여기서 가상 경계의 로케이션은 사용자 및 정황에 따라 달라질 수 있다. 컴퓨팅 시스템은 조명된 라인과 같은 광을 발생하여 시스템에의 참여를 위한 가상 경계를 표시할 수 있다. 몇몇 실시예들에서, 컴퓨팅 시스템은 대기 상태(waiting state)에 있을 수 있고, 광은 제1 색으로 발생될 수 있다. 컴퓨팅 시스템은 감지 요소들을 이용해 사용자의 존재와 움직임을 감지하는 것에 의해 하는 것과 같이 사용자가 가상 경계를 지나서 도착했는지를 검출할 수 있다.
몇몇 실시예들에서, (사용자의 손이 가상 경계 라인보다 컴퓨팅 시스템에 더 가깝게 되는 것과 같이) 사용자가 가상 경계를 넘어간 것으로 검출되었다면, 컴퓨팅 시스템은 사용자로부터 제스처 입력들을 수신하기 위한 상태로 천이할 수 있고, 여기서 천이를 표시하는 메커니즘은 제2 색으로 변하는 가상 경계를 표시하는 광을 포함할 수 있다.
몇몇 실시예들에서, 컴퓨팅 시스템은 이후 제스처 움직임이 검출되는지를 결정할 수 있다. 제스처 움직임이 검출된다면, 컴퓨팅 시스템은 제스처 인식 절차로 진행하고, 이 절차는 컴퓨팅 장치 내의 메모리에 상주할 수 있거나 컴퓨팅 장치에 의해 다른 식으로 접근 가능할 수 있는 제스처 데이터 라이브러리로부터의 데이터를 이용하는 것을 포함할 수 있다.
사용자의 제스처가 인식된다면 컴퓨팅 시스템은 이 입력에 응답하여 기능을 실행할 수 있고, 사용자가 가상 경계 내에 있다면 추가 제스처들을 수신하기 위해 복귀할 수 있다. 몇몇 실시예들에서, 제스처가 인식되지 않는다면, 컴퓨팅 시스템은 오류 상태로 천이할 수 있고, 여기서 오류 상태를 표시하는 메커니즘은, 사용자가 컴퓨팅 시스템에 참여하기 위해 가상 경계 내에 있다면 시스템이 추가 제스처들을 수신하기 위해 복귀함에 따라, 제3 색으로 변하는 가상 경계를 표시하는 광을 포함할 수 있다.
앞서 언급한 바와 같이, 다른 실시예들에서, 시스템은 적어도 2개의 상이한 모드, 즉 태블릿 모드와 노트북 모드로 이용될 수 있는 전환 가능 태블릿 시스템으로서 구성될 수 있다. 전환 가능 시스템은 2개의 패널, 즉 디스플레이 패널과 베이스 패널을 가져서, 태블릿 모드에서는 2개의 패널이 서로의 위에 적층으로 배치된다. 태블릿 모드에서, 디스플레이 패널은 바깥쪽으로 대면하고 종래의 태블릿에서 볼 수 있는 터치 스크린 기능성을 제공할 수 있다. 노트북 모드에서는 2개의 패널이 개방 클램셸(open clamshell) 구성으로 배치될 수 있다.
다양한 실시예들에서, 가속도계는 적어도 50 Hz의 데이터 레이트를 갖는 3축 가속도계일 수 있다. 3축 자이로스코프일 수 있는 자이로스코프가 또한 포함될 수 있다. 덧붙여, e 나침반/자력계가 존재할 수 있다. 또한, (예를 들어, 리드 오프닝(lid open)이 사람이 시스템에 근접해 있는 (있지 않은) 때를 감지하고 또한 배터리 수명을 연장하기 위해 전력/성능을 조정하도록) 하나 이상의 근접 센서가 제공될 수 있다. 일부 OS에 대해, 가속도계, 자이로스코프, 및 나침반을 포함하는 센서 융합 능력이 향상된 특징들을 제공할 수 있다. 덧붙여, 실시간 클록(RTC)을 갖는 센서 허브를 통해, 센서 메커니즘으로부터의 웨이크업이 시스템의 나머지가 저 전력 상태에 있을 때 센서 입력을 수신하기 위해 실현될 수 있다.
몇몇 실시예들에서, 내부 리드/디스플레이는 리드가 폐쇄/개방된 때를 표시하기 위해 스위치 또는 센서를 개방하고, 시스템을 커넥티드 스탠바이(connected standby)에 놓거나 또는 커넥티드 스탠바이 상태로부터 자동적으로 웨이크업하는 데에 이용될 수 있다. 다른 시스템 센서들은 감지된 파라미터들에 기초해 프로세서 및 시스템 동작 상태들에 대한 변화들을 가능하게 하기 위해 내부 프로세서, 메모리, 및 외각(skin) 온도 모니터링을 위한 ACPI 센서들을 포함할 수 있다.
실시예에서, OS는 커넥티드 스탠바이(또한 Win8 CS로서 본 명세서에서 지칭됨)를 구현하는 Microsoft® Windows® 8 OS일 수 있다. Windows 8 커넥티드 스탠바이 또는 유사한 상태를 갖는 또 다른 OS는 본 명세서에서 설명된 플랫폼을 통해 매우 낮은 초 유휴 전력을 제공하여 애플리케이션들이, 예를 들어 매우 낮은 전력 소비로 클라우드 기반 로케이션에 연결된 상태를 유지하는 것을 가능하게 할 수 있다. 플랫폼은 3개의 전력 상태, 즉 스크린 온(정상); (디폴트 "오프" 상태로서의) 커넥티드 스탠바이; 및 셧다운(0 와트의 전력 소비)을 지원할 수 있다. 따라서, 커넥티드 스탠바이 상태에서, 플랫폼은 스크린이 오프라 하더라도 논리적으로 (최소 전력 레벨들에서) 온이다. 이러한 플랫폼에서 전력 관리는, 부분적으로 가장 낮은 전력을 공급받는 컴포넌트가 동작을 실행할 수 있게 하는 부하저감 기술 덕분에, 애플리케이션들에게 투명한 방식으로 그리고 지속적인 연결을 유지하도록 이루어질 수 있다.
도 16에서 또한 볼 수 있는 바와 같이, 다양한 주변 장치들이 LPC(low pin count) 상호 접속부를 통해 프로세서(1610)에 결합될 수 있다. 도시된 실시예에서, 다양한 컴포넌트들이 내장된 컨트롤러(1635)를 통하여 결합될 수 있다. 이러한 컴포넌트들은 키보드(1636)(예를 들어, PS2 인터페이스를 통해 결합됨), 팬(1637), 및 열 센서(1639)를 포함할 수 있다. 몇몇 실시예들에서, 터치 패드(1630)는 PS2 인터페이스를 통해 EC(1635)에도 결합될 수 있다. 또한, 2003년 10월 2일자 TCG(Trusted Computing Group) TPM(trusted platform module) 사양 버전 1.2에 따른 TPM(1638)과 같은 보안 프로세서도 이런 LPC 상호 접속부를 통해 프로세서(1610)에 결합될 수 있다. 그러나, 본 개시의 범위는 이런 점에만 제한되지는 않고, 보안 정보의 보안 처리 및 저장은 보안 보조프로세서 내의 SRAM(static random access memory)과 같은, 또는 SE(secure enclave) 프로세서 모드에 의해 보호될 때 암호 해독되는 암호화된 데이터 블롭(data blob)들과 같은 또 다른 보호된 로케이션에 있을 수 있다는 점을 이해해야 한다.
특정한 구현에서, 주변 포트들은 (풀 사이즈, 미니 또는 마이크로 등의 상이한 폼 팩터를 가질 수 있는) HDMI(high definition media interface) 커넥터; USB 개정 3.0 사양(2008년 11월)에 따른 풀 사이즈 외부 포트들과 같은 하나 이상의 USB 포트들을 포함할 수 있는데, 이들 중 적어도 하나는 시스템이 커넥티드 스탠바이 상태에 있고 AC 벽 전원에 꽂혀 있을 때 (스마트폰과 같은) USB 장치의 충전을 위해 전력 공급된다. 게다가 하나 이상의 ThunderboltTM 포트들이 제공될 수 있다. 다른 포트들은 WWAN용의 풀 사이즈 SD-XC 카드 리더 및/또는 SIM 카드 리더(예를 들어, 8핀 카드 리더)와 같은 외부 접근 가능 카드 리더를 포함할 수 있다. 오디오를 위해, 스테레오 음향과 마이크 기능(예를 들어, 조합 기능)을 갖는 3.5mm 잭이, 잭 검출을 위한 지원(예를 들어, 리드 내의 마이크를 이용하는 헤드폰만의 지원 또는 케이블 내의 마이크를 갖춘 헤드폰)을 수반하며 존재할 수 있다. 몇몇 실시예들에서, 이 잭은 스테레오 헤드폰과 스테레오 마이크 입력 사이에서 재 작업 부여(re-taskable) 가능하다. 또한, AC 브릭(brick)에 결합하기 위한 전원 잭이 제공될 수 있다.
시스템(1600)은, 무선을 포함하여 다양한 방식으로 외부 장치들과 통신할 수 있다. 도 16에 도시된 실시예에서, 그 각각이 특정 무선 통신 프로토콜을 위해 구성되는 무선에 대응할 수 있는 다양한 무선 모듈들이 존재한다. 근접 장과 같은 단거리에서의 무선 통신을 위한 한 방식은, 일 실시예에서 SMBus를 통해 프로세서(1610)와 통신할 수 있는 NFC(near field communication) 유닛(1645)을 통하는 것일 수 있다. 이 NFC 유닛(1645)을 통해 서로 매우 근접한 장치들이 통신할 수 있다는 점에 유의한다. 예를 들어, 사용자는 근접 관계에 있는 2개의 장치를 함께 적응시키고 또한 식별 정보, 지불 정보, 이미지 데이터와 같은 데이터, 또는 등등과 같은 정보의 전송을 가능케 함으로써 시스템(1600)이 사용자의 스마트 폰과 같은 또 다른(예를 들어) 휴대용 장치와 통신하는 것을 가능하게 할 수 있다. 무선 전력 전송이 또한 NFC 시스템을 이용하여 실행될 수 있다.
본 명세서에서 기술된 NFC 유닛을 이용할 때, 사용자들은 장치들 중 하나 이상의 장치들의 코일들 간의 결합을 이끌어내는(leverage) 것에 의한 (근접장 통신 및 무선 전력 전송(WPT)과 같은) 근접장 결합 기능을 위해 장치들을 옆으로 부딪히게 하거나 나란히 배치할 수 있다. 더 구체적으로는, 실시예들은 코일들의 더 양호한 결합을 제공하기 위해 장치들에게 전략적으로 성형되고 배치된 페라이트 재료를 제공한다. 각각의 코일은 그와 연관된 인덕턴스를 가지며, 이 인덕턴스는 시스템에 대한 공통 공진 주파수를 가능케 하기 위해 시스템의 저항, 용량, 및 기타 특징들과 연계하여 선택될 수 있다.
도 16에서 추가로 볼 수 있는 바와 같이, 부가적 무선 유닛들은 WLAN 유닛(1650) 및 블루투스 유닛(1652)을 포함하는 다른 단거리 무선 엔진들을 포함할 수 있다. WLAN 유닛(1650)을 이용하면, 주어진 IEEE(Institute of Electrical and Electronics Engineers) 802.11 표준에 따른 Wi-FiTM 통신이 실현될 수 있는 한편, 블루투스 유닛(1652)을 통해 블루투스 프로토콜을 통한 단거리 통신이 생길 수 있다. 이들 유닛들은, 예를 들어 USB 링크 또는 UART(universal asynchronous receiver transmitter) 링크를 통해 프로세서(1610)와 통신할 수도 있다. 또는 이들 유닛들은, 예를 들어 PCI ExpressTM Specification Base Specification 버전 3.0(2007년 1월 17일 공개)을 따르는 PCIeTM(Peripheral Component Interconnect ExpressTM) 프로토콜, 또는 SDIO(serial data input/output) 표준과 같은 또 다른 프로토콜에 따른 상호 접속부를 통해 프로세서(1610)에 결합될 수 있다. 물론, 하나 이상의 애드 인 카드들상에서 구성될 수 있는 이들 주변 장치들 사이의 실제 물리적 접속은 머더보드에 적응되는 NGFF 커넥터들에 의한 것일 수 있다.
덧붙여, 예를 들어 셀룰러 또는 기타 무선 광역 프로토콜에 따른 무선 광역 통신은 다음 차례로 SIM(subscriber identity module)(1657)에 결합될 수 있는 WWAN 유닛(1656)을 통해 생길 수 있다. 덧붙여, 로케이션 정보의 수신 및 이용을 가능케 하기 위해, GPS 모듈(1655)도 존재할 수 있다. 도 16에 도시된 실시예에서, WWAN 유닛(1656) 및 카메라 모듈(1654)과 같은 통합된 캡처 장치는 USB 2.0 또는 3.0 링크, 또는 UART 또는 I2C 프로토콜과 같은 주어진 USB 프로토콜을 통해 통신할 수 있다는 점에 유의한다. 다시금 이들 유닛들의 실제의 물리적 접속은 머더보드상에서 구성되는 NGFF 커넥터에게의 NGFF 애드 인 카드의 적응을 통한 것일 수 있다.
특정 실시예에서, 예를 들어, Windows 8® CS에 대한 지원을 갖춘 WiFiTM 802.11ac 솔루션(예를 들어, IEEE 802.11abgn과 하위 호환성을 갖는 애드 인 카드)에 의해 무선 기능이 모듈식으로 제공될 수 있다. 이 카드는 내부 슬롯에 (예를 들어, NGFF 어댑터를 통해) 구성될 수 있다. 부가 모듈은 블루투스 능력(예를 들어, 하위호환성을 갖춘 블루투스 4.0)뿐만 아니라 Intel® Wireless Display 기능을 제공할 수 있다. 덧붙여 NFC 지원이 별개의 장치 또는 다기능 장치를 통해 제공될 수 있고 또한 용이한 접근성을 위해 예로서 섀시의 정면 우측 부분에 위치될 수 있다. 또 다른 부가 모듈은 3G/4G/LTE 및 GPS에 대한 지원을 제공할 수 있는 WWAN 장치일 수 있다. 이 모듈은 내부(예를 들어, NGFF) 슬롯에 구현될 수 있다. 통합 안테나 지원이 802.11x 표준들, 블루투스® 기술, WWAN, NFC 및 GPS에 따른 WiFiTM 기술을 위해 제공되어, WiFiTM 네트워크 무선으로부터 WWAN 무선, Wireless Gigabit Specification(2010년 7월)에 따른 무선 기가비트(WiGigTM)로의 원활한 천이 및 그 반대를 가능케 할 수 있다.
전술된 바와 같이, 통합 카메라가 리드에 수용될 수 있다. 한 예로서, 이 카메라는, 예를 들어 적어도 2.0 메가픽셀(MP)의 해상도를 갖고 6.0 MP 및 이를 넘어 확장되는 고해상도 카메라일 수 있다.
오디오 입력들 및 출력들을 제공하기 위해, 오디오 프로세서가 HDA(high definition audio) 링크를 통해 프로세서(1610)에 결합될 수 있는 DSP(digital signal processor)(1660)를 통해 구현될 수 있다. 유사하게, DSP(1660)는 다음 차례로 섀시 내부에 구현될 수 있는 출력 스피커들(1663)에 결합될 수 있는 통합 CODEC(coder/decoder) 및 증폭기(1662)와 통신할 수 있다. 유사하게, 증폭기 및 CODEC(1662)은, 일 실시예에서 시스템 내의 다양한 동작들의 음성 활성화 제어를 가능케 하기 위해 고품질 오디오 입력들을 제공하는 (디지털 마이크 어레이와 같은) 듀얼 어레이 마이크을 통해 구현될 수 있는 마이크(1665)로부터 오디오 입력들을 수신하도록 결합될 수 있다. 오디오 출력들은 증폭기/CODEC(1662)으로부터 헤드폰 잭(1664)으로 제공될 수 있다는 점을 유의한다. 도 16의 실시예에서 이들 특정한 컴포넌트들로 도시되어 있지만, 본 개시의 범위는 이런 점에만 제한되지는 않는다는 것을 이해해야 한다.
특정 실시예에서, 디지털 오디오 코덱 및 증폭기는 스테레오 헤드폰 잭, 스테레오 마이크 잭, 내부 마이크 어레이 및 스테레오 스피커들을 구동할 수 있다. 상이한 구현들에서, 코덱은 오디오 DSP 내에 통합되거나 또는 HD 오디오 경로를 통해 주변 컨트롤러 허브(PCH)에 결합될 수 있다. 몇몇 구현들에서, 통합 스테레오 스피커에 더하여, 하나 이상의 베이스 스피커(bass speaker)가 제공될 수 있고, 스피커 솔루션은 DTS 오디오를 지원할 수 있다.
몇몇 실시예들에서, 프로세서(1610)는, FIVR(fully integrated voltage regulator)라고 불리는 프로세서 다이 내부에 통합되는 외부 전압 조정기(VR) 및 다중 내부 전압 조정기에 의해 전력 공급될 수 있다. 프로세서에서의 다중 FIVR의 이용은 컴포넌트들을 별개의 전력 플레인(power plane)들로 그룹화하는 것을 가능케 하여, 전력이 FIVR에 의해 조정되어 그룹 내의 이들 컴포넌트들에게 공급되게 한다. 전력 관리 동안에, 하나의 FIVR의 주어진 전력 플레인은 프로세서가 소정의 저 전력 상태에 놓일 때 파워 다운 또는 파워 오프가 될 수 있는 한편, 또 다른 FIVR의 또 다른 전력 플레인은 활성으로 또는 완전 전력 공급된 채로 유지될 수 있다.
일 실시예에서, 프로세서와 PCH 사이의 인터페이스, 외부 VR과의 인터페이스, 및 EC(1635)와의 인터페이스와 같은, 몇 개의 I/O 신호들에 대한 I/O 핀들을 파워 온(power on)하기 위해 지속 전력 플레인(sustain power plane)이 몇몇 깊은 휴면 상태(deep sleep state)들 동안 이용될 수 있다. 이 지속 전력 플레인은 또한, 휴면 상태동안 프로세서 콘텍스트가 저장되는 온 보드 SRAM 또는 기타 캐시 메모리를 지원하는 온 다이 전압 조정기에 전력을 공급한다. 지속 전력 플레인은 또한, 다양한 웨이크업 소스 신호들을 모니터링하고 처리하는 프로세서의 웨이크업 논리를 파워 온하기 위해 이용된다.
전력 관리 동안에, 프로세서가 소정의 깊은 휴면 상태에 진입할 때 기타 전력 플레인들이 파워 다운 또는 파워 오프가 되는 한편, 지속 전력 플레인은 상기 언급한 컴포넌트들을 지원하기 위해 파워 온 된 채로 유지된다. 그러나, 이것은 이들 컴포넌트들이 필요하지 않을 때에는 불필요한 전력 소비 또는 감쇠로 이끌 수 있다. 이를 위해, 실시예들은 전용 전력 플레인을 이용하여 프로세서 콘텍스트를 유지하는 커넥티드 스탠바이 휴면 상태를 제공할 수 있다. 일 실시예에서, 커넥티드 스탠바이 휴면 상태는 그 자체가 프로세서와의 패키지에 존재할 수 있는 PCH의 리소스들을 이용하여 프로세서 웨이크업을 용이하게 한다. 일 실시예에서, 커넥티드 스탠바이 휴면 상태는 프로세서 웨이크업 때까지 PCH에서의 프로세서 아키텍처 기능들을 지속하는 것을 용이하게 하고, 이것은 모든 클록들을 오프하는 것을 포함하여 깊은 휴면 상태 동안 이전에는 파워 온 된 채로 남겨져 있었던 불필요한 프로세서 컴포넌트들 모두를 턴 오프하는 것을 가능케 한다. 일 실시예에서, PCH는 TSC(time stamp counter) 및 커넥티드 스탠바이 상태 동안 시스템을 제어하기 위한 커넥티드 스탠바이 논리를 포함한다. 지속 전력 플레인에 대한 통합 전압 조정기도 마찬가지로 PCH상에 상주할 수 있다.
실시예에서, 커넥티드 스탠바이 상태 동안, 통합 전압 조정기는, 프로세서가 깊은 휴면 상태들 및 커넥티드 스탠바이 상태에 진입할 때 중요한 상태 변수들과 같은 프로세서 콘텍스트가 저장되는 전용 캐시 메모리를 지원하기 위해 파워 온 되어 남아 있는 전용 전력 플레인으로서 기능할 수 있다. 이 중요한 상태는 아키텍처, 마이크로 아키텍처, 디버그 상태와 연관된 상태 변수들, 및/또는 프로세서와 연관되는 유사한 상태 변수들을 포함할 수 있다.
EC(1635)로부터의 웨이크업 소스 신호들은 커넥티드 스탠바이 상태 동안에 프로세서 대신에 PCH에게 송신되어, PCH가 프로세서 대신에 웨이크업 처리를 관리할 수 있도록 할 수 있다. 덧붙여, TSC는 프로세서 아키텍처 기능들을 지속하는 것을 용이하게 하기 위해 PCH에 유지된다. 도 16의 실시예에서 이들 특정한 컴포넌트들로 도시되어 있지만, 본 개시의 범위는 이런 점들에만 제한되지는 않는다는 것을 이해해야 한다.
프로세서 내의 전력 제어는 향상된 전력 절감으로 이끌 수 있다. 예를 들어, 전력은 코어들 사이에서 동적으로 할당될 수 있고, 개개의 코어는 주파수/전압을 변경할 수 있고, 다중의 깊은 저 전력 상태들이 제공되어 매우 낮은 전력 소비를 가능케 할 수 있다. 덧붙여, 코어들 또는 독립적 코어 부분들의 동적 제어는 컴포넌트들이 이용되고 있지 않을 때 컴포넌트들을 파워 오프 함으로써 감소된 전력 소비를 제공할 수 있다.
몇몇 구현들은 플랫폼 전력을 제어하기 위해 특정한 전력 관리 IC(PMIC)를 제공할 수 있다. 이 솔루션을 이용하면, 시스템은 Win8 커넥티드 스탠바이 상태에 있을 때와 같이 소정 스탠바이 상태에 있을 때 연장된 지속 기간 동안 (예를 들어, 16시간 동안) 매우 낮은 (예를 들어, 5% 미만의) 배터리 저하를 볼 수 있을 것이다. Win8 유휴 상태에서, 예를 들어 9시간을 초과하는 배터리 수명이 (예로, 150 니트(nit)에서) 실현될 수 있다. 비디오 재생에 관해서는, 긴 배터리 수명이 실현될 수 있는데, 예를 들어 최소 6시간 동안 풀 HD 비디오 재생이 일어날 수 있다. 한 구현에서의 플랫폼은, SSD를 이용하는 Win8 CS의 경우에 예를 들어 35 와트 시간(Whr), 및 RST 캐시 구성을 갖춘 HDD을 이용하는 Win8의 경우에 (예로) 40-44 Whr의 에너지 용량을 가질 수 있다.
특정한 구현은, 대략 25W TDP(thermal design power) 설계 지점까지의 구성 가능한 CPU TDP로 15W의 공칭 CPU TDP에 대한 지원을 제공할 수 있다. 플랫폼은 전술된 열 특징에 기인한 최소 배기구들을 포함할 수 있다. 또한, 플랫폼은 (어떤 뜨거운 공기도 사용자에게 불지 않는다는 점에서) 머리받이로 쓸 수 있다(pillow-friendly). 섀시 재료에 의존하여 상이한 최대 온도 점들이 실현될 수 있다. (적어도 플라스틱으로 된 리드 또는 베이스 부분을 가져야 하는) 플라스틱 섀시의 한 구현에서, 최대 동작 온도는 52℃일 수 있다. 그리고 금속 새시들의 구현에 대해, 최대 동작 온도는 46℃일 수 있다.
상이한 구현들에서, TPM과 같은 보안 모듈은 프로세서 내에 통합될 수 있거나 TPM 2.0 장치와 같은 개별 장치일 수 있다. PTT(Platform Trust Technology)라고도 불리는 통합 보안 모듈에 의해, BIOS/펌웨어는 보안 키보드 및 디스플레이와 같은 보안 사용자 인터페이스들과 함께, 보안 명령어들, 보안 부팅, Intel® Anti-Theft Technology, Intel® Identity Protection Technology, Intel® Trusted Execution Technology(TXT), 및 Intel® Manageability Engine Technology를 포함하는 소정 보안 피처들에 대해 소정 하드웨어 피처들을 노출시키도록 인에이블링될 수 있다.
다음으로 도 17을 참조하면, 본 발명에 따른 SOC 설계의 실시예가 묘사된다. 예시적 예로서, SOC(1700)는 사용자 장비(UE)에 포함되어 있다. 일 실시예에서, UE는 핸드헬드 폰, 스마트 폰, 태블릿, 초박형 노트북, 광대역 어댑터를 갖는 노트북, 또는 임의의 다른 유사한 통신 디바이스와 같이, 통신하기 위해 최종 사용자에 의해 사용될 임의의 장치를 말한다. UE는 기지국 또는 노드에 연결되는데, 이는 GSM 네트워크에서 사실상 이동국(MS)에 대응할 수 있다.
여기서, SOC(1700)는 2개의 코어, (1706) 및 (1707)을 포함한다. 상기 논의와 유사하게, Intel® Architecture CoreTM를 갖는 프로세서, Advanced Micro Devices, Inc. (AMD) 프로세서, MIPS 기반 프로세서, ARM 기반 프로세서 설계, 또는 이것들의 고객은 물론이고 이들의 실시권자 또는 채택자와 같은 코어들(1706 및 1707)은 명령어 세트 아키텍처에 부합할 수 있다. 코어들(1706 및 1707)은 시스템(1700)의 다른 부분들과 통신하기 위해 버스 인터페이스 유닛(1709) 및 L2 캐시(1710)와 연관되는 캐시 제어(1708)에 결합된다. 상호 접속부(1711)는 기술된 개시의 하나 이상의 양태들을 구현할 수 있는, IOSF, AMBA, 또는 위에 논의된 다른 상호 접속부와 같은 온 칩 상호 접속부를 포함한다.
상호 접속부(1711)는 SIM 카드와 인터페이싱하기 위한 SIM(subscriber Identity Module)(1730), SOC(1700)를 초기화하고 부팅하기 위해 코어들(1706 및 1707)에 의한 실행을 위한 부팅 코드를 보유하는 부팅 ROM(1735), 외부 메모리(예를 들어, DRAM (1760))와 인터페이싱하기 위한 SDRAM 컨트롤러(1740), 비휘발성 메모리(예를 들어, 플래시(1765))와 인터페이싱하기 위한 플래시 컨트롤러(1745), 주변 장치들과 인터페이싱하기 위한 주변 장치 컨트롤(1750)(예를 들어, 직렬 주변 장치 인터페이스), 입력(예를 들어, 터치 인에이블링된 입력)을 디스플레이하고 수신하기 위한 비디오 코덱들(1720) 및 비디오 인터페이스(1725), 그래픽 관련된 계산들을 실행하기 위한 GPU(1715), 기타 등등과 같은 기타 컴포넌트들로의 통신 채널들을 제공한다. 이러한 인터페이스들 중 임의의 것은 본 명세서에서 기술되는 실시예들의 양태들을 포함할 수 있다.
덧붙여, 이 시스템은 블루투스 모듈(1770), 3G 모뎀(1775), GPS(1780), 및 WiFi(1785)와 같은 통신을 위한 주변 장치들을 예시한다. 상기에 진술된 것처럼, UE는 통신을 위한 무선을 포함한다는 것을 주의하라. 그 결과, 이들 주변 장치 통신 모듈들은 모두 포함되지 않을 수 있다. 그러나, UE에서 외부 통신을 위한 몇몇 형태의 무선이 포함되어야 한다.
아래 기술된 실시예들은 코드 영역들의 연속적 자동 튜닝을 위한 메커니즘을 지향한다. 이 메커니즘은 코드 영역이 이 코드 영역을 위한 최적 하드웨어(HW) 구성을 식별하고 이용하기 위해 사용될 수 있다. 전술한 바와 같이, 프로세서 파라미터들은 제조 시에, 시스템 부팅 시간에 또는 실행 시간에 설정될 수 있고, 광범위한 애플리케이션들과 호환 가능하도록 영구적으로 설정될 수 있다.
아래 기술된 실시예들은 하기의 것을 위해 이용될 수 있는 두 개의 새로운 명령어를 구현한다: 1) 측정(예를 들어, IPC(instructions-per-cycle) 계산, 전력소비 메트릭 또는 그와 유사한 것)을 위한 코드 영역의 경계를 정하는(demarcate) 것; 및/또는 2) 튜닝 가능 파라미터들의 상이한 세트들을 위한 코드 영역의 측정(예를 들어, IPC)를 계산하고 및 가장 높은 측정(예를 들어, 가장 높은 IPC)을 갖는 또는 몇몇 경우에 가장 낮은 측정들(예를 들어, 가장 낮은 에너지 소비 또는 가장 낮은 전력 소비)를 갖는 튜닝 가능 파라미터들의 세트를 선택함으로써 경계 정해진 영역을 위해 튜닝 가능 파라미터들을 자동적으로 조절하는 것. 자동적으로 조정하고 자동적으로 튜닝하는 것은, 본 명세서에 사용된 것처럼, 경계 정해진 영역을 위한 튜닝 가능 파라미터들이 그 조절들을 하기 위해 사용자 개입 없이 조절될 수 있다는 것을 나타낸다.
도 18은 일 실시예에 따른 코드 영역들의 연속적 자동 튜닝을 위한 프로세서(1800)의 블록도이다. 프로세서(1800)는 마이크로코드(1802), 프로세서 코어(1806) 및 프로그램 메모리(1804)를 포함한다. 마이크로코드(1802)는 본 명세서에서 기술된 바와 같이 마이크로코드 ROM에 저장될 수 있고, 자동 하드웨어 기반 튜닝 알고리즘(1814)을 실행하기 위한 프로세싱 논리, 및 튜닝 가능 프로세서 파라미터들(1816)을 저장하는 내부 하드웨어 테이블(1818)을 포함할 수 있다. 프로그램 메모리(1804)는 경계 정해진 코드 영역(1810)을 포함하는 명령어들(1808), 및 튜닝 데이터 구조(1812)를 저장한다. 프로세서 코어(1806)는 이하에 보다 상세하게 설명된 바와 같이 마이크로코드(1802) 및 명령어들(1808)을 실행하도록 구성된다. 경계 정해진 코드 영역(1810)은 임의 사이즈의 코드의 피스일 수 있다. 경계 정해진 코드 영역(1810)은 주 프로그램의 일부일 수 있거나, 루프 또는 코드에서의 기타 로케이션들의 외부에 설정될 수 있다.
동작 동안, 프로세서 코어(1806)는 명령어들(1808)을 실행하고, 이하에 보다 상세하게 설명된 바와 같이 경계 정해진 코드 영역(1810)을 식별한다. 코드 영역(1810)은 코드 영역(1810)의 시작의 경계를 정하는 제1 명령어 및 코드 영역(1810)의 종료의 경계를 정하는 제2 명령어에 의해 경계가 정해질 수 있다. 프로세서 코어(1806)는 또한 이하에 보다 상세하게 설명된 바와 같이 튜닝 가능 프로세서 파라미터들(1816)의 자동 튜닝을 위해 경계 정해진 코드 영역(1810)의 실행과 연관되는 메트릭들을 계산하기 위해 마이크로코드(1802)를 실행한다. 마이크로코드(1802)의 자동 하드웨어 기반 튜닝 알고리즘(1814)은 경계 정해진 코드 영역(1810)을 위한 튜닝 가능 프로세서 파라미터들(1816)을 자동적으로 튜닝하기 위해 튜닝 데이터 구조(1812)를 이용할 수 있다. 자동 하드웨어 기반 튜닝 알고리즘(1814)은 자동 하드웨어 기반 튜닝을 애플리케이션 실행시간에 실행한다. 일 실시예에서, 튜닝 가능 프로세서 파라미터들(1816)은 내부 하드웨어 테이블(1818)에 저장된다. 내부 하드웨어 테이블(1818)은 구성 비트 패턴의 각각의 비트가 L1 IP 프리페칭 특징과 같은 구성 가능 특징들 중 하나를 인에이블링하거나 디스에이블링하는 구성 비트 패턴들을 저장할 수 있다. 대안적으로, 튜닝 가능 프로세서 파라미터들(1816)은 내부 하드웨어 테이블(1818)과는 다른 기술들을 이용하여 또는 다른 로케이션들에서 저장될 수 있다. 일 실시예에서, 제1 명령어 및 제2 명령어는 튜닝될 명령어들(1808) 내의 (예로, 프로그램 파일 내의) 코드 영역(예로, 경계 정해진 코드 영역(1810))의 경계를 정하기 위해 프로그래머에 의해 이용될 수 있다. 예를 들어, 하기는 경계 정해진 코드 영역(1810)의 예이다:
TUNABLE_REGION_BEGIN address_of (tune_data_structure)
//
//code to be tuned
//
TUNABLE_REGION_END address_of (tune_data_structure)
경계 정해진 코드 영역들(1810)의 제1 명령어 및 제2 명령어는 튜닝 데이터 구조(1812)(tune_data_structure)를 호출한다. 튜닝 데이터 구조(1812)는 프로그램 메모리(1804)에 조직되는 데이터 구조(예를 들어, 파일)이다. 하기는 튜닝 데이터 구조(1812)의 예이다.
struct tune_data_struture {
int configuration_bits; //이용할 HW 구성 기술
float best_configuration_IPC; //이 코드 영역을 위해 발견되는 최고 IPC
int best_configuration_bits; //최고의 IPC를 산출하는 HW 구성
int start_icount; //영역의 시작에서의 동적 명령어 카운트
int start_cycle_count; //영역의 시작에서의 동적 주기 카운트
bool done_training; //훈련이 끝났는가
}
내부 하드웨어 테이블(1818)은 4-8과 같은 제한된 수의 구성 비트 패턴들을 포함할 수 있다. 구성 비트 패턴들은 구성 비트들 필드(예를 들어, configuration_bits)에 로드될 수 있고, 구성 비트 필드에서의 한 비트는 주어진 튜닝 가능 파라미터가 인에이블링되거나 디스에이블링되는 지를 나타낸다. 전술한 바와 같이, 프로세서 파라미터들 중 몇몇은 다음을 포함할 수 있다: (1) 몇몇 HW 프리페처들을 턴 온 또는 오프하는 것을 포함하는, 하드웨어(HW) 프리페처 설정들; (2) 소프트웨어(SW) 프리페치 명령어들을 무시하거나 존중하는 것을 포함하는, 소프트웨어(SW) 프리페치 명령어 설정들; (3) 캐시 축출/교체 힌트들을 무시하거나 존중하는 것을 포함하는 캐시 축출/교체 힌트들; (4) 동적으로 캐시 크기들을 구성하는 것을 포함하는 캐시 크기들; (5) DRAM 페이지 개방 정책들 및 버퍼 크기들을 구성하는 것을 포함하는 DRAM 채널들; 및 (6) 다양한 HW 버퍼 크기들 또는 HW 구조 크기들을 구성하는 것을 포함하는 HW 버퍼 크기. 구성 비트 패턴들은 프로세서의 튜닝 가능 파라미터들의 상이한 조합들을 인에이블링하거나 디스에이블링하는 데에 이용될 수 있다. 예를 들어, 구성 비트 패턴은 L1 IP 프리페치와 같은 특징이 인에이블링되거나 디스에이블링되는 것을 나타낼 수 있다. 상기 튜닝 데이터 구조(1812)의 필드들이 0으로 초기화될 수 있다는 것을 유의해야 한다.
일 실시예에서, 2개의 명령어, TUNABLE_REGION_BEGIN 및 TUNABLE_REGION_END가 한번 보다 많게 메모리에 접근할 수 있는 마이크로코드 흐름들로서 구현된다. 일 실시예에서, TUNABLE_REGION_BEGIN 명령어는 피연산자 1(이는 TUNE_DATA_STRUCTURE를 포인팅함)을 이용하여 'configuration_bits' 필드를 로딩한다. 프로세서의 마이크로코드는 프로세서 파라미터들을 구성하기 위해 (예를 들어, L1 프리페처를 인에이블링하고/디스에이블링하기 위해) 이들 비트들을 이용한다. 이 명령어는 또한 프로세서(1800)가 'start_icount' 필드에 INSTR_RETIRED 성능 카운터의 현재 값을 그리고 'tune_data_structure'의 'start_cycle_count' 필드에 CORE_CYCLES 성능 카운터를 저장하도록 야기할 수 있다. 추가 실시예에서, TUNABLE_REGION_END 명령어는 하기 공식을 이용하여 TUNABLE_REGION_BEGIN 및 TUNABLE_REGION_END 사이에 경계 정해진 영역에 대한 IPC 값을 계산한다:
IPC = (INSTR_RETIRED - start_icount)/(CORE_CYCLES - start_cycle_count)
계산된 IPC가 'best_configuration_IPC'보다 더 크다면, 계산된 IPC는 'best_configuration_IPC' 필드에 기입될 수 있고, 'configuration_bits'는 'best_configuration_bits' 필드에 복사될 수 있다. 다양한 필드들의 명명에 사용되는 대로의 “최고(best)”가 가장 높은 IPC 또는 기타 성능 메트릭들과 같은 가장 높은 메트릭을 표시하는데 사용될 수 있지만, 또한 가장 낮은 에너지 소비 메트릭 또는 가장 낮은 전력 소비 메트릭과 같은 가장 낮은 메트릭의 값들을 저장하는데 사용될 수 있다는 것을 유의해야 한다. 대안적으로, 다른 카운터 값들이 다른 유형들의 메트릭 계산들을 위한 다른 측정들을 추적하는데 사용될 수 있다.
추가 실시예에서, 'done_training' 비트가 거짓이면, 이 명령어는 (내부 HW 테이블(1818)로부터) 다음 구성 비트 패턴들을 고르고, 이것을 'configuration_bits' 필드에 기입한다. 어떤 다음 구성 비트 패턴도 없다면(이것이 모든 구성 비트 패턴들을 탐색했다면), done_training 필드는 설정되고(1로 기입되고), 'best_configuration_bits' 필드는 'configuration_bits' 필드상으로 복사되는데, 이는 다음 TUNABLE_REGION_BEGIN 명령어에 의해 판독될 수 있다. 이것은 최고 구성을 찾아내는 훈련 절차를 끝낸다. 본 명세서에서 기술된 바와 같이, "best configuration-bits" 필드에 의해 표시된 것과 같은, 최고 구성에 대한 참조들은 현재 예에서 기술된 바와 같이 가장 높은 메트릭(예를 들어, IPC)을 낳는 구성 파라미터들의 세트일 수 있지만, 또한 가장 낮은 전력 소비 메트릭과 같은 가장 낮은 메트릭을 낳는 구성일 수도 있다.
추가 실시예에서, 'done_training' 비트가 이미 설정되면, 이 명령어는 현재 IPC 값을 훈련 절차에서 이미 찾아낸 'best_configuratin_IPC'와 비교한다. 현재 IPC 값이 지정된 양(예를 들어, 1.10 X best_configuration_IPC) 만큼 'best_configuration_IPC'보다 더 크면, 훈련 절차는 'done_training' 비트를 거짓으로 하고 제1 구성 비트 패턴(내부 HW 테이블(1818)로부터 판독됨)을 'configuration_bits' 필드에 기입함으로써 재 시작된다. 훈련 절차를 재 시작하기 위한 지정된 양은 프로그래머에 의해, 사용자에 의해, 제조자에 의해, 또는 그와 유사한 것에 의해 설정될 수 있다. 지정된 양은 재훈련 임계값일 수 있다. 예를 들어, 재훈련은 현재 IPC 값과 가장 높은 IPC 값 사이의 차이가 재훈련 임계값보다 더 클 때 일어날 수 있다. 예를 들어, 동작 환경에서의 변화들이 상이한 최고 구성으로 이끈다면, 재훈련은 유용할 수 있다.
본 명세서에서 기술된 바와 같이, 현재 접근법은 프로세서의 개발자가 수많은 애플리케이션들에서 사용하기 위해 제조 시간에 프로세서를 위한 하나의 하드웨어 구성을 고르기 위한 것이다. 몇몇 현재 해결책에 대해, 고객은 디폴트 하드웨어 구성을 설정할 수 있다. 예를 들어, 고성능 컴퓨팅(HPC) 고객들은 일부 애플리케이션들이 이들로부터 이익을 얻을 수 있다 하더라도 종종 BIOS에서 모든 HW 프리페처들을 디스에이블링한다. 본 명세서에서 기술된 실시예들은 다중 하드웨어 구성이 각각의 애플리케이션에 대해 실행 시간에 검사되도록 허용한다. 예를 들어, BIOS에서 모든 프리페처들을 디스에이블링하는 HPC 고객들 대신에, 이 메커니즘은 동적으로 각각의 애플리케이션을 위한 적용 가능한 프리페처 설정을 고르는 데에 사용될 수 있다. 현재적으로 하드웨어가 측정된 IPC에 구성될 수 있기는 하지만, 이러한 하드웨어 구현들은 애플리케이션의 명령어들과 상호 작용하지 않아서, 하드웨어가 동일 코드 영역에 대한 여러 IPC 측정들을 실행하는 것을 어렵게 만든다. 이것은 하드웨어가 동일 코드 영역의 시작 및 종료 지점을 아는 것이 어렵기 때문이다. 그러므로, 이들 실시예들은 하드웨어 구현과 비교하여 지정된 코드 영역들에 대한 튜닝을 위한 IPC의 더 정확한 측정들을 허용한다.
또 다른 실시예에서, 각각의 애플리케이션은 그 자체의 HW 구성(예를 들어, 프리페처 설정)이 성능을 최적화하거나 에너지 또는 전력 소비를 최적화하는 것과 같이 해당 애플리케이션에 대해 특정적으로 맞춤화되도록 하는 것이 허용된다. 코드 영역(1810)이 스레디드 코드인 몇몇 실시예들에서, 튜닝 데이터 구조(1812) (예를 들어, 'tune_data_structure')는 스레드에 개인적이다(또는 하나의 스레드에 의해 접근되어야 한다). 다른 실시예들에서, 경계 정해진 코드 영역들은 네스팅되고, 각각의 튜닝 가능 코드 영역은 그 자체의 튜닝 데이터 구조(1812)를 갖는다. 다른 실시예들에서, 인터럽트 또는 예외가 있을 때마다, 프로세서(1800)는 인터럽트 또는 예외의 시간에서의 CORE_CYCLES 성능 카운터의 값을 특수 하드웨어 레지스터로 복사할 수 있다. 이 레지스터 값이 주어진 튜닝 가능 영역의 'start_cycle_count' 필드보다 크다면, TUNABLE_REGION_END 명령어가 명령어 카운트 및 주기 카운트가 인터럽트 또는 예외 때문에 정확할 수 없기 때문에 해당 영역에 대해 IPC를 계산하지 않을 수 있다. 다른 실시예들에서, 프로세서(1800)는 자신이 튜닝 가능 영역을 진입할 때 (내부 상태 레지스터에) 단일 유효 비트를 설정할 수 있고, 인터럽트 또는 예외가 있을 때마다 프로세서(1800)는 해당 유효 비트를 클리어링할 수 있다. 이 유효 비트가 튜닝 가능 영역의 끝에서 클리어하면, TUNABLE_REGION_END 명령어는 명령어 카운트 및 주기 카운트가 인터럽트 또는 예외 때문에 정확할 수 없기 때문에 해당 영역에 대한 IPC를 계산하지 않을 수 있다.
또 다른 실시예에서, 경계 정해진 코드 영역이 이것이 상수 튜닝을 필요로 하기 때문에 불안정한다는 것이 결정된다면, 코드 영역의 자동 튜닝은 디스에이블링될 수 있다. 이 실시예에서, 튜닝 데이터 구조(1812)는 부가적 '디스에이블링된' 필드를 포함한다. 또 다른 실시예에서, 자동 튜닝은 코드 영역이 측정이 이뤄지는 데에 충분히 클 때 실행될 수 있다. 예를 들어, 영역이 너무 작으면(예를 들어, 100,000 명령어 미만), 코드 영역은 무시당할 수 있다. 또 다른 실시예에서, 자동 튜닝은 프로세서 상태들의 변화들에 민감할 수 있다. 예를 들어, 자동 튜닝 알고리즘은 프로세서의 주파수의 변화들 또는 프로세서 상태들(P 상태들)의 변화들을 추적할 수 있고, 이러한 변화들이 측정들에 영향을 미칠 수 있으므로, 주파수가 변화하거나 또는 P 상태가 변화할 때 측정들을 재 시작할 수 있다. 새로운 명령어들은, 이들 명령어가 미래에 레거시 부담이 되는 것을 피하기 위해 이들 명령어들을 지원하지 않는 아키텍처들의 no-ops로 변환될 수 있다는 것을 유의해야 한다.
또 다른 실시예에서, 프로세서(1800)는 명령어들의 세트 및 마이크로코드(1802)를 저장하기 위해 메모리, 및 메모리와 결합되어 명령어들의 세트와 마이크로코드(1802)를 실행하고 또한 프로세서의 프로세서 파라미터들의 자동 튜닝을 실행하기 위한 프로세서 코어(1806)를 포함한다. 프로세서(1800)는 프로세서(1800)의 튜닝 가능 파라미터들의 자동 튜닝을 위해 경계가 정해진 명령어들의 세트의 코드 영역을 식별하기 위해 구성된다. 프로세서(1800)는 튜닝 가능 파라미터들의 제1 세트를 이용하여 코드 영역을 실행하고, 제1 세트를 이용하는 코드 영역의 제1 메트릭을 마이크로코드(1802)에 의해 계산한다. 프로세서(1800)는 튜닝 가능 파라미터들의 제2 세트를 이용하여 코드 영역을 실행하고, 또한 마이크로코드(1802)를 이용하여, 제2 세트를 이용하는 코드 영역의 제2 메트릭을 계산한다. 프로세서(1800)는 제1 메트릭과 제2 메트릭에 기초하여 제1 세트와 제2 세트로부터, 마이크로코드(1802)를 이용하여, 코드 영역에 대한 튜닝 가능 파라미터들의 제3 세트를 선택한다. 일 실시예에서, 프로세서(1800)는 제1 세트와 제2 세트 중 하나를 선택한다. 선택된 제3 세트는 예를 들어 전력 또는 에너지 메트릭들에 대해 그런 것처럼, 코드 영역에 대한 가장 높은 성능을 낳는 구성 파라미터들의 세트, 또는 코드 영역에 대한 가장 낮은 메트릭을 낳는 구성 파라미터들의 세트와 같은 최고 구성을 나타낼 수 있다. 또 다른 실시예에서, 프로세서(1800)는 제1 세트와 제2 세트 중 일부분들을 선택한다. 선택에 응답하여, 프로세서(1800)는 코드 영역의 후속 실행을 위해 프로세서(1800)의 시스템 구성을 변경하기 위해 튜닝 가능 파라미터들의 제3 세트를 적용한다.
몇몇 실시예들에서, 제1 메트릭, 제2 메트릭, 및 후속 메트릭들은 프로세서(1800)의 성능을 나타내는 성능 메트릭들이다. 일 실시예에서, 성능 메트릭은 IPC 계산들이다. 또 다른 실시예에서, 성능 메트릭은 코드 영역을 위한 주기들의 수이다. 예를 들어, 또 다른 실시예에서, 프로세서(1800)는 코드 영역의 시작의 경계를 정하고 코드 영역이 실행되는 동안, 주기 카운트와 명령어 카운트의 카운터 값들을 추적하는 제1 명령어를 식별하기 위해 마이크로코드(1802)를 실행하도록 구성된다. 마이크로코드(1802)는 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별한다. 마이크로코드(1802)는 후속 명령어를 식별한 후에 카운터 값들로부터 성능 메트릭을 계산한다. 마이크로코드(1802)는 성능 메트릭이 (후속적 명령어를 식별한 후에) 현재 시험된 코드 영역에 대해 저장되는 가장 높은 성능 메트릭을 초과하는지를 결정하고, 성능 메트릭이 가장 높은 성능 메트릭을 초과할 때 성능 메트릭을 가장 높은 성능 메트릭으로서 할당한다. 가장 높은 성능 메트릭이 초기에 0으로 초기화될 수 있다는 것을 유의해야 한다. 또한, 가장 높은 성능 메트릭은 지금까지 코드 영역에 대하여 시험된 구성 파라미터들(예를 들어, 구성 비트 패턴)의 세트들로부터의 가장 높은 성능 메트릭일 수 있다. 다른 실시예들에서, 메트릭들은 전력 소비 메트릭들과 같은, 프로세서(1800)의 전력 효율을 나타내는 전력 메트릭들이다. 다른 실시예들에서, 메트릭들은 에너지 소비 메트릭들과 같은, 프로세서(1800)의 에너지 효율을 나타내는 에너지 메트릭들이다.
이들 실시예들이 또한 전력 효율을 위한 자동 튜닝에 적용될 수 있다는 것을 유의해야 한다. 동일 방법론이 적용될 수 있다; 그러나, IPC와 같은 성능 메트릭들을 측정하는 대신에, 자동 하드웨어인 기반 튜닝 알고리즘이 전력 소비를 측정할 수 있고, 코드 영역에 대한 가장 낮은 전력 구성을 고르기 위해 측정된 전력 소비를 이용할 수 있다.
도 19 및 도 20은 일 실시예에 따른 코드 영역들의 연속 자동 튜닝을 위한 방법 1900의 흐름도들이다. 방법 1900은 하드웨어(회로, 전용 논리 등), (범용 컴퓨팅 시스템 또는 전용 기계에서 실행되는 것과 같은) 소프트웨어, 펌웨어(임베딩된 소프트웨어), 또는 이것들의 조합을 포함할 수 있는 프로세싱 논리에 의해 실행될 수 있다. 일 실시예에서, 도 18의 프로세서(1800)는 방법 1900을 실행한다. 또 다른 실시예에서, 자동 하드웨어 기반 튜닝 알고리즘(1814)은 방법 1900을 실행한다. 대안적으로, 본 명세서에서 기술된 프로세서들의 기타 컴포넌트들은 방법 1900의 동작들 중 몇몇 또는 전부를 실행한다.
도 19를 참조하면, 방법 1900은 프로세싱 논리가 다음 명령어(블록 1902)(예를 들어, 실행되고 있는 프로그램의 임의의 명령어)를 실행하는 것으로 시작한다. 프로세싱 논리는 다음 명령어가 TUNABLE_REGION_BEGIN 명령어인지를 결정한다(블록 1904). 만약 그렇다면, 프로세싱 논리는 메트릭 계산(예를 들어, 주기 카운트, 명령어 카운트, 누적 에너지)을 위한 개시 카운터 값들을 기록하고(블록 1906), 블록 1908로 진행한다. 블록 1904에서의 결정이 부정적이면, 프로세싱 논리는 아래 기술된 블록 1912로 진행한다. 블록 1908에서, 프로세싱 논리는 여전히 훈련 국면에 있는지를 결정한다(훈련 필드가 거짓에 설정됨). 만약 그렇다면, 프로세싱 논리는 프리페처를 디스에이블링하는 것과 같이 시스템 구성(또는 프로세서 구성)을 변경하기 위해 "구성 비트 패턴"을 이용하고(블록 1910), 다음 명령어를 위해 블록 1902로 복귀한다. 블록 1908에서의 결정이 부정적이면, 프로세싱 논리는 블록 1902로 복귀하고, 블록 1910을 실행하지 않는다.
블록 1912에서, 프로세싱 논리는 명령어가 TUNABLE_REGION_END 명령어들인지를 결정한다. 그렇지 않다면, 프로세싱 논리는 블록 1902로 복귀한다; 다른 경우에는, 프로세싱 논리는 종료 카운터 값들(예를 들어, 주기 카운트, 명령어 카운트, 누적 에너지)을 기록하고, 메트릭 값(V)(예를 들어, IPC, 전력 소비 비율 또는 그와 유사한 것)을 계산한다(블록 1914). 블록 1916에서, 프로세싱 논리는 여전히 훈련 국면에 있는지(모든 훈련 패턴들이 끝나지 않았는지)를 결정한다. 만약 그렇다면, 프로세싱 논리는 내부 하드웨어 테이블에 저장된 모든 훈련 패턴들(또한 "구성 비트 패턴들"로서 지칭됨)이 시험되었는지를 결정한다(블록 1928). 만약 그렇다면, 프로세싱 논리는 훈련 국면을 빠져나가고(블록 1920), 다음 명령어에게, 즉 블록 1902로 복귀한다. 블록 1918에서 모든 훈련 패턴들이 끝나지 않았다면, 프로세싱 논리는 다음 훈련 패턴을 "configuration_bits" 필드에 기입하고(도 20의 블록 2026), 블록 1902(도 19)로 복귀한다. 블록 1916에서 프로세싱 논리가 훈련이 끝났다고 결정하면, 프로세싱 논리는 메트릭 값(V)이 훈련 국면에서 기록된 지정 값만큼(예를 들어, X% 더 나음) 최고 구성(예를 들어, 코드 영역에 대한 가장 높은 IPC를 가진 파라미터들의 세트)의 현재 값을 초과하는지를 결정한다(도 20의 블록 2024). 만약 그렇다면, 프로세싱 논리는 훈련을 인에이블링하기 위해 비트를 설정하여 하는 것과 같이 훈련 국면에 재 진입하고(도 20의 블록 2026), 블록 2022(도 20)에서 다음 구성 비트 패턴을 "configuration_bits" 필드에 기입하고, 및 블록 1902(도 19)로 복귀한다. 블록 2024에서의 결정이 부정적이면, 프로세싱 논리는 블록 1902로 복귀하고, 블록들 2026 및 2022을 건너 뛴다. 방법 1900은 더 이상의 명령어들이 없을 때 종료한다.
방법의 또 다른 실시예에서, 프로세싱 논리는 프로세서상에서 실행되는 마이크로코드에 의해 프로세서 파라미터들의 자동 튜닝을 위해 경계가 정해진 코드 영역을 식별한다. 마이크로코드는 아래 기술된 것처럼 코드 영역을 위한 프로세서 파라미터들을 자동 튜닝한다. 마이크로코드는 사용자 개입 없이 프로세서 파라미터들을 자동 튜닝하고, 애플리케이션 실행 시간에 프로세서 파라미터들을 자동 튜닝할 수 있다. 유사하게, 마이크로코드는 상이한 애플리케이션들을 위한 상이한 프로세서 파라미터들을 자동 튜닝할 수 있다. 일 실시예에서, 마이크로코드는 프로세서 파라미터들의 상이한 조합들을 이용하여 코드 영역을 실행함으로써 프로세서 파라미터들을 자동 튜닝하고, 프로세서 파라미터들의 각각의 상이한 조합들에 대해 코드 영역의 실행의 메트릭을 계산한다. 마이크로코드는 메트릭들에 기초하여 프로세서 파라미터들의 세트를 선택한다.
추가 실시예에서, 한 훈련 국면 동안, 프로세싱 논리는 코드 영역의 시작의 경계를 정한 제1 명령어를 식별하고, 코드 영역이 실행되는 동안 주기 카운트와 명령어 카운트의 카운터 값들을 추적한다. 프로세싱 논리는 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별한다. 후속 명령어에 응답하여, 프로세싱 논리는 메트릭에 대한 카운터 값들로부터 성능 메트릭을 계산하고, 성능 메트릭이 가장 높은 성능 메트릭(예를 들어, 시험된 코드 영역에 대한 가장 높은 IPC)보다 더 좋은지를 결정하고, 및 성능 메트릭이 가장 높은 성능 메트릭을 초과할 때 가장 높은 성능 메트릭으로서 성능 메트릭을 할당한다. 일 실시예에서, 메트릭은 IPC, 명령어 카운트, 또는 그와 유사한 것과 같은 성능 메트릭이다. IPC를 이용할 때, 프로세싱 논리는 실행된 코드 영역에 대한 명령어들의 수를 계산하고, 실행된 코드 영역을 위한 주기들의 수를 계산하고, 및 주기들의 수로 명령어들의 수를 나눈다. 추가 실시예에서, 이 훈련 국면 후에, 프로세싱 논리는 성능 메트릭이 지정된 양만큼 가장 높은 성능 메트릭의 현재 값보다 더 큰지를 결정한다. 프로세싱 논리는 성능 메트릭이 지정된 양만큼 가장 높은 성능 메트릭의 현재 값보다 더 클 때 훈련 국면에 재 진입한다.
또 다른 실시예에서, 튜닝 가능 파라미터들은 마이크로코드에서 내부 하드웨어 테이블에서의 구성 비트 패턴들로서 저장되며, 여기서 구성 비트 패턴의 각각의 구성 비트들은 주어진 튜닝 가능 파라미터가 인에이블링될지 또는 디스에이블링될지를 표시한다. 이 실시예에서, 프로세싱 논리는 데이터 구조를 포인팅하는 제1 피연산자를 이용하여 내부 하드웨어 테이블로부터 구성 비트 패턴을 로드하고, 리타이어링된 명령어 성능 카운터의 현재 값을 데이터 구조의 시작 카운트 필드에 저장하고, 코어 주기 성능 카운터의 현재 값을 데이터 구조의 시작 주기 카운트 필드에 저장한다. 일 실시예에서, 프로세싱 논리는 후속 명령어를 식별하고, 제1 명령어와 후속 명령어 사이에 코드 영역에 대한 IPC 계산을 계산한다. 프로세싱 논리는 IPC 계산이 "최고 IPC" 필드의 현재 값보다 더 클 때 IPC 계산을 데이터 구조의 "최고 IPC" 필드(예를 들어, 가장 높은 IPC)에 기입하고, IPC 계산이 최고 IPC 필드의 현재 값(예를 들어, 가장 높은 IPC 값)보다 클 때 구성 비트들 필드의 구성 비트들을 데이터 구조의 "최고 구성 비트" 필드(예를 들어, 가장 높은 IPC 값을 낳는 구성 비트 패턴에 대한 구성 비트들)에 복사한다. 최고 IPC 필드는 코드 영역에 대해 측정되는 가장 높은 IPC 값을 나타내고 최고 구성 비트 필드는 이 예에서 측정되는 가장 높은 IPC 값을 낳는 구성 비트들을 나타낸다. 추가 실시예에서, 프로세싱 논리는 훈련 국면이 내부 하드웨어 테이블에 저장된 구성 비트 패턴들에 대해 끝났는지를 결정하고, 훈련 국면이 끝나지 않았을 때 내부 하드웨어 테이블로부터 다음 구성 비트 패턴을 선택하고, 다음 구성 비트 패턴을 구성 비트들 필드에 기입한다. 추가 실시예에서, 프로세싱 논리는 훈련 국면이 끝났을 때 IPC 계산이 지정된 양만큼 "최고 IPC" 필드의 현재 값보다 큰지를 결정하고, IPC 계산이 지정된 양만큼 "최고 IPC" 필드의 현재 값보다 클 때 훈련 국면에 재 진입한다.
메트릭은 전력 메트릭 또는 에너지 메트릭과 같은 다른 메트릭들일 수 있다. 예를 들어, 프로세싱 논리는 코드 영역의 최대 전력 소비 또는 코드 영역의 누적된 에너지 소비를 측정할 수 있다. 전력은 순간 양인 반면에, 에너지는 누적된 전력 소비인데, 예를 들어 에너지는 시간 경과에 따라 더해진 전력 소비일 수 있다. 예를 들어, 일 실시예에서 메트릭은 전력(에너지) 소비와 같은 전력(또는 에너지) 메트릭, 또는 그와 유사한 것이다. 예를 들어, 프로세싱 논리는 한 훈련 국면 동안 상기와 같은 제1 명령어 및 후속 명령어 모두를 식별하지만, 코드 영역의 실행의 전력(에너지) 측정들을 추적한다. 후속 명령어에 응답하여, 프로세싱 논리는 추적된 전력 측정들에 기초하여 실행되고 있는 코드 영역에 대한 전력 소비(에너지 소비) 메트릭을 계산한다. 프로세싱 논리는 전력 소비(또는 에너지 소비) 메트릭이 가장 낮은 전력 소비(또는 에너지 소비) 메트릭을 초과하는지를 결정하고, 및 전력 소비(에너지 소비) 메트릭이 가장 낮은 전력 소비 메트릭보다 초과할 때 전력 소비 메트릭을 가장 낮은 전력 소비(또는 에너지 소비) 메트릭으로서 할당한다.
본 명세서에서 기술된 실시예들은, 프로세서가 사용자 개입 없이 주어진 코드 영역(예를 들어, 코드의 피스)을 실행하는 데에 가장 높은 성능을 낳는 HW 구성을 선택하도록 허용함으로써 프로세서들이 더 높은 성능을 제공하게 허용한다. 예를 들어, 소프트웨어 프리페치 명령어들이 그 하에서 프로그램에 이익이 되는 상황들은 소프트웨어 프리페치 명령어들이 캐시, 메모리 서브시스템, 및 하드웨어 프리페칭과 긍정적으로 또는 부정적으로 상호 작용할 수 있기 때문에 결정하기에 어렵다. 이들 실시예들은 프리페칭이 주어진 시스템에서 실제로 유익할 때 SW 프리페치 명령어들이 프리페칭을 행하도록 인에이블링하는 데에 이용될 수 있다. 동일한 점이 MIC(Many Integrated Core) 아키텍처들상에서 발견되는 축출 명령어들에게 적용된다. 게다가, 이들 실시예들은 프로세서가 (에너지 효율 사유로) 디폴트로 더 작은 구조 크기들을 가지며 탑재되도록 허용할 수 있지만, 프로그램이 참으로 더 큰 구조들로부터 이익을 얻을 수 있을 때 프로그램이 더 큰 구조 크기들을 요구하는 기회를 부여할 수 있다. 특히, 이들 실시예들은 프로그램이 이질적 환경에서의 더 높은 성능 프로세서상에서 실행되도록 요청하게 허용할 수도 있다. 예를 들어, 대형 코어들 및 Atom 코어들이 있는 시스템에서, 이 메커니즘은 코드의 경계 정해진 피스가 대형 코어상에서 실행되는 것에 이점이 있다면 Atom 코어로부터 대형 코어로 해당 코드의 피스를 이동하는 데에 사용될 수 있다. 또한, 이들 실시예들은 자동적으로 하드웨어에 의해 튜닝될 수 있는 튜닝 가능 코드를 산출하기 위해 JIT(just-in-time) 컴파일러들 및 실행시간들 제공할 수 있다.
비록 본 발명이 한정된 수의 실시예들에 대하여 설명되었지만, 통상의 기술자들은 이로부터 많은 변경들과 변형들을 인식할 수 있을 것이다. 첨부된 청구항들은 본 발명의 진정한 사상과 범위 내에 속하는 모든 이러한 변경들과 변형들을 포함하도록 의도된 것이다.
설계는 작성으로부터 시뮬레이션을 거쳐 제조에 이르기까지 다양한 국면들을 거칠 수 있다. 설계를 표현하는 데이터는 많은 방식으로 설계를 표현할 수 있다. 첫 번째로, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어(hardware description language) 또는 또 다른 기능적 기술 언어를 이용하여 표현될 수 있다. 부가적으로, 논리 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 절차의 일부 국면들에서 산출될 수 있다. 더욱이, 대부분의 설계들은, 어떤 국면에서, 하드웨어 모델에서 다양한 장치들의 물리적 배치를 표현하는 데이터 레벨에 도달한다. 종래의 반도체 제조 기술들이 이용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생산하기 위해 이용되는 마스크들에 대해 상이한 마스크 층들 상의 다양한 피처들의 유무를 지정하는 데이터일 수 있다. 임의의 설계 표현에서, 데이터는 임의 형태의 기계 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 저장 장치는, 이러한 정보를 전송하도록 변조되거나 다른 식으로 발생되는 광학적 또는 전기적 파를 통해 전송되는 정보를 저장하는 기계 판독 가능 매체일 수 있다. 코드 또는 설계를 표시하거나 전달하는 전기 반송파가 전송될 때, 전기 신호의 복사, 버퍼링, 또는 재전송이 수행되는 한 새로운 복사본이 만들어진다. 그러므로, 통신 제공자 또는 네트워크 제공자는 유형의 기계 판독 가능 매체상에 적어도 일시적으로 반송파에 인코딩된 정보와 같은 아티클(article)을 저장하여, 본 발명의 실시예들의 기술들을 구체화할 수 있다.
본 명세서에 사용되는 대로의 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은 마이크로컨트롤러에 의해 실행되도록 적응된 코드를 저장하는 비일시적 매체와 연관되는 마이크로컨트롤러와 같은 하드웨어를 포함한다. 따라서, 모듈이라는 언급은, 일 실시예에서, 비일시적 매체상에 보유되는 코드를 인식 및/또는 실행하도록 특정하게 구성되는 하드웨어를 가리킨다. 더욱이, 또 다른 실시예에서, 모듈의 사용은 미리 정해진 동작들을 실행하기 위해 마이크로컨트롤러에 의해 실행되도록 특정하게 적응된 코드를 포함하는 비일시적 매체를 가리킨다. 또한 추론할 수 있는 바와 같이, (이 예에서의) 용어 모듈이란 마이크로컨트롤러와 비일시적 매체의 조합을 지칭할 수 있다. 별개의 것으로 예시되는 모듈 경계들은 종종 공통적으로 변하고 잠재적으로 겹친다. 예를 들어, 제1 및 제2 모듈들은, 일부 독립적인 하드웨어, 소프트웨어, 또는 펌웨어를 잠재적으로 보유하면서 하드웨어, 소프트웨어, 펌웨어, 또는 이것들의 조합을 공유할 수 있다. 일 실시예에서, 논리(logic)라는 용어의 사용은 트랜지스터, 레지스터와 같은 하드웨어, 또는 프로그램 가능 논리 디바이스와 같은 그 외의 하드웨어를 포함한다.
'하도록 구성되는'이라는 문구의 사용은, 일 실시예에서, 지정된 또는 결정된 작업을 실행하는 장치, 하드웨어, 논리 또는 요소를 배치하는 것, 함께 모으는 것, 제조하는 것, 판매를 위해 제공하는 것, 수입하는 것 및/또는 설계하는 것을 말한다. 이 예에서, 동작하지 않고 있는 장치 또는 요소는 이것이 상기 지정된 작업을 실행하도록 설계, 결합 및/또는 상호 접속되어 있는 경우, 여전히 지정된 작업을 실행'하도록 구성'되어 있다. 순수한 예시적 예로서, 논리 게이트는 동작 동안에 0 또는 1을 제공할 수 있다. 그러나, 클록에 인에이블 신호를 제공'하도록 구성'되어 있는 논리 게이트는 1 또는 0을 제공할 수 있는 모든 가능성 있는 논리 게이트마다를 포함하지는 않는다. 대신에, 논리 게이트는 동작 동안에 1 또는 0 출력이 클록을 인에이블하게 될 몇몇 방식으로 결합된 것이다. 또다시 유의할 점은, '하도록 구성'이라는 용어의 사용은 동작을 필요로 하지 않고, 그 대신에 장치, 하드웨어, 및/또는 요소의 잠재적 상태(latent state)에 중점을 두고 있다는 것이며, 여기서 잠재적 상태에서 장치, 하드웨어, 및/또는 요소는 장치, 하드웨어, 및/또는 요소가 동작하고 있을 때 특정 작업을 실행하도록 설계되어 있다.
게다가, '하는', '할 수 있는', 및/또는 '하도록 동작할 수 있는'이라는 문구들의 사용은, 일 실시예에서, 지정된 방식으로 장치, 하드웨어, 및/또는 요소의 사용을 가능하게 하는 방식으로 설계되어 있는 어떤 장치, 논리, 하드웨어, 및/또는 요소를 말한다. 앞서 살펴본 바와 같이, '하는', '할 수 있는', 또는 '하도록 동작할 수 있는'의 사용은 장치, 논리, 하드웨어, 및/또는 요소의 잠재적 상태를 말하고, 여기서 장치, 논리, 하드웨어, 및/또는 요소는 동작하지 않고 있지만, 지정된 방식으로 장치의 사용을 가능하게 하는 방식으로 설계되어 있다.
값은, 본 명세서에서 사용되는 바로는, 숫자, 상태, 논리 상태, 또는 이진 논리 상태의 임의의 공지된 표현을 포함한다. 종종, 논리 레벨(logic level), 논리 값(logic value), 또는 논리적 값(logical value)의 사용은 단순히 이진 논리 상태를 나타내는 1들 및 0들인 것으로서 또한 지칭된다. 예를 들어, 1은 하이 논리 레벨을 지칭하고 0은 로우 논리 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 논리 값 또는 다중 논리 값을 보유하는 능력을 가질 수 있다. 그러나, 컴퓨터 시스템에서의 값들에 대한 그 외의 표현들도 사용되어 왔다. 예를 들어, 십진법 수 10은 이진 값 1010 및 16진법 문자 A로서 표현될 수도 있다. 따라서, 한 값은 컴퓨터 시스템에서 보유될 수 있는 정보의 임의의 표현을 포함한다.
게다가, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 일례로서, 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 나타낼 수 있고, 논리 0과 같은 제2 값은 비 디폴트 상태를 나타낼 수 있다. 덧붙여, 재설정 및 설정이라는 용어들은, 일 실시예에서, 제각기 디폴트 및 갱신된 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 가능하게는 하이 논리 값, 즉 재설정을 포함하는 한편, 갱신된 값은 가능하게는 로우 논리 값, 즉 설정을 포함한다. 임의 수의 상태들을 나타내기 위하여 임의 조합의 값들이 활용될 수 있다는 것을 유의한다.
상기 제시된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드 세트의 실시예들은 프로세싱 유닛에 의해 실행가능한, 기계 접근 가능한, 기계 판독 가능한, 컴퓨터 접근 가능한, 또는 컴퓨터 판독 가능한 매체상에 저장되는 명령어들 또는 코드를 통해 구현될 수 있다. 비일시적 기계 접근 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템과 같은 기계에 의해 판독 가능한 형태로 정보를 제공하는 (즉, 저장하고 및/또는 전송하는) 임의의 메커니즘을 포함한다. 예를 들어, 비일시적 기계 접근 가능 매체는 SRAM(static RAM) 또는 DRAM(dynamic RAM)과 같은 RAM(random-access memory); ROM; 자기 또는 광 저장 매체; 플래시 메모리 장치; 전기적 저장 장치; 광 저장 장치; 음향 저장 장치; 그로부터 정보를 수신할 수 있는 비일시적 매체들과 구별되게 될 일시적(전파된) 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들)로부터 수신되는 정보를 보유하기 위한 기타 형태의 저장 장치들; 기타 등등을 포함한다.
본 발명의 실시예들을 실행하는 논리를 프로그래밍하는데 이용되는 명령어들은 DRAM, 캐시, 플래시 메모리, 또는 기타 저장 장치와 같은 시스템 내의 메모리에 저장될 수 있다. 더욱이, 명령어들은 네트워크를 통해 또는 기타 컴퓨터 판독 가능 매체에 의해 배포될 수 있다. 따라서, 기계 판독 가능 매체는 플로피 디스켓, 광학 디스크, CD-ROM, 및 광자기 디스크, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 플래시 메모리, 또는 전기적, 광학적, 음향적 또는 기타 형태의 전파되는 신호들(예를 들어, 반송파, 적외선 신호, 디지털 신호 등)을 통한 인터넷상에서의 정보의 전송에 이용되는 유형의 기계 판독 가능 저장 장치를 포함하지만 이것들에만 제한되지는 않는, 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 메커니즘을 포함할 수 있다. 그에 따라, 컴퓨터 판독 가능 매체는, 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 전자적 명령어들 또는 정보를 저장 또는 전송하기 위한 임의 유형의 유형(tangible) 기계 판독 가능 매체를 포함한다.
본 명세서 전체에 걸쳐서 "일 실시예" 또는 "실시예"를 참조하는 것은, 실시예와 결합되어 기술된 특정한 구조, 특징 또는 특성이 본 발명의 적어도 일 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전반에 걸쳐 다양한 위치들에서 문구들 "일 실시예에서" 또는 "실시예에서"가 출현하는 것은 반드시 모두 동일 실시예를 가리키는 것은 아니다. 더욱이, 특정한 특징들, 구조들, 또는 특성들은 하나 이상의 실시예들에서 임의의 적합한 방식으로 조합될 수 있다.
상기 명세서에서, 상세한 설명은 특정 예시적 실시예들을 참조하여 주어졌다. 그러나, 첨부된 청구항들에서 제시된 바와 같은 본 발명의 더 넓은 사상 및 범위로부터 벗어나지 않고서, 그에 대한 다양한 변형 및 변경들이 행해질 수 있다는 것이 명백할 것이다. 따라서, 명세서 및 도면들은 한정적 의미가 아니라 예시적 의미로서 간주되어야 한다. 더욱이, 실시예 및 기타 예시적 언어의 선행 사용은 반드시 동일 실시예 또는 동일한 예를 가리킬 필요는 없고, 잠재적으로 동일 실시예뿐만 아니라 상이하고 구별되는 실시예들을 가리킬 수도 있다.
Claims (24)
- 프로세서로서:
명령어들의 세트를 저장하기 위한 메모리; 및
상기 메모리와 결합되어 상기 명령어들의 세트를 실행하기 위한 프로세서 코어 -상기 프로세서 코어는:
상기 프로세서의 튜닝 가능 파라미터들의 자동 튜닝을 위해 경계가 정해지는 상기 명령어들의 세트의 코드 영역을 식별하고;
제1 세트의 튜닝 가능 파라미터들을 이용하여 상기 코드 영역을 실행하고;
상기 제1 세트를 이용하는 상기 코드 영역의 제1 메트릭을 계산하고;
제2 세트의 튜닝 가능 파라미터들을 이용하여 상기 코드 영역을 실행하고;
상기 제2 세트를 이용하는 상기 코드 영역의 제2 메트릭을 계산하고; 및
상기 제1 메트릭 및 상기 제2 메트릭에 기초하여 상기 제1 세트 및 상기 제2 세트로부터 상기 코드 영역에 대한 제3 세트의 튜닝 가능 파라미터들을 선택하고; 및
상기 선택에 응답하여, 상기 코드 영역의 후속 실행을 위해 상기 프로세서의 시스템 구성을 변경하도록 상기 제3 세트의 튜닝 가능 파라미터들을 적용함-
를 포함하는 프로세서. - 제1항에 있어서, 상기 제1 메트릭 및 상기 제2 메트릭은 상기 프로세서의 성능을 나타내는 성능 메트릭들인 프로세서.
- 제1항에 있어서, 상기 제1 메트릭 및 상기 제2 메트릭은 IPC(instructions-per-cycle) 계산들인 프로세서.
- 제1항에 있어서, 상기 제1 메트릭 및 상기 제2 메트릭은 상기 프로세서의 전력 효율 또는 에너지 효율을 나타내는 전력 소비 메트릭들 또는 에너지 소비 메트릭들 중 적어도 하나인 프로세서.
- 제1항에 있어서, 상기 프로세서는:
상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하고;
상기 코드 영역이 실행되는 동안 주기 카운트 및 명령어 카운트에 대한 카운터 값들을 추적하고;
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하고;
상기 후속 명령어의 식별 후에 상기 카운터 값들로부터 성능 메트릭을 계산하고;
상기 후속 명령어의 식별 후에 상기 성능 메트릭이 가장 높은 성능 메트릭을 초과하는지를 결정하고; 및
상기 성능 메트릭이 상기 가장 높은 성능 메트릭을 초과할 때 상기 성능 메트릭을 상기 가장 높은 성능 메트릭으로서 할당하기 위해 마이크로코드를 실행하도록 추가로 구성되는
프로세서. - 제5항에 있어서, 상기 제1 명령어 및 상기 후속 명령어는 마이크로코드 흐름들로서 구현되는 프로세서.
- 제1항에 있어서, 상기 튜닝 가능 파라미터들은 마이크로코드에서 내부 하드웨어 테이블에서의 구성 비트 패턴들로서 저장되며, 각각의 상기 구성 비트 패턴들의 각각의 구성 비트는 주어진 튜닝 가능 파라미터가 인에이블링될지 또는 디스에이블링될지를 표시하는 프로세서.
- 제7항에 있어서, 상기 프로세서는 상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하도록 구성되고, 상기 제1 명령어는:
데이터 구조를 포인팅하는 제1 피연산자를 이용하여 상기 내부 하드웨어 테이블로부터의 구성 비트 패턴을 로드하고;
상기 데이터 구조의 시작 카운트 필드에 리타이어링된 명령어 성능 카운터의 현재 값을 저장하고; 및
상기 데이터 구조의 시작 주기 카운트 필드에 코어 주기 성능 카운터(core cycle performance counter)의 현재 값을 저장하도록 구성되는
프로세서. - 제8항에 있어서, 상기 프로세서는 상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하도록 추가로 구성되고, 상기 후속 명령어는:
상기 제1 명령어와 상기 후속 명령어 사이에 경계가 정해지는 상기 코드 영역에 대해 IPC 계산을 계산하고;
상기 IPC 계산이 가장 높은 IPC 필드의 현재 값보다 클 때 상기 IPC 계산을 상기 데이터 구조의 상기 가장 높은 IPC 필드에 기입하고; 및
상기 IPC 계산이 상기 가장 높은 IPC 필드의 현재 값보다 클 때 구성 비트들 필드의 구성 비트들을 상기 데이터 구조의 가장 높은 구성 비트들 필드에 복사하도록 구성되는
프로세서. - 제9항에 있어서, 상기 후속 명령어는:
훈련 국면이 상기 내부 하드웨어 테이블에 저장되는 상기 구성 비트 패턴들에 대해 끝났는지를 결정하고;
상기 훈련 국면이 끝나지 않았을 때 상기 내부 하드웨어 테이블로부터 다음 구성 비트 패턴을 선택하고, 상기 다음 구성 비트 패턴을 구성 비트들 필드에 기입하고;
상기 훈련 국면이 끝났을 때 상기 IPC 계산이 지정된 양만큼 상기 가장 높은 IPC 필드의 현재 값보다 큰지를 결정하고; 및
상기 IPC 계산이 상기 지정된 양만큼 상기 가장 높은 IPC 필드의 현재 값보다 클 때 상기 훈련 국면에 재 진입하도록 추가로 구성되는
프로세서. - 방법으로서:
프로세서의 프로세서 파라미터들의 자동 튜닝을 위해 경계가 정해지는 코드 영역을 식별하는 단계; 및
상기 코드 영역을 위해 상기 프로세서 파라미터들을 자동 튜닝하는 단계 - 상기 자동 튜닝 단계는:
상기 프로세서 파라미터들의 상이한 조합들을 이용하여 상기 코드 영역을 실행하는 단계;
상기 프로세서 파라미터들의 각각의 상기 상이한 조합들에 대해 상기 코드 영역의 실행의 메트릭을 계산하는 단계; 및
상기 메트릭들에 기초하여 프로세서 파라미터들의 세트를 선택하는 단계를 포함함-
를 포함하는 방법. - 제11항에 있어서:
훈련 국면 동안,
상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하는 단계;
상기 코드 영역이 실행되는 동안 주기 카운트 및 명령어 카운트에 대한 카운터 값들을 추적하는 단계; 및
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하는 단계를 더 포함하고,
상기 후속 명령어를 식별하는 단계에 응답하여,
상기 메트릭에 대한 상기 카운터 값들로부터 성능 메트릭을 계산하는 단계와,
상기 성능 메트릭이 상기 프로세서 파라미터들의 세트에 대한 가장 높은 성능 메트릭을 초과하는지를 결정하는 단계와,
상기 성능 메트릭이 상기 가장 높은 성능 메트릭을 초과할 때 상기 성능 메트릭을 상기 가장 높은 성능 메트릭으로서 할당하는 단계를 더 포함하는 방법. - 제12항에 있어서, 상기 성능 메트릭을 계산하는 단계는 IPC를 계산하는 단계를 포함하는 방법.
- 제13항에 있어서, 상기 IPC를 계산하는 단계는:
상기 실행된 코드 영역에 대한 명령어들의 수를 계산하는 단계;
상기 실행된 코드 영역에 대한 주기들의 수를 계산하는 단계; 및
상기 명령어들의 수를 상기 주기들의 수로 나누는 단계를 포함하는
방법. - 제12항에 있어서,
상기 훈련 국면 후에,
상기 성능 메트릭이 지정된 양만큼 상기 가장 높은 성능 메트릭의 현재 값보다 큰지를 결정하는 단계, 및
상기 성능 메트릭이 상기 지정된 양만큼 상기 가장 높은 성능 메트릭의 현재 값보다 클 때 상기 훈련 국면에 재 진입하는 단계
를 더 포함하는 방법. - 제11항에 있어서:
훈련 국면 동안,
상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하는 단계; 및
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하는 단계를 더 포함하고,
상기 후속 명령어를 식별하는 단계에 응답하여,
실행되고 있는 상기 코드 영역의 메트릭에 대한 전력 소비 메트릭을 계산하는 단계와,
상기 전력 소비 메트릭이 가장 낮은 전력 소비 메트릭을 초과하는지를 결정하는 단계와,
상기 전력 소비 메트릭이 상기 가장 낮은 전력 소비 메트릭을 초과할 때 상기 전력 소비 메트릭을 상기 가장 낮은 전력 소비 메트릭으로서 할당하는 단계를 더 포함하는 방법. - 제11항에 있어서, 상기 프로세서 파라미터들은 마이크로코드에서 내부 하드웨어 테이블에서의 구성 비트 패턴들로서 저장되고, 상기 구성 비트 패턴의 각각의 구성 비트는 주어진 프로세서 파라미터가 인에이블링될지 또는 디스에이블링될지를 표시하고, 상기 방법은:
데이터 구조를 포인팅하는 제1 피연산자를 이용하여 상기 내부 하드웨어 테이블로부터의 구성 비트 패턴을 로드하는 단계;
상기 데이터 구조의 시작 카운트 필드에 리타이어링된 명령어 성능 카운터의 현재 값을 저장하는 단계; 및
상기 데이터 구조의 시작 주기 카운트 필드에 코어 주기 성능 카운터의 현재 값을 저장하는 단계
를 더 포함하는 방법. - 제17항에 있어서:
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하는 단계;
제1 명령어와 상기 후속 명령어 사이에 경계가 정해지는 상기 코드 영역에 대한 IPC 계산을 계산하는 단계;
상기 IPC 계산이 가장 높은 IPC 필드의 현재 값보다 클 때 상기 IPC 계산을 상기 데이터 구조의 상기 가장 높은 IPC 필드에 기입하는 단계; 및
상기 IPC 계산이 상기 가장 높은 IPC 필드의 현재 값보다 클 때 구성 비트들 필드의 구성 비트들을 상기 데이터 구조의 가장 높은 구성 비트들 필드에 복사하는 단계
를 더 포함하는 방법. - 제18항에 있어서:
훈련 국면이 상기 내부 하드웨어 테이블에 저장되는 상기 구성 비트 패턴들에 대해 끝났는지를 결정하는 단계;
상기 훈련 국면이 끝나지 않았을 때 상기 내부 하드웨어 테이블로부터의 다음 구성 비트 패턴을 선택하고, 상기 다음 구성 비트 패턴을 상기 구성 비트들 필드에 기입하는 단계;
상기 훈련 국면이 끝났을 때 상기 IPC 계산이 지정된 양만큼 상기 가장 높은 IPC 필드의 현재 값보다 큰지를 결정하는 단계; 및
상기 IPC 계산이 상기 지정된 양만큼 상기 가장 높은 IPC 필드의 현재 값보다 클 때 상기 훈련 국면에 재 진입하는 단계
를 더 포함하는 방법. - 데이터를 포함하는 비일시적 기계 판독 가능 저장 매체로서:
상기 데이터는, 프로세서에 의해 접근될 때, 상기 프로세서로 하여금:
상기 프로세서의 프로세서 파라미터들의 자동 튜닝을 위해 경계가 정해지는 코드 영역을 식별하고; 및
상기 코드 영역을 자동 튜닝하고 -상기 자동 튜닝은:
상기 프로세서 파라미터들의 상이한 세트들을 이용하여 상기 코드 영역을 실행하고;
상기 프로세서 파라미터들의 각각의 상기 상이한 세트들에 대한 상기 코드 영역의 메트릭을 계산하고; 및
상기 메트릭들에 기초하여 프로세서 파라미터들의 세트를 선택하는 것을 포함하는 동작들을 실행하도록 야기하는
비일시적 기계 판독 가능 저장 매체. - 제20항에 있어서, 상기 동작들은:
훈련 국면 동안,
상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하고;
상기 코드 영역이 실행되는 동안 주기 카운트 및 명령어 카운트에 대한 카운터 값들을 추적하고;
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하고; 및
상기 후속 명령어를 식별한 것에 응답하여,
상기 메트릭에 대한 상기 카운터 값들로부터 성능 메트릭을 계산하고;
상기 성능 메트릭이 상기 프로세서 파라미터들의 세트에 대한 가장 높은 성능 메트릭을 초과하는지를 결정하고; 및
상기 성능 메트릭이 상기 가장 높은 성능 메트릭을 초과할 때 상기 성능 메트릭을 상기 가장 높은 성능 메트릭으로서 할당하는 것을 더 포함하는
비일시적 기계 판독 가능 저장 매체. - 제21항에 있어서, 상기 성능 메트릭을 계산하는 것은 IPC를 계산하는 것을 포함하는 비일시적 기계 판독 가능 저장 매체.
- 제21항에 있어서, 상기 동작들은:
상기 훈련 국면 후에,
상기 성능 메트릭이 지정된 양만큼 상기 가장 높은 성능 메트릭의 현재 값보다 큰지를 결정하고, 및
상기 성능 메트릭이 상기 지정된 양만큼 상기 가장 높은 성능 메트릭의 현재 값보다 클 때 상기 훈련 국면에 재 진입하는 것을 더 포함하는
비일시적 기계 판독 가능 저장 매체. - 제20항에 있어서, 상기 동작들은:
훈련 국면 동안,
상기 코드 영역의 시작의 경계를 정하는 제1 명령어를 식별하고;
상기 코드 영역의 끝의 경계를 정하는 후속 명령어를 식별하고;
상기 후속 명령어를 식별한 것에 응답하여,
실행되고 있는 상기 코드 영역의 상기 메트릭에 대한 전력 소비 메트릭을 계산하고,
상기 전력 소비 메트릭이 상기 프로세서 파라미터들의 세트에 대한 가장 낮은 전력 소비 메트릭을 초과하는지를 결정하고; 및
상기 전력 소비 메트릭이 상기 가장 낮은 전력 소비 메트릭을 초과할 때 상기 전력 소비 메트릭을 상기 가장 낮은 전력 소비 메트릭으로서 할당하는 것을 더 포함하는
비일시적 기계 판독 가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/722,243 | 2012-12-20 | ||
US13/722,243 US9558006B2 (en) | 2012-12-20 | 2012-12-20 | Continuous automatic tuning of code regions |
PCT/US2013/046494 WO2014098983A1 (en) | 2012-12-20 | 2013-06-19 | A method, apparatus, system for continuous automatic tuning of code regions |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167033452A Division KR101717410B1 (ko) | 2012-12-20 | 2013-06-19 | 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150060902A KR20150060902A (ko) | 2015-06-03 |
KR101683014B1 true KR101683014B1 (ko) | 2016-12-06 |
Family
ID=50976109
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167033452A KR101717410B1 (ko) | 2012-12-20 | 2013-06-19 | 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 |
KR1020157010661A KR101683014B1 (ko) | 2012-12-20 | 2013-06-19 | 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167033452A KR101717410B1 (ko) | 2012-12-20 | 2013-06-19 | 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9558006B2 (ko) |
KR (2) | KR101717410B1 (ko) |
CN (2) | CN108874457B (ko) |
DE (1) | DE112013005131T5 (ko) |
WO (1) | WO2014098983A1 (ko) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9092214B2 (en) * | 2012-03-29 | 2015-07-28 | Intel Corporation | SIMD processor with programmable counters externally configured to count executed instructions having operands of particular register size and element size combination |
US9690354B1 (en) | 2013-05-06 | 2017-06-27 | AGGIOS, Inc. | Automatic energy design and management system for assessing system components' energy consumption, compiling energy management control and optimizing energy usage |
US9652233B2 (en) * | 2013-08-20 | 2017-05-16 | Apple Inc. | Hint values for use with an operand cache |
US20150355927A1 (en) * | 2014-06-04 | 2015-12-10 | Yahoo! Inc. | Automatic virtual machine resizing to optimize resource availability |
US11403099B2 (en) | 2015-07-27 | 2022-08-02 | Sony Interactive Entertainment LLC | Backward compatibility by restriction of hardware resources |
US10635446B2 (en) * | 2015-09-24 | 2020-04-28 | Qualcomm Incorporated | Reconfiguring execution pipelines of out-of-order (OOO) computer processors based on phase training and prediction |
US9958931B2 (en) | 2016-02-22 | 2018-05-01 | The Joan and Irwin Jacobs Technion-Cornell Institute | Techniques for self-tuning of computing systems |
US10303488B2 (en) * | 2016-03-30 | 2019-05-28 | Sony Interactive Entertainment Inc. | Real-time adjustment of application-specific operating parameters for backwards compatibility |
US10915333B2 (en) | 2016-03-30 | 2021-02-09 | Sony Interactive Entertainment Inc. | Deriving application-specific operating parameters for backwards compatiblity |
CN107070606B (zh) * | 2016-12-30 | 2020-11-17 | 江苏银丰信息技术有限公司 | 基于锯齿解码的高吞吐量重传方法 |
CN107193487B (zh) * | 2017-04-26 | 2019-11-12 | 华中科技大学 | 一种随机访问识别方法及*** |
CN111066264B (zh) * | 2017-08-24 | 2022-01-25 | 谷歌有限责任公司 | 用于音频数据传送的动态校准 |
GB2569109B (en) * | 2017-11-30 | 2021-03-31 | Samsung Electronics Co Ltd | Setting operating system parameters based on workload types |
WO2019108011A1 (ko) | 2017-11-30 | 2019-06-06 | 삼성전자 주식회사 | 운영 체제 설정 방법 및 그 장치 |
CN108632249B (zh) * | 2018-03-26 | 2020-12-08 | 厦门亿联网络技术股份有限公司 | 一种用于VoIP开发调试的codec解包实现方法及装置 |
US10649688B1 (en) * | 2018-11-01 | 2020-05-12 | Intel Corporation | Precise longitudinal monitoring of memory operations |
CN113424148A (zh) | 2019-03-15 | 2021-09-21 | 英特尔公司 | 用于检测跨分片访问、提供多分片推理缩放和提供最佳页迁移的多分片存储器管理 |
EP4130988A1 (en) * | 2019-03-15 | 2023-02-08 | INTEL Corporation | Systems and methods for cache optimization |
US10915421B1 (en) * | 2019-09-19 | 2021-02-09 | Intel Corporation | Technology for dynamically tuning processor features |
CN113918081B (zh) * | 2020-07-08 | 2024-03-26 | 慧荣科技股份有限公司 | 计算机可读取存储介质、配置可靠命令的方法及装置 |
CN113590206A (zh) * | 2021-07-23 | 2021-11-02 | 深圳品网科技有限公司 | 一种兼容多种ddr型号和容量的软件实现方法 |
TWI804163B (zh) * | 2022-01-18 | 2023-06-01 | 新唐科技股份有限公司 | 麥克風陣列 |
US11861010B2 (en) * | 2022-02-14 | 2024-01-02 | Xilinx, Inc. | Extensible device hosted root of trust architecture for integrated circuits |
US20230333861A1 (en) * | 2022-04-15 | 2023-10-19 | SiFive, Inc. | Configuring a component of a processor core based on an attribute of an operating system process |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070050661A1 (en) | 2005-08-29 | 2007-03-01 | Bran Ferren | Adjusting a processor operating parameter based on a performance criterion |
US20120137120A1 (en) | 2004-09-30 | 2012-05-31 | Stephen Anthony Fischer | Method and apparatus for establishing safe processor operating points |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5845310A (en) | 1993-12-15 | 1998-12-01 | Hewlett-Packard Co. | System and methods for performing cache latency diagnostics in scalable parallel processing architectures including calculating CPU idle time and counting number of cache misses |
US6643609B2 (en) * | 2001-05-16 | 2003-11-04 | Sharewave, Inc | Performance measurement for embedded systems |
US7496966B1 (en) * | 2002-04-18 | 2009-02-24 | Advanced Micro Devices, Inc. | Method and apparatus for controlling operation of a secure execution mode-capable processor in system management mode |
US8484643B2 (en) * | 2003-03-31 | 2013-07-09 | Fujitsu Limited | CPU usage time counting method and job control system using this CPU usage time |
US7281145B2 (en) * | 2004-06-24 | 2007-10-09 | International Business Machiness Corporation | Method for managing resources in a CPU by allocating a specified percentage of CPU resources to high priority applications |
US7376849B2 (en) | 2004-06-30 | 2008-05-20 | Intel Corporation | Method, apparatus and system of adjusting one or more performance-related parameters of a processor |
US8966223B2 (en) * | 2005-05-05 | 2015-02-24 | Icera, Inc. | Apparatus and method for configurable processing |
US8266605B2 (en) * | 2006-02-22 | 2012-09-11 | Wind River Systems, Inc. | Method and system for optimizing performance based on cache analysis |
US7802252B2 (en) * | 2007-01-09 | 2010-09-21 | International Business Machines Corporation | Method and apparatus for selecting the architecture level to which a processor appears to conform |
US7660933B2 (en) * | 2007-10-11 | 2010-02-09 | Broadcom Corporation | Memory and I/O bridge |
US8276015B2 (en) * | 2009-02-23 | 2012-09-25 | International Business Machines Corporation | Managing the power-performance range of an application |
CN102073596B (zh) * | 2011-01-14 | 2012-07-25 | 东南大学 | 针对指令的可重构片上统一存储器管理方法 |
US8819653B2 (en) * | 2012-01-30 | 2014-08-26 | Cisco Technology, Inc. | Automated improvement of executable applications based on evaluating independent execution heuristics |
-
2012
- 2012-12-20 US US13/722,243 patent/US9558006B2/en not_active Expired - Fee Related
-
2013
- 2013-06-19 KR KR1020167033452A patent/KR101717410B1/ko active IP Right Grant
- 2013-06-19 CN CN201810763317.9A patent/CN108874457B/zh not_active Expired - Fee Related
- 2013-06-19 DE DE112013005131.1T patent/DE112013005131T5/de not_active Withdrawn
- 2013-06-19 KR KR1020157010661A patent/KR101683014B1/ko active Application Filing
- 2013-06-19 CN CN201380060585.XA patent/CN104813286B/zh not_active Expired - Fee Related
- 2013-06-19 WO PCT/US2013/046494 patent/WO2014098983A1/en active Application Filing
-
2017
- 2017-01-12 US US15/405,173 patent/US9904555B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120137120A1 (en) | 2004-09-30 | 2012-05-31 | Stephen Anthony Fischer | Method and apparatus for establishing safe processor operating points |
US20070050661A1 (en) | 2005-08-29 | 2007-03-01 | Bran Ferren | Adjusting a processor operating parameter based on a performance criterion |
Non-Patent Citations (1)
Title |
---|
Christopher J.Hughes, "controlling adaptation for multimedia Application", University of Illinois at Urbana-Champaign, Decemeber 12, 2002 |
Also Published As
Publication number | Publication date |
---|---|
DE112013005131T5 (de) | 2015-07-16 |
KR20150060902A (ko) | 2015-06-03 |
WO2014098983A1 (en) | 2014-06-26 |
CN104813286B (zh) | 2018-08-10 |
KR101717410B1 (ko) | 2017-03-16 |
US9904555B2 (en) | 2018-02-27 |
US20140181487A1 (en) | 2014-06-26 |
US9558006B2 (en) | 2017-01-31 |
CN104813286A (zh) | 2015-07-29 |
CN108874457A (zh) | 2018-11-23 |
US20170123817A1 (en) | 2017-05-04 |
CN108874457B (zh) | 2021-08-17 |
KR20160140993A (ko) | 2016-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101683014B1 (ko) | 코드 영역들의 연속적 자동 튜닝을 위한 방법, 장치, 시스템 | |
US10656697B2 (en) | Processor core power event tracing | |
US10152599B2 (en) | Security mechanisms for extreme deep sleep state | |
CN108351863B (zh) | 用于可编程结构层级结构和高速缓存的指令和逻辑 | |
US9292076B2 (en) | Fast recalibration circuitry for input/output (IO) compensation finite state machine power-down-exit | |
US9323528B2 (en) | Method, apparatus, system creating, executing and terminating mini-threads | |
CN108351835B (zh) | 用于高速缓存控制操作的指令和逻辑 | |
US20170123796A1 (en) | Instruction and logic to prefetch information from a persistent memory | |
JP2015512545A (ja) | タッチ・データの分散前処理及びディスプレイ領域制御のための方法、装置、及びシステム | |
CN108701101B (zh) | 处理器***管理中断事件的基于仲裁器的串行化 | |
KR20210134322A (ko) | 프로세서의 전력 라이센스 제어를 위한 시스템, 장치 및 방법 | |
CN106575219B (zh) | 针对用于处理运算的向量格式的指令和逻辑技术领域 | |
EP3547116B1 (en) | Branch prediction based on coherence operations in processors | |
CN107077421B (zh) | 用于页表游走改变位的指令和逻辑 | |
JP2022532838A (ja) | プロセッサの処理回路の電流消費を動的に制御するためのシステム、装置及び方法 | |
CN111936952A (zh) | 用于处理器的响应式自主硬件性能状态控制的***、装置和方法 | |
US10268255B2 (en) | Management of system current constraints with current limits for individual engines | |
US20160378471A1 (en) | Instruction and logic for execution context groups for parallel processing | |
CN109478086B (zh) | 至少部分地基于平台电容来控制处理器的电流消耗 | |
CN108228484B (zh) | 针对处理器中的高速缓存利用的无效读取 | |
US12050915B2 (en) | Instruction and logic for code prefetching | |
JP7455856B2 (ja) | プロセッサにおけるスロットリング閾値の調整 | |
EP4020186A1 (en) | Instruction and logic for code prefetching | |
CN111033439A (zh) | 用于处理引擎的利用率度量 |
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 | ||
A107 | Divisional application of patent |