CN108027798B - 用于动态配置执行资源的具有可扩展指令集架构的处理器 - Google Patents

用于动态配置执行资源的具有可扩展指令集架构的处理器 Download PDF

Info

Publication number
CN108027798B
CN108027798B CN201680053747.0A CN201680053747A CN108027798B CN 108027798 B CN108027798 B CN 108027798B CN 201680053747 A CN201680053747 A CN 201680053747A CN 108027798 B CN108027798 B CN 108027798B
Authority
CN
China
Prior art keywords
udi
instruction
programmable
peu
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680053747.0A
Other languages
English (en)
Other versions
CN108027798A (zh
Inventor
G·葛兰·亨利
罗德尼·E·虎克
泰瑞·派克斯
道格拉斯·R·瑞德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Zhaoxin Semiconductor Co Ltd
Original Assignee
Shanghai Zhaoxin Integrated Circuit Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Zhaoxin Integrated Circuit Co Ltd filed Critical Shanghai Zhaoxin Integrated Circuit Co Ltd
Priority to CN201810354229.3A priority Critical patent/CN108563449B/zh
Priority to CN201810355729.9A priority patent/CN108563464B/zh
Publication of CN108027798A publication Critical patent/CN108027798A/zh
Application granted granted Critical
Publication of CN108027798B publication Critical patent/CN108027798B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7892Reconfigurable logic embedded in CPU, e.g. reconfigurable unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4496Unification in logic programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

一种动态配置执行资源的具有可扩展指令集架构的处理器。该处理器包括可编程执行单元(PEU),其中可对可编程执行单元进行编程以响应于用户定义指令(UDI)来执行用户定义功能。可编程执行单元包括可编程逻辑元件和可编程互连器,可编程逻辑元件和可编程互连器被共同配置为被编程以执行至少一个处理操作。UDI加载器响应于用于指定UDI和对PEU编程所使用的编程信息的位置的UDI加载指令。可编程执行单元可以针对一个或多个UDI进行编程以用于一个或多个处理。指令表存储各UDI和相应的用以标识该UDI并根据需要可对可编程执行单元进行重新编程的信息。UDI处理程序询问指令表以标识接收到的UDI并将相应信息发送给可编程执行单元从而执行相应的用户定义功能。

Description

用于动态配置执行资源的具有可扩展指令集架构的处理器
相关申请的交叉引用
本申请要求全部内容针对所有意图和目的而通过引用包含于此的以下美国临时专利申请的优先权。
Figure GDA0001598176730000011
本申请涉及同时提交的全部内容针对所有意图和目的而通过引用包含于此的以下美国专利申请。
Figure GDA0001598176730000012
技术领域
本发明通常涉及处理器,更特别地,涉及使得能够动态配置执行资源的具有可扩展指令集架构的处理器。
背景技术
处理器持续变得更强大。如这里所使用的术语“处理器”是指包括微处理器、中央处理单元(CPU)、处理核、微控制器等的任意类型的处理单元。如这里所使用的术语“处理器”还包括诸如集成在芯片或集成电路(IC)上的处理单元等的处理器配置,其中这些芯片或集成电路包括芯片系统(SOC)内所包含的芯片或集成电路等。半导体制造技术正持续改善,从而使速度增加、功耗降低并且使得处理芯片上所集成的电路的尺寸减小。集成尺寸的减小允许在处理单元内并入附加功能。然而,一旦制造了处理器,其执行处理功能及其指令集架构(ISA)基本上是固定的。编程器或编译器不能偏离针对给定处理器配置而定义的标准指令的明确定义的界限、而不冒不适当操作甚至故障的风险。
许多应用被编写以包括被设计为进行特定功能或处理操作的一系列指令,其中该特定功能或处理操作并不由处理单元内的任何硬件块来特别进行。通常,这种代码包括可以在应用程序执行期间执行相当多次的软件循环。尽管处理器可以被制造成包括硬件块来进行特定功能以加速执行和完成从而提高该特定应用的性能,但是这种解决方案是不实际的,这是因为该硬件块可能对于任何其它程序均无用处。因此,通用处理器通常被制造成包括相对常见和基本的功能,这些功能对于各种不同的软件应用而言通常是有用且实用的。编程器必须使用所提供的标准指令集来构建算法、功能和操作以满足特定应用的需求。
发明内容
根据一个实施例的处理器包括解码器、可编程执行单元(PEU)、指令表和用户定义指令(UDI)加载器。解码器将预定指令集架构的指令转译为处理器的预定本地指令集的本地指令,并将本地指令转发到具有预定执行功能的执行系统。解码器将接收到的UDI加载指令转发到UDI加载器。UDI加载指令指定UDI和编程信息的外部位置。PEU包括可编程逻辑元件和可编程互连器,可编程逻辑元件和可编程互连器被共同配置为被编程以执行至少一个处理操作。指令表可编程为包括至少一个UDI和至少一个与UDI相对应的内部指令。UDI加载器响应于UDI加载指令以利用指定的UDI对指令表进行编程,并且UDI加载器响应于指定的UDI来检索编程信息并对PEU进行编程以执行相应的处理操作。
处理器还可以包括UDI处理程序,该UDI处理程序用于判断所接收的UDI是否在指令表中被编程为指定的UDI,以及如果所接收的UDI在指令表中被编程为指定的UDI,则将相应的内部指令转发到PEU以执行相应的处理操作。
根据另一实施例的处理器包括至少一个执行单元、PEU、解码器和UDI系统。各执行单元执行处理器的预定本地指令集的本地指令。PEU包括可编程逻辑元件和可编程互连器,可编程逻辑元件和可编程互连器被共同配置为被编程为响应于内部指令执行至少一个处理操作。解码器将预定指令集架构的标准指令转换成处理器的预定本地指令集的本地指令。解码器将用于指定UDI的接收的UDI加载指令和相应编程信息的外部位置转发到UDI系统。UDI系统包括指令表和UDI加载器。指令表可编程为包括至少一个UDI和至少一个相应的内部指令。UDI加载器响应于UDI加载指令,以利用指定的UDI对指令表进行编程,检索相应的编程信息,并利用相应编程信息对PEU进行编程。
处理器还可以包括UDI处理程序,该UDI处理程序用于判断所接收的UDI是否在指令表中被编程,以及如果所接收的UDI在指令表中被编程,则将内部指令转发到PEU以执行相应的处理操作。
根据一个实施例的使用可动态配置的执行资源来扩展处理器的指令集的方法包括:将包括可编程逻辑元件和可编程互连器的PEU并入到处理器内,可编程逻辑元件和可编程互连器被共同配置为被编程以响应于用户定义指令(UDI)执行用户定义的处理操作;以及响应于接收到包括UDI和用于定位外部可访问的编程信息的地址的UDI加载指令,利用UDI和用于外部可访问的编程信息的地址对指令表进行编程,并且访问编程信息并利用该编程信息对PEU进行编程。
该方法还可以包括:响应于接收到用于执行的UDI,访问指令表以判断所接收的UDI是否位于该指令表内,以及如果所接收的UDI位于指令表内,则调用PEU以执行用户定义的处理操作。
附图说明
参考以下描述和附图,将更好地理解本发明的益处、特征和优点,其中:
图1是根据本发明的一个实施例实现的包括第一可编程执行单元的处理器的简化框图;
图2是根据本发明的一个实施例实现的图1的处理核的简化框图;
图3是根据本发明的一个实施例实现的图2的解码器的简化框图;
图4是根据本发明的一个实施例的图1的可编程执行单元(PEU)的简化框图;
图5是示出根据本发明的一个实施例的图1的处理核的用于处理应用内所包括的用户定义指令(UDI)的操作的流程图;
图6是示出根据本发明的一个实施例的图3的UDI加载器的用于与可编程执行单元进行协商以对处理核进行编程从而响应于UDI加载命令进行与UDI相关联的处理操作的操作的流程图;
图7是示出根据本发明的一个实施例的图3的UDI加载器的用以卸载针对已被操作系统终止的特定进程而编程的各UDI的操作的流程图;
图8是根据本发明的一个实施例的PEU内的图4的可编程逻辑的更详细的框图;
图9是根据本发明的一个实施例实现的图8的可编程逻辑元件的示意框图;
图10是根据本发明的一个实施例实现的图9的查找表(LUT)的示意图;
图11是根据本发明的一个实施例的用于对PEU进行编程的编程信息的格式的简化框图。
图12是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对PEU编程用的相应编程信息的应用的第一方法的简化框图;
图13是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对PEU进行编程的相应编程信息的应用的第二方法的简化框图;
图14是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对PEU进行编程的相应编程信息的应用的另一方法的简化框图;
图15是大致示出根据本发明的一个实施例的图1的处理器的操作码空间的简化框图;
图16是用根据本发的一个实施例的UDI替代应用程序的例程中的标准代码以提供使用这些UDI的替代应用程序的简化示例;以及
图17是用根据本发明另一实施例的UDI替代应用程序的例程中的标准代码以提供使用这些UDI的替代应用程序的简化示例。
具体实施方式
发明人已经认识到与具有固定执行资源和相应限制指令集的处理器相关联的低效率。因此,发明人开发了一种动态配置与可扩展ISA配合的执行资源以提高处理器工作效率的系统和方法。代替必须使用标准限制指令集来编写代码,软件程序员可以选择编写硬件功能描述来进行特定的处理操作。通过编程工具等将硬件功能描述转换为编程信息,其中将编程信息并入可执行代码中。在执行期间,使用编程信息来对处理器内的可编程执行单元(PEU)进行编程以进行相同的处理操作。PEU是一种硬件加速器,与PEU所替代的代码相比,PEU可以更快且更有效地进行处理操作。软件程序员还可以指定用户定义指令(UDI),或者UDI还可以通过用于替代代码以调用PEU进行编程处理操作的编程工具来提供。以这种方式,UDI不必使用限制指令集将例程或处理编写在软件中,而是根据需要随时随地调用PEU以进行处理操作。
另外,即使在使用处理器的标准ISA来编写源代码之后,也可以提供如下编译器,其中该编译器包含或以其它方式链接到编程工具以自动生成一个或多个UDI和相应的PEU编程信息。编译器包括优化例程,其中优化例程用于检查代码以识别可以进行改进的位置,诸如代码大部分时间花在哪里等。编译器生成包含UDI和编程信息的定制可执行代码,以在执行期间即时对PEU进行编程,从而改进操作。此外,编程工具可以与能够将现有可执行代码转换成包含一个或多个UDI和相应PEU编程信息的定制可执行代码的代码分析工具等一起使用。
总之,PEU是可编程执行单元,其用作可以被编程为即使在处理器被制造之后也使得处理器能够进行新创建的处理操作的硬件加速器。一个或多个用户定义指令替代了在其它情况下将被要求进行相同处理操作的传统代码。在该事实之后,可以使用编程器、编译器或甚至代码分析工具来定义并创建用于调用PEU以在执行期间优化现有处理操作的新指令。
图1是根据本发明的一个实施例实现的包括第一可编程执行单元(PEU1)101的处理器100的简化框图。处理器100的标准指令集架构(ISA)可以是x86宏架构,其中在x86宏架构中,可以正确地执行被设计为在x86处理器上执行的大多数应用程序。如果获得了预期的结果,则应用程序被正确执行。特别地,处理器100执行x86指令集的指令并且包括x86用户可见寄存器集。然而,本发明不限于x86架构,其中处理器100可以对应于如本领域普通技术人员已知的任何可选ISA。
处理器100包括单独标记为S1、S2、...、SN的N个核片区(core slice)103,其中N是包括1的任意正整数(即,处理器100包括至少一个核片区并且可以仅包括一个处理核)。进一步示出并描述第一核片区S1的细节,其中应当理解,其余各核片区S2~SN可以以基本相似的方式实现。第一核片区S1包括第一处理核C1 105,第一处理核C1 105进一步包含被示为第一可编程执行单元PEU1的PEU 101。其余核片区S1~SN的各处理核可以包括类似的PEU。处理核105耦接到环形站RS1 107,环形站RS1 107进一步耦接到标记为LLC1的“末级高速缓存”(LLC)109。其余的各核片区S2~SN包括类似的分别被标记为环形站RS2~RSN的环形站,这些环形站各自进一步耦接在相应的处理核和相应的核片区的LLC之间。
在所示配置中,环形站RS1~RSN各自以环形配置耦接在一起,该环形配置进一步耦接到处理器100上所包含的存储器控制器(MC)111。MC 111还耦接到外部系统存储器113。在可选实施例中,MC 111可以设置在处理器100的外部,其中处理器100包括用于与外部存储器控制器和系统存储器113联系的总线接口单元等(未示出)。核片区S1~SN共享系统存储器113的资源,并且还可以经由环形站RS1~RSN彼此共享信息。应当理解,处理器100可以被配置为包含单个PEU而不是各自配置有单独PEU的多个核片区的单核处理器。
系统存储器113存储可执行二进制应用(APP)115,APP 115进一步包括头部117和主体119。二进制APP 115以通用形式示出并且可以被实现为可以由包括处理核C1的处理器100的任何一个或多个处理核成功执行的二进制可执行文件(.EXE)文件、字节码文件(.NET、Java等)或任何其它类型的可执行代码。在所示配置中,头部117包括至少一个加载命令,其中提供各加载命令以用于指定相应的用户定义指令(UDI)并将该UDI加载到处理器100中以供PEU1 101执行。如图所示,例如,头部117包括用于指定并加载第一用户定义指令UDI1的第一加载命令LD_UDI UDI1,并且头部117包括用于指定并加载第二用户定义指令UDI2的第二加载命令LD_UDI UDI2。如这里进一步描述的,UDI1和UDI2可以是经过配置的或者以其它方式从一组可用的UDI操作码中选择的操作码。尽管二进制APP 115包括两个用户定义指令,但是可执行的二进制应用可以包括处理核的可编程执行单元(诸如核C1的PEU1101等)可同时支持的任意数量的用户定义指令。
加载命令各自包括用于对处理核的可编程执行单元进行编程的相应编程信息的地址等。头部117包括加载命令LD_UDI UDI1并且加载命令LD_UDI UDI1指向第一编程信息PI_UDI1。此外,头部117包括加载命令LD_UDI UDI2并且加载命令LD_UDI UDI2指向第二编程信息PI_UDI2。编程信息可以如图所示包括在头部117内,或者可以在二进制APP 115的单独区段内提供。如本文进一步描述的,处理核C1访问PI_UDI1和PI_UDI2并将PI_UDI1和PI_UDI2加载到PEU1 101中。在进行编程之后,在二进制APP 115的主体119的操作期间,PEU1101响应于指令UDI1()而进行第一编程功能或处理操作,并且响应于指令UDI2()而进行第二编程功能或处理操作。括号“()”表示:各用户定义指令UDI1和UDI2可以包括用于进行各功能的任意数量(零个或更多个)操作数。各操作数可以具有与标准指令的操作数相同的形式,诸如可以由UDI自身提供或以其它方式加载到寄存器等中的实数、常数、整数、布尔值等。
尽管未示出,系统存储器113可以包括被加载以供处理器100随时间经过而执行的多个应用程序。多个应用可以被加载到任何一个或多个处理核C1~CN中,但在所示实施例中各处理核通常一次仅执行一个处理。各处理核一次执行多个处理的实施例也被考虑。可以将多个应用程序分配给其中一个处理核来执行。操作系统(OS)包括用于调度处理器100的应用程序的执行的调度器等,处理器100的应用程序的执行包括针对给定处理核一次一个地换入换出多个处理中的各处理以供执行。多个应用可以由诸如C1等的给定处理核来执行,其中各应用可以包括被编程到PEU1 101中的一个或多个UDI。尽管PEU1 101可以具有足够的资源来针对多个应用中的各应用应对一个或多个UDI,但PEU1 101是有限的资源,其中如本文进一步描述的,UDI编程可以在操作期间被换出。
图2是根据本发明的一个实施例的处理核C1 105的简化框图。在所示实施例中,处理核C1 105包括指令高速缓存(ICACHE)201、前端管道(包括取指(FETCH)引擎203、解码器205和寄存器别名表(RAT)207),并且还包括保留站209、执行单元211、二级(L2)高速缓存213、物理寄存器文件(PRF)215和重排序缓冲器(ROB)217。L2高速缓存213还与环形站RS1联系以最终访问系统存储器113。执行单元211可以包括一个或多个整数(INT)单元219、一个或多个浮点或媒体单元221、一个或多个加载和存储管线(加载/存储管道)223、以及PEU1101。加载/存储管道223可以被配置为独立的加载和存储管线和/或加载和存储组合管道。加载/存储管道223可以包含存储器顺序缓冲器(MOB)(未示出)等,并且还可以包括与L2高速缓存213联系的一级(L1)高速缓存(未示出)。保留站209可以包括用于向各个执行单元211分派指令的调度器的任何组合。例如,可以包括独立的整数、媒体和加载/存储调度器,以用于分别向INT单元219、媒体单元221和加载/存储管道223分派指令。处理核C1105还包括PEU调度器225,如本文进一步描述的,该PEU调度器225用于从RAT 207接收所发出的UDI并且将这些UDI分派到PEU1 101。
指令高速缓存201对来自诸如二进制APP 115等的位于系统存储器113中的活动应用的程序指令进行高速缓存。取指引擎203从指令高速缓存201提取程序指令,并将这些程序指令转发到解码器205,解码器205将这些程序指令解码成由一个或多个执行单元211执行的指令。在一个实施例中,指令转译是用于将处理器100的宏指令集(诸如x86指令集架构等)的宏指令(或宏操作)转译成处理核C1 105的微指令集架构的微指令(或微操作)。如本文所使用的,宏指令和微指令通常在本文中可通常被称为“指令”,更具体地,分别被称为宏操作和微操作。例如,存储器访问指令可以被解码成包括一个或多个加载或存储微指令的微指令序列。二进制APP 115填充有宏操作,这些宏操作由解码器205转换成作为处理器100的原生指令集的一部分的相应微操作。RAT207基于各指令的程序顺序、基于该指令所指定的操作数源、以及基于重命名信息来针对该指令生成依赖信息。
RAT 207将解码后的微操作及其相关联的依赖信息分派到RS 209或PEU调度器225。一般来说,处理器100的ISA的标准指令被分派到保留站209,而UDI被分派到PEU调度器225。RS 209和PEU调度器225各自包括用于保持从RAT 207接收到的指令和依赖信息的至少一个队列。在准备好执行所接收到的指令的情况下,保留站209将这些指令分派到执行单元211中的相应执行单元,并且在准备好执行所接收到的UDI微操作的情况下,PEU调度器225将这些UDI微操作分派到PEU1 101。在解析出指令的所有依赖关系的情况下,该指令被视为准备好执行。结合分派指令,RAT 207为该指令在ROB 217中分配条目。因此,指令以程序顺序分配到ROB 217中,ROB 217可以被配置为循环队列,以确保指令以程序顺序提交(retire)。RAT 207还将依赖信息提供给ROB 217,以存储在ROB 217的指令条目中。RAT 207还为各指令分配或映射PRF 215内的一个或多个物理寄存器以存储操作数和结果。
执行单元211的结果可以反馈到ROB 217以更新PRF 215内的相应寄存器。在一个实施例中,RAT 207将架构寄存器映射到PRF 215中的物理寄存器并更新ROB 217中与指令相对应的指针等(未示出)。ROB 217中的指针可以在执行期间或执行之后更新,并且指针用于在操作期间更新PRF 215内的寄存器的内容。ROB 217最终以程序顺序提交指令,以确保根据二进制APP 115的指令进行正确的操作。
处理器100是超标量的并包括多个执行单元,并且能够在单个时钟周期内向执行单元211(包括PEU1 101)发出多个指令。处理器100还被配置为进行非循序执行。也就是说,保留站207可以不按照包括指令的程序所指定的顺序来发出指令。超标量非循序执行处理器通常会尝试维持相对大的未完成指令池,使得这些处理器可以利用更大量的指令并行性。处理器100还可以在确定指令是否实际完成之前进行执行指令的指令推测性执行,或至少执行指令规定的一些动作。由于各种原因,诸如错误预测的分支指令、异常(中断、页面错误、除以零状况、一般保护错误等)等的原因,指令可能未完成。尽管处理器100可以推测性地进行指令规定的一些动作,但是处理器不会利用指令的结果来更新系统的架构状态,直到确定该指令将完成为止。这可以例如在ROB 217提交指令时确定。
图3是根据本发明的一个实施例实现的解码器205的简化框图。来自取指引擎203的指令被称为x86宏指令或宏操作,将x86宏指令或宏操作提供给转译器(XLATE)301,其中XLATE 301将各宏操作转换为一个或多个微操作以供执行单元211中的相应执行单元来执行。x86指令集架构(ISA)包括已知的宏操作,其中该宏操作包括表示为“Sx86”的更常见或简单的x86指令以及表示为“Cx86”的更复杂的x86指令。转译器301包含用于将Sx86宏操作转换为被提供给复用器(MUX)303的一个输入的相应Sx86微操作的转换逻辑(未示出)。更复杂的Cx86宏操作被“卡在”微代码(UCODE)ROM 306内的Cx86处理程序305。Cx86处理程序305包括用于将各Cx86宏操作转换为被提供给MUX的另一输入的一个或多个Cx86微操作的适当代码或例程。应当注意,标准x86指令(包括Sx86和Cx86指令)的转换和处理是已知的,这里不再进一步描述。
x86ISA还包括x86ISA的标准指令集内未定义的一组用户定义指令或UDI。通常,x86ISA的标准指令集消耗完整的一组操作码的子集,其余的操作码先前被认为是“未定义的”。在先前的配置中,在转译器301遇到任何这些未定义的指令的情况下,这些指令也被卡在UCODE ROM 306的未定义的指令处理程序(未示出),以采取诸如设置错误(例如,一般保护故障)等的适当动作。然而,为了本案的目的,这些未定义的操作码的一部分被保留为UDI宏操作以供用户进行定义从而进行用户定义功能或处理操作。UDI宏操作由转译器301转发到UCODE ROM 306内的UDI处理程序307,该UDI处理程序307将一个或多个相应的UDI微操作转发给MUX 303。注意,在一些配置中,可以在UCODE ROM 306外部进行从UDI宏操作到相应UDI微操作的转换。UCODE ROM 306还包括响应于LD_UDI命令的UDI加载器309,其中如本文进一步描述的,LD_UDI命令用于针对相应的UDI对PEU1 101进行编程。转译器301根据所接收到的宏操作,将控制信号OPSEL设置到MUX 303的控制输入,以从提供给RAT 207的Sx86、Cx86或UDI微操作中进行选择。
解码器205还包括ISA表311,其中UDI处理程序307使用该ISA表311来将UDI宏操作转换为相应的UDI微操作。在一个实施例中,ISA表311存储在处理器100内所设置的可编程RAM(PRAM)中。ISA表311的各行包括UDI宏操作字段、相应的处理上下文标识符(PCID)字段、微操作字段、编程信息地址(PI_ADDR)字段、有效字段以及执行标识符(EID),其中该UDI宏操作字段包括用户所定义的UDI所用的宏操作操作码,相应的处理上下文标识符(PCID)字段包括用于标识定义了UDI的处理的PCID值,微操作字段列出要经由MUX 303发送到RAT207的一个或多个微操作,编程信息地址(PI_ADDR)字段指向存储器(例如,系统存储器113)中的位置以定位UDI用的编程信息,有效字段标识UDI是否有效,并且执行标识符(EID)用于定位PEU1 101的被编程为进行由相应UDI所标识的功能或处理操作的部分。如图所示,ISA表311包括多达“M”个条目,其中M是正整数。
在一个实施例中,各UDI宏操作映射到被提供给RAT 207以待发出到PEU调度器225从而由PEU1 101进行分派和执行的一个相应UDI微操作。ISA表311中的微操作包括该微操作所映射到的相应UDI微操作。ISA表311中的微操作还可以包括附加的非UDI或标准微操作以便于UDI处理操作。例如,在UDI微操作之前可以包括一个或多个微操作,以在执行UDI之前将一个或多个操作数值从一个存储位置(存储器位置或寄存器)加载或移动到另一存储位置,并且在UDI微操作之后可以包括一个或多个微操作,以在执行UDI之后将一个或多个结果值从一个存储位置移动到另一存储位置。
图15是大致示出根据本发明的一个实施例的处理器100的操作码空间的简化框图。通用操作码空间1501定义处理器100的整个操作码空间,其中该操作码空间通常由宏操作指令的允许操作码的位数来确定。作为简单的示例,如果指令操作码被定义为包括多达16位,则通用块1501表示所有可能的操作码组合,或者216=64536个可能的操作码。通用块1501内所包含的经定义的操作码空间1503表示所有经定义的宏指令,诸如表示为“Sx86”的更常见或简单的x86指令、表示为“Cx86”的更复杂的x86指令以及可能的任何保留的操作码。通用块1501内所包含的未定义的操作码空间1505表示通用块1501的未包括在经定义的操作码空间1503中的所有剩余操作码空间,其中所有剩余操作码空间包括所有当前未定义的操作码空间。
如本文所述的具有可扩展ISA的处理器分割出先前未定义的操作码空间1505的一部分作为用户定义指令(UDI)空间1507。留出该操作码空间以允许程序生成器定义UDI,从而使得诸如PEU1 101等的PEU能够进行由用户进行定义并编程的用户定义指令。UDI空间1507可以通过指令类型进一步细分。作为示例,UDI可以是整数UDI指令1509内所提供的整数型指令之一,或者可以是浮点UDI指令1511内所提供的浮点型指令之一等。可以定义附加的UDI指令类型。各UDI指令类型通过指令等待时间来进一步细分。等待时间(LAT)是指指令需要完成的以时钟周期为单位的时间量。例如,较简单的UDI指令可以在1或2个时钟周期(分别为LAT1或LAT2)中完成,或者可能需要更多时钟周期,诸如4或6个时钟周期或更多时钟周期(诸如分别为LAT4或LAT6,或者更多等)。
映射到ISA表311中的相应UDI宏操作的UDI微操作包含至少一个等待时间字段,该等待时间字段用于标识用户所选择的(或者编程功能所选择的)UDI宏操作的相应等待时间。返回参考图2,核C1 105的PEU调度器225被配置为根据所接收到的UDI微操作的等待时间字段来确定所接收到的微操作的等待时间。PEU调度器225使用等待时间信息来调度所接收的各UDI微操作的定时。
图4是根据本发明的一个实施例的PEU1 101的简化框图。PEU1 101包括控制逻辑401和可编程逻辑403。控制逻辑401包括分配和编程逻辑405以及执行重定向逻辑407。在所示实施例中,可编程逻辑403被细分为一组“P”个大致相同的可编程区段409,分别被示为可编程区段P1、P2、PP,其中“P”是正整数。UDI加载器309与分配和编程逻辑405联系以将处理操作编程到可编程逻辑403中。特别地,UDI加载器309提供或以其它方式设置用于表示编程会话的编程值输入(PGM),并将编程信息(PI)提供给分配和编程逻辑405的输入。分配和编程逻辑405分配足够进行编程并进行处理操作的一个或多个区段409,然后接收UDI加载器309所访问的相应编程信息以对所分配的区段409进行编程。分配和编程逻辑405提供用于映射到已针对特定处理操作进行了编程的区段409的执行ID(EID)。
PEU1 101可以是相对大的资源,诸如由现场可编程门阵列(FPGA)等实现,以针对多个应用处理中的各应用处理一次对多个用户定义指令进行编程。然而,PEU1 101是有限的资源,因为其余的未分配区段409可能不足以对要编程的新处理操作进行编程。在这种情况下,分配和编程逻辑405可以在对新处理操作进行编程时使先前分配的区段409无效,从而使一个或多个先前编程的处理操作无效。在一个或多个先前编程的处理操作无效的情况下,分配和编程逻辑405输出已经被无效的任何EID。在处理已经完成操作而使得该操作终止的情况下,卸载已经针对该处理进行了编程的任何指令。UDI加载器309还被配置为提供与已经终止的给定处理相关联的处理操作的一个或多个EID,在这种情况下,分配和编程逻辑405解除对相应的区段409的分配以使得这些区段可用于对新处理操作进行编程。UDI加载器309还可以通过提供要卸载的处理操作的相应EID来卸载任何给定的处理操作。
各区段409可以包括足够的可编程逻辑以进行简单的处理操作。例如,用户定义指令UDI1可以与能够由单个区段409进行的简单处理操作相关联。如图所示,区段P1被编程为进行与UDI1相关联的处理操作。诸如与用户定义指令UDI2相关联等的更复杂的处理操作可能需要多于一个区段409来进行相应的处理操作。如图所示,例如,区段P2和P3被编程为进行与UDI2相关联的处理操作。另外,可以利用多于两个区段409来实现甚至更复杂的处理操作。
在一个实施例中,分配和编程逻辑405进行动态分配,其中分配和编程逻辑405识别可用于分配的下一区段409,并且当接收到被配置为对所指示的处理操作进行编程的编程信息PI时,开始编程。如果编程信息PI在第一分配区段409已被完全编程之后继续进行使得需要附加区段409来完成编程,则对附加区段进行即时动态分配,直到处理操作被完全编程到PEU1 101中为止。在可选实施例中,编程信息PI可以被配置为包括用于表示该处理操作所需的区段409的数量的资源声明等(1103,图11)。在这种情况下,分配和编程逻辑405预先分配所指示的区段数,然后使用编程信息PI对所分配的区段进行编程。
在编程之后,并且响应于进程执行期间遇到的UDI,执行重定向逻辑407接收UDI微操作和相应的EID以进行相应的处理操作。执行重定向逻辑407使用所接收到的EID来重定向UDI微操作并将UDI微操作应用于被编程为进行相应处理操作的一个或多个相应区段409。如图所示,例如,用户定义指令UDI1所用的EID引导执行重定向逻辑407,以将UDI2应用于被编程为针对用户定义指令UDI2进行相应处理操作的区段P2和P3。
图5是示出根据本发明的一个实施例的用于处理诸如二进制APP 115等的应用内所包含的UDI的处理核C1 105的操作的流程图。在第一个块501中,下一宏操作指令被从指令高速缓存201提取并转发给解码器205。如果解码器205判断为指令是诸如所定义的Sx86或Cx86指令中的任意指令等的标准x86指令,则操作进入块505以进行标准指令处理,并且完成操作。标准指令处理是已知的并且不再进一步描述。
如果指令不是标准x86指令,则操作代替地进入询问块507,其中在询问块507中,询问指令是否是UDI。如果指令不是UDI,则操作进入用于响应于未定义的指令来进行任意期望功能的错误例程块509。实现逻辑将变量等传递给用于表示已经接收到未定义的指令的错误例程块509。例如,处理核C1105可以发出一般保护故障等。在进行了错误例程块509之后,针对该指令完成了操作。如果指令是UDI,则操作进入块511,其中在块511中,将宏操作传递给UDI处理程序307,该UDI处理程序307在ISA表311中扫描针对所接收到的宏操作的匹配条目,该匹配条目包括匹配操作码和相应的匹配PCID。如果没有找到匹配条目,则操作向错误例程块509传递了表示未匹配的指示,并且进行适当的动作。例如,如果没有找到匹配操作码,则指示可以表示已经接收到未定义或未知的UDI。在已经找到匹配操作码、但其是针对不同的PCID的情况下,该指示可以表示如此。如先前所述,各UDI是针对由该UDI的PCID标识的特定处理所定义的。如果ISA表311中的PCID与当前执行的处理的PCID不匹配,则操作进入表示未经授权的处理正尝试执行针对另一处理所定义的UDI的错误例程块509。
如果在块513中判断为在ISA表311中找到匹配,则操作进入块515,其中在块515中,从ISA表311中检索到相应的一个或多个微操作并将这些微操作传递给RAT 207。在块517所示的操作期间,RAT 207将相应的UDI微操作发出到PEU调度器225,其中该PEU调度器225最终将UDI分派给PEU1 101以执行编程的相应处理操作。在UDI执行之后,操作进入块519,其中在块519中,ROB 217最终提交包括针对ROB 217内的指针和PRF 215内的寄存器的任意更新的UDI。然后,针对该UDI完成操作。
图6是示出根据本发明的一个实施例的UDI加载器309的用于与PEU1101进行协商以对处理核C1 105进行编程从而响应于UDI加载命令LD_UDI进行与UDI相关联的处理操作的操作的流程图。在第一个块601中,UDI加载器309在ISA表311中搜索针对宏操作和相应PCID的匹配条目。如果在下一询问块603中判断为针对宏操作和PCID这两者找到了匹配条目,则先前已经针对具有相同PCID的处理定义了UDI。OS先前加载了包括该UDI的进程,然后OS可以临时暂停该处理以允许在此期间执行另一进程。在重新加载该进程的情况下,UDI加载器309进行该重新加载进程,以判断UDI是否仍有效。在找到匹配的情况下,操作进入块605,以判断条目是否仍有效。如先前所述,其间发生的进程可以包括一个或多个UDI,其中在该进程中,在PEU1 101内已经覆盖了针对当前进程的处理操作的编程。如果匹配条目有效,则针对当前UDI完成了操作。针对先前已经针对当前进程所定义的各UDI来重复该操作。
如果在ISA表311中没有找到匹配,则操作进入块607,其中在块607中,UDI加载器309针对新条目分配ISA表311中的位置。注意,在块607中分配ISA表311中的位置时,UDI加载器309仅仅访问下一可用空位置。如果不存在更多的可用空位置,则可以访问先前无效的条目以进行覆盖。条目的数量M可以相对较大以降低当前活动的进程在任意给定时间使用所有M个条目的可能性。然而,任意一个或多个当前活动的进程消耗大量条目,使得不存在更多可用的空或无效位置,这当然也是可能的。在这种情况下,覆盖临时暂停的处理的当前有效条目,以针对当前处理分配新条目。在临时暂停的处理随后变成当前处理、并且再次进行加载功能的情况下,找不到匹配条目并且以同样的方式分配新条目。
然后,操作进入块608,其中在块608中,询问是否已经覆盖了ISA表311中的任意有效条目。如果已经覆盖了ISA表311中的任意有效条目,相应处理操作仍在PEU1 101内编程并仍有效是可能的。将PEU1 101中进行编程的处理操作保持完整也是可能的,以避免在与ISA表311中的覆盖条目相对应的处理随后再次变成活动处理的情况下必须对PEU1 101再次进行重新编程。尽管如此,在所示实施例中,期望维持ISA表311和PEU1 101之间的对应关系,并且避免使分配和编程逻辑405进一步复杂化以追踪覆盖条目的编程资源。因此,如果在块608中判断为已经覆盖了ISA表311中的有效条目,则操作进入块609,其中在块609中,卸载与覆盖条目相对应的处理操作。在实际覆盖该条目之前,检索被覆盖的条目的EID并且通过UDI加载器309将该EID应用于PEU1 101,其中分配和编程逻辑405卸载相应处理操作并且释放可编程逻辑403内的空间以供随后的编程。
如果在块608中判断为没有覆盖有效条目,或者在块609中已经卸载了PEU1 101中的处理操作之后,操作进入块610,其中在块610中,将宏操作操作码、当前PCID和编程信息的地址加载至ISA表311的新条目中。然后,操作进入块611,其中在块611中,使用PI地址来访问UDI加载器309对PEU1 101进行编程所使用的编程信息。一旦进行了编程,则在下一块613中,UDI加载器309从PEU1 101中检索EID,并且构造或以其它方式选择适合于新条目的微操作操作码。然后,操作进入块615,其中在块615中,利用相应微操作和EID来更新ISA表311的新条目并且将该条目标记为有效。
然后,操作进入块617以使ISA表311内的已被PEU1 101修改并由此无效的任意条目无效。如先前所述,例如,PEU1 101内的分配可以使得覆盖针对用于另一处理(进程)的另一UDI的处理操作进行了编程的一个或多个区段409,由此使该UDI无效。在这种情况下,并非实际删除ISA表311中的条目,而是仅仅使该条目无效,因为该处理可以再次启动。
如果在块603中找到了匹配但在块605中发现无效,则操作进入块611,以使用匹配条目的PI地址来访问相应编程信息,并且对PEU1 101进行编程。然后,操作继续进行块613、615和617,以确保ISA表311和PEU1 101之间的合适相关性。在这种情况下,即使先前已经针对UDI对PEU1 101进行了编程,仍覆盖PEU1 101的一个或多个区段409,使得UDI无效。即使条目被标记为无效,由于宏操作操作码和相应PCID仍在ISA表311中,因此该条目由于没有被去除因而代替地也可被认为是“不活动的”。该条目的PI地址仍有效。在OS重新加载了处理之后,对PEU1 101进行重新编程并且更新ISA表311中的匹配条目。在块617之后,完成操作。
图7是示出根据本发明的一个实施例的UDI加载器309的用以卸载针对已经被OS终止的特定处理而编程的各UDI的操作的流程图。在第一个块701中,UDI加载器309在ISA表311中扫描具有匹配PCID的条目。在下一块703中,针对所找到的各匹配PCID,将相应EID发送给PEU1 101,以卸载用于UDI的编程的相应区段409。这样,解除分配的区段409可以由其它处理来使用。在下一块705中,针对所找到的各匹配PCID,注销掉PCID条目,并且完成操作。注销掉PCID使得ISA表311中的条目能够被重新分配以用于另一处理的UDI。
图8是根据本发明的一个实施例的可编程逻辑403的更详细的框图。所示的可编程逻辑403包括可编程元件的阵列,该阵列包括被示出为配置在可编程逻辑元件801的XY矩阵中的可编程逻辑元件(LE)801,这些可编程逻辑元件各自被示出为LExy,其中x和y分别表示阵列的行标和列标。各行还包括杂项逻辑块803的阵列中的至少一个,其中杂项逻辑块803各自包括用以补充逻辑元件801的矩阵的支持逻辑。各杂项逻辑块803可以例如包括一个或多个存储元件、一个或多个寄存器、一个或多个锁存器、一个或多个复用器、一个或多个加法器(用以相加或相减数字值)、一组布尔逻辑元件或门(例如,诸如或(OR)门、与(AND)门、反相器、异或(XOR)门等的逻辑门)等。一个或多个寄存器可以被配置为移位寄存器或数据拌和器(swizzler)等,以用于灵活的数据操作。逻辑元件801和杂项逻辑块803与路由网格连接到一起,其中该路由网格包括可编程交叉开关或互连器805的矩阵。各可编程互连器805包括多个开关以选择性地将可编程装置连接在一起。路由网格包括足以将逻辑元件803和杂项逻辑块803中的多个器件连接在一起以进行简单处理操作和更复杂处理操作的连接性。
如本文进一步描述的,各区段409包括一个或多个可编程元件以及用于选择性地将装置和元件连接在一起以进行相应功能或处理操作的相应路由网格。路由网格是包括多个开关等以在逻辑元件801和杂项逻辑块803之间进行输入和输出的重定向的切换矩阵。
可编程逻辑403包含可编程存储器807,其中使用该可编程存储器807来对逻辑元件801、相应杂项逻辑块803和可编程互连器805中所选择的器件进行编程以进行期望处理操作。可编程存储器807还可以包括存储位置或寄存器等以接收输入操作数或值并且存储处理操作的输出结果。可编程存储器807分散在可编程逻辑403的可编程区段409之间,并且从所分配区段409中个别或共同选择出的各可编程区段409通过使用该可编程存储器807来进行特定处理操作。可编程存储器807可以被配置为可编程逻辑403内(或者甚至处理核C1105内)的专用存储器空间,并且无法进行外部访问。可以针对UDI微操作发出附加的微操作,以存储操作数或者将结果传送给可用的架构寄存器。存储器807可以以诸如静态随机存取存储器(SRAM)等的任意合适方式来实现。
图9是根据本发明的一个实施例实现的可编程逻辑元件801的示意框图。逻辑元件801包括查找表(LUT)901、3个双输入复用器(MUX)905、906和907、双输入加法器909以及时钟寄存器(或锁存器)911。可编程存储器807的一部分被示出为用于对逻辑元件801、任意所包括的杂项逻辑块803和一个或多个互连器805的一部分进行编程。如以上所说明的,可编程存储器807可以用于提供输入值、存储输出结果、以及/或者存储针对处理操作的多次迭代中的各次迭代所更新的中间值。
如图所示,使用编程信息PI来对存储器807进行编程。LUT 901被示出为利用存储器808中的相应LUT值(LV)位进行编程的4X1LUT。MUX 905、906和907各自具有由存储器807所存储的相应存储器位(被分别示出为存储器位M1、M2和M3)所控制的选择输入。将LUT 901的被示出为LO的输出提供给MUX 905的一个输入和寄存器911的输入,其中将寄存器911的输出提供给MUX 905的另一输入。将MUX 905的输出提供给MUX 906的一个输入和加法器909的一个输入。将加法器909的输出提供给MUX 906的另一输入,其中将MUX 906的输出提供给可编程互连器805的输入。存储器807包括可编程位V,其中将该可编程位V提供给MUX 907的一个输入,将MUX 907的另一输入耦接至可编程互连器805的输出,并且将MUX 907的输出提供给加法器909的另一输入。将加法器909的输出提供给MUX 906的另一输入。存储器807还可以用于对互连器805和任意杂项逻辑块803的相应部分进行编程。
所示的逻辑元件801仅是示例性的,并且替代版本可以根据特定配置被考虑。逻辑元件801可以被配置在位片粒度级以应对数据值的单个位。针对包括多个位的数据值,使用多个位片逻辑元件。例如,针对64位数据值,并行使用64个位片逻辑元件。
在操作中,利用LUT 901的LUT数据值(LV)、MUX 905~907的选择输入M1~M3和提供给MUX 907的输入的可编程数据值V来对存储器807进行编程。从指令的操作数,从存储器807,或者从另一编程块来提供4个输入值S0~S3,以选择16个值中被编程到LUT 901中的值,其中在LUT 901的输出处提供所选择的值作为LO。对MUX 905进行编程,以直接提供LUT901的LO输出或提供被寄存的版本。可以使用被寄存的版本为了编程操作的定时的目的而插入等待时间。对MUX 906进行编程,以直接提供MUX 905的输出、或者将作为输出所要提供的或者要提供给另一编程块的加法器909的输出提供给互连器805。加法器909将所选择的值与MUX 905的输出相加,其中所选择的值是编程值V或者是来自互连器805的输出(从另一输入或者从另一编程块所提供)的值。
图10是根据本发明的一个实施例实现的LUT 901的示意图。提供被组织为二进制MUX树的1组双输入MUX,以基于选择输入S3:S0(其中S0是最低有效位)而在16个输入值LV0~LV15之间进行选择。如先前所述,将LV0~LV15编程到存储器807中。将16个输入值LV0~LV15的各相邻对(LV0和LV1、LV2和LV3、…、等等)提供给8个双输入MUX 1001的相应输入对,其中这些双输入MUX 1001各自在其选择输入处接收S0。将MUX 1001的8个输出的各相邻对提供给4个双输入MUX 1003的相应输入对,其中这些双输入MUX 1003各自在其选择输入处接收S1。将MUX 1003的4个输出的各相邻对提供给2个双输入MUX 1005的相应输入对,其中这些双输入MUX 1005各自在其选择输入处接收S2。将MUX 1005的输出对提供给输出MUX1007的输入对,其中输出MUX 1007在其选择输入处接收S3并且在其输出处提供LUT输出LO。应该理解,图10所示的配置仅是本领域普通技术人员能够理解的很多合适LUT实现其中之一。
图11是根据本发明的一个实施例的被示出为PI 1101的编程信息PI的格式的简化框图。在这种情况下,PI 1101可以包括资源声明(RSRC)1103,其中该RSRC 1103用于表示为了实现编程的处理操作而在可编程逻辑403中所需的资源量。作为示例,资源声明1103可以表示为了完成编程所需的可编程区段的数量P。分配和编程逻辑405可以在对PEU1 101的编程期间读取资源声明1103以分配相应数量的可编程区段409。尽管可以使用较大的粒度,但这可能要求分配和编程逻辑405的附加逻辑来追踪可编程逻辑403的已编程部分。PI 1101还可以包括等待时间声明1105,其中该等待时间声明1105用于表示已编程的处理操作的诸如为了完成所需的时钟周期的数量等的等待时间。在一个实施例中,UDI加载器309可以读取等待时间声明1105从而构造或以其它方式选择适当的微操作操作码,其中该微操作操作码用于在发出到PEU调度器225的情况下表示相同的等待时间。如先前所述,PEU调度器225使用UDI微操作所表示的等待时间信息来确定相应处理操作的等待时间。
PI 1101还可以包括被称为位流的一系列的逻辑一(1)和零(0)。在一个实施例中,例如,响应于PGM输入的设置,分配和编程逻辑405将可编程区段409的所分配区段的可编程存储器(包括可编程存储器807和互连器805的相应可编程存储器)排成大的序列化移位寄存器,然后在位流中移位,直到在各个所分配区段中进行了完全加载为止。可以使用包括并行编程的可替代编程方法和格式。此外,可以将资源声明和等待时间声明设置在分配和编程逻辑405要进行读取的诸如开始或结束等的任意合适的位置处,以确保合适的编程。
图12是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对诸如PEU1 101等的PEU进行编程的相应编程信息的应用的第一方法的简化框图。诸如编程器等的应用生成器以任意合适的高级编程语言来编写应用源程序1201,其中这些高级编程语言是诸如C、C++、BASIC、Cobol、Fortran、Pascal、Ada、JavaScript等的编程语言,然而这并非限制性的。在这种情况下,应用生成器不需要特别地知道包含PEU1 101的处理器100的能力。应用源程序1201被提供给适合于将所选择的高级编程语言转换为处理器100能够执行的二进制应用文件1207的编译器1203。PEU编程工具1205包含于编译器1203内或者链接至编译器1203。
在编译处理期间,编译器1203执行优化例程等,这些优化例程用于检查应用源程序1201的代码以判断是否可以利用代码优化。例如,优化例程判断代码中在执行期间消耗了大量时间的任意特定部分。编译器1203判断是否可以用一个或多个UDI来替代应用源程序1201中的一个或多个指令以供目标处理器的PEU执行。如果是,则编译器1203询问PEU编程工具1205以将一个或多个UDI和相应编程信息包含在二进制应用文件1207内。如果可以使用一个或多个UDI来优化和/或加速执行,则编译器1203在二进制应用文件1207内生成定制二进制应用代码1209,其中如1211所示,定制二进制应用代码1209包含一个或多个UDI和相应编程信息PI。定制二进制应用代码1209具有与先前描述的二进制APP 115同样的格式。
定制二进制应用代码1209可以被加载到系统存储器113中,并以先前针对二进制APP 115所述的相同方式来由处理器100执行。定制二进制应用代码1209包含一个或多个合适的LD_UDI命令,以加载一个或多个UDI并因此对PEU1 101进行编程。在一些配置或实现中,定制二进制应用代码1209可能无法适当执行。例如,PEU编程工具1205或编译器1203的不正确或不兼容版本、或者处理器100的不兼容版本可能引起这种不正确操作。在所示实施例中,编译器1203还生成同样包含在二进制应用文件1207内的标准二进制应用代码1213。在定制二进制应用代码1209无法正确加载至处理器100中的情况下,代替地加载标准二进制应用代码1213。
在一个实施例中,定制二进制应用代码1209和标准二进制应用代码1213均是各自可以由兼容处理器单独或独立执行的完整版本。可选地,标准二进制应用代码1213可以被配置为在定制二进制应用代码1209无法加载的情况下包括插入码等以替代定制二进制应用代码1209的UDI代码部分。因此,在这种情况下,标准二进制应用代码1213不是完整版本,而代替地补充定制二进制应用代码1209以在代码的不兼容UDI部分上打补丁。
图13是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对诸如PEU1 101等的PEU进行编程的相应编程信息的应用的第二方法的简化框图。在这种情况下,应用生成器以所选格式来编写用于描述执行期间响应于相应UDI的PEU的处理操作的PEU功能描述1301。可以以诸如LegUp、(Catapult technology公司的)Catapult、Verilog、HDL(硬件描述语言)、寄存器控制逻辑(RCL)、寄存器传送逻辑(RTL)等的任意合适的硬件编程语言来编写该PEU功能描述1301。将PEU功能描述1301提供给相应的PEU编程工具1303,其中该PEU编程工具1303被配置为将PEU功能描述1301转换为适合对PEU1101进行编程的编程信息。
PEU编程工具1303可以被配置为将PEU功能描述1301转换为根据配置而不同的若干类型的输出中的任一种。在一个实施例中,PEU编程工具1303输出编程信息1305的一个或多个块以用于编程器所配置的相应一个或多个UDI。在另一实施例中,PEU编程工具1303输出包括UDI定义和相应编程信息1307的文件。在又一实施例中,PEU编程工具1303输出包括UDI定义和相应编程信息的一个或多个应用头部文件1309。
合适的编译器1313将PEU编程工具1303的输出包含在应用源程序1310中,以生成二进制应用文件1207。作为示例,应用生成器将PEU编程工具1303的输出作为UDI信息1311包含在应用源程序1201中,以提供应用源程序1310。在这种情况下,应用源程序1201被UDI信息1311修改或以其它方式补充,以创建应用源程序1310。UDI信息1311可以包括UDI加载命令、UDI定义和相应编程信息,以实现一个或多个UDI处理操作。然后,将修改或补充后的应用源程序1201提供给编译器1313,其中该编译器1313生成先前所述的二进制应用文件1207。
在另一情况下,应用生成器在编译原始未修改的应用源程序1201时将PEU编程工具1303的输出链接至编译器1313,并且编译器1313利用PEU编程工具1303的输出来补充来自应用源程序1201的信息以生成二进制应用文件1207。
图14是示出根据本发明的一个实施例的用于生成包含一个或多个UDI和对诸如PEU1 101等的PEU进行编程的相应编程信息的应用的另一方法的简化框图。在这种情况下,通过用于执行优化例程等的代码分析工具1403来处理诸如任意标准二进制应用代码1401等的编译后的可执行程序,其中该优化例程用于检查二进制代码并且判断是否可以利用代码优化。例如,优化例程识别代码中在执行期间消耗了大量时间的任意特定部分。代码分析工具1403判断是否可以用一个或多个UDI来替代标准二进制应用代码1213中的一个或多个指令以供目标处理器的PEU执行。如果是,则代码分析工具1403询问PEU编程工具1205以将一个或多个UDI和相应编程信息包含在(与二进制应用文件1207类似的)输出二进制文件1405内。如果可以使用一个或多个UDI来优化和/或加速执行,则代码分析工具1403在二进制应用文件1405内生成相应的定制二进制应用代码1407,其中如1409所示,定制二进制应用代码1407包含一个或多个UDI和相应编程信息。二进制应用文件1405也可以以与先前针对二进制应用文件1207所述的相同方式包括原始二进制应用代码1401。
存在可以被编程器或者以其它方式被编译器或代码分析器检测到的至少两种软件程序功能,其中硬件加速特别有利。第一软件程序功能是软件循环。在每次执行软件循环时,可以使该循环内的代码执行多次(甚至多达数千次或甚至数百万次),其中该循环在程序的执行寿命期间自身可以被执行很多次。替代软件循环中的大部分代码或全部代码可以在每次执行循环时节省许多时钟周期。在该上下文中,节省时钟周期是指降低每次循环执行的时钟周期的数量。这样,每次循环执行即便只是节省少许周期,这也可以在程序的执行寿命期间节省大量周期。
第二软件程序功能是可以经常被程序的主代码调用的子例程或过程等。在很多情况下,可以用单个UDI来替代子例程的大部分甚至替代全部子例程,由此提高子例程执行的效率。分支到子例程以及从子例程分支,这可能导致执行期间显著的性能劣化。如果可以用单个UDI来替代子例程,则可以完全消除与分支到子例程和从子例程分支相关联的无效率。编译器可以仅仅将子例程“inline”插入在调用子例程的任意位置处。UDI不仅可以降低inline插入的大小,而且还可以更有效地进行相同功能。
除了分析静态二进制(例如,x86)以进行诸如图14所示等的UDI构造和插入,还可以将相同技术应用于在动态编译器或虚拟机的情况下执行的运行时系统。例如,输入可以是在Java虚拟机(JVM)中运行的Java字节码程序,而不是x86二进制。由于JVM已经获取了字节码并且动态创建了要执行的x86代码,因此JVM必要地已经进行了要识别能用UDI适时替代的代码段所需要的大多数分析。以与二进制分析工具可以优化静态x86二进制差不多的方式,在JVM动态地编译应用时,可以就地进行该分析和优化。另一相似示例是扩展JavaScript引擎(例如,Google V8)以优化JavaScript处理。另一示例是扩展Pin或DynamoRIO或VMWare,以在x86处理正在该环境下执行期间(而不是如静态重新编译器/优化器的情况下那样在执行之前)优化该x86处理。
图16是用根据本发明的一个实施例的UDI来替代应用程序1601的例程中的标准代码以提供使用这些UDI的替代应用程序1603的简化示例。应用程序1601包含“MAIN LOOP”(主循环),其中“MAIN LOOP”包括基于索引值“i”的if/then/else系列语句以实现安全哈希算法1(SHA-1)。在该循环中,索引值“i”在0~79之间改变,并且根据i的值,可以将一组输入变量b、c和d转换为输出变量f和k。该循环中的后续步骤使用作为输入变量的值a、f、e、k和w[1]来设置变量“temp”。可以将输入和输出变量a、b、c、d、e、f和k存储或设置在架构寄存器中。
如图所示,根据SHA-1哈希函数,依赖于索引i,基于输入值b、c和d来确定变量f,并且将变量k设置为不同的十六进制恒定值(其中恒定值前面的“0x”表示十六进制)。在索引i的范围为0~19或者20~39或者40~59或者60~79这四种情况中的各情况下,通过使用b、c和d作为输入变量值的布尔函数AND、NOT、OR和XOR的组合来确定f。一旦确定出f和k,则如图所示,通过将变量a的旋转函数与输入值f、e、k和w[1]相加来确定变量“temp”。所示的旋转函数是LEFTROTATE 5,其中在LEFTROTATE 5中,将寄存器中所存储的二进制变量a左旋转5次以实现期望值。
针对四个if/then/else情况各自的布尔运算相对简单。在索引值i的范围为0~19的第一情况中,通过如下运算来确定f:将b反相(NOT b),将反相后的变量b与d进行逻辑AND,然后将该结果与逻辑上进行了AND后的变量b和c进行逻辑OR。应该理解,尽管布尔运算相对简单,但可能需要多个微操作来确定输出变量f。例如,第一微操作可以用于确定“bAND c”并且临时存储结果,称为临时变量x。第二微操作可以用于确定“NOTb AND d”并且临时存储结果,称为临时变量z。最后,第三微操作可以用于对临时变量x和z进行逻辑OR以输出变量f的结果。其余的各情况相似。不同的变量k可以被临时存储并且可以不需要单独的微操作。一旦确定出f和k,则可能需要第一微操作来使变量a左旋转,然后可能需要至少一个附加微操作来对变量a(旋转后)、f、e、k和w[1]进行相加来实现temp的最终结果。
总之,上述四种情况中的各情况和最终temp变量确定可能需要至少4个微操作,以基于索引值i针对各次迭代在标准配置中确定变量temp。
代替地,利用被分别示出为UDI1、UDI2、UDI3和UDI4这4个相对简单的UDI中的相应一个来替代四种if/then/else情况中的各情况。这些指令UDI1~UDI4各自具有变量b、c和d作为输入并且具有变量f和k作为输出。利用被示出为UDI5的单个UDI来替代temp的确定。如替代程序1603所示,通过单个UDI替代指令来进行各个if/then/else情况,并且最终temp确定是另一个UDI指令,即针对任何给定迭代总共两个UDI指令。在多数配置中,用相应用户定义指令替代x86布尔微操作,这加速了操作,使得通过编程的处理操作以较少时间来进行相同功能。
图17是用根据本发明的另一实施例的UDI替代应用程序1601的例程中的标准代码以提供使用这些UDI的替代应用程序1703的简化示例。初始应用程序1601具有相同的4个if/then/else情况和temp确定。然而,在这种情况下,用被示出为UDI0的单个UDI来替代整个if/then/else代码。索引值i作为另一输入变量而包含在UDI0指令中,由此得到用于接收i、b、c和d作为输入变量并且提供f和k作为输出变量的UDI0(i,b,c,d,f,k)。以相同的方式来提供指令UDI5以确定循环中的变量temp。
替代应用程序1703所使用的指令UDI0的处理操作比替代应用程序1603的指令UDI1~UDI4的任意处理操作稍微更复杂,但是与指令UDI1~UDI4的组合相比并不是非常地更复杂。在一个实施例中,例如,针对4个if/then/else情况各自进行编程的处理操作如果并非完全相同也可能大致相似。对于单个指令UDI0,附加的已编程处理操作接收索引值i以从4个单独情况的4个编程输出中进行选择以提供最终结果。附加指令UDI5与替代应用程序1603的相同。
应该理解,针对循环的各次迭代,通过PEU来仅执行UDI0和UDI5这两个UDI。此外,尽管并非显而易见,但替代应用程序1703相对于替代应用程序1603的实质优点在于完全消除了循环内核的条件分支。单个UDI0指令指示PEU将所有i个条件输入并行组合,其中将中间结果一起复用以提供单个最终结果。这样,应该理解,与初始应用程序1601以及替代应用程序1603相比,替代应用程序1703提供了显著效率提高和加速。
已经给出了前述描述以使本领域普通技术人员能够在特定应用的上下文及其要求中所提供的那样实现和使用本发明。虽然已经参考本发明的某些优选版本相当详细地描述了本发明,但是其它版本和变形是可能的并被预期。对优选实施例的各种修改对于本领域技术人员将是显而易见的,并且本文设定的一般原理可以应用于其它实施例。例如,本文所描述的电路可以以包括逻辑装置或电路等的任何合适的方式来实现。
本领域技术人员应当理解,可以容易地使用所公开的概念和具体实施例作为设计或修改用于在不脱离本发明的精神和范围的情况下实现本发明的相同目的的其它结构的基础。因此,本发明并不意图被限制于本文所示出以及所描述的特定实施例,而是符合与本文公开的原理和新颖特征一致的最宽范围。

Claims (41)

1.一种处理器,包括:
解码器,用于将预定指令集架构的多个标准指令转译为所述处理器的预定本地指令集的本地指令,并将所述本地指令转发到具有预定执行功能的执行系统,其中所述解码器将接收到的用户定义指令加载指令即UDI加载指令转发到UDI加载器,所述UDI加载指令用于指定UDI以及编程信息的外部位置;
可编程执行单元即PEU,其包括多个可编程逻辑元件和多个可编程互连器,所述多个可编程逻辑元件和所述多个可编程互连器被共同配置为被编程以执行至少一个处理操作;以及
指令表,其能够被编程为包括至少一个UDI和与所述至少一个UDI各自相对应的至少一个内部指令,
其中,所述UDI加载器响应于所述UDI加载指令以利用指定的UDI对所述指令表进行编程,所述UDI加载器响应于指定的UDI来检索所述编程信息并对所述PEU进行编程以执行相应处理操作;
所述编程信息包括等待时间声明,所述等待时间声明通过完成所述处理操作所需的时钟周期的数量来表示所述处理操作的等待时间,以及
所述UDI加载器通过编程信息地址字段检索所述编程信息,所述编程信息地址字段与所述指令表中的指向存储器中的编程信息的所述外部位置的指定的UDI相对应。
2.根据权利要求1所述的处理器,其中,还包括UDI处理程序,
其中,所述解码器将接收到的UDI转发到所述UDI处理程序,
所述UDI处理程序判断接收到的UDI是否在所述指令表中被编程为指定的UDI,以及
如果接收到的UDI在所述指令表中被编程为指定的UDI,则所述UDI处理程序将相应的所述至少一个内部指令转发到所述PEU以执行所述相应处理操作。
3.根据权利要求1所述的处理器,其中,所述PEU的所述多个可编程逻辑元件和所述多个可编程互连器被细分为大致相同的多个可编程区段。
4.根据权利要求3所述的处理器,其中,所述PEU还包括分配和编程逻辑,所述分配和编程逻辑用于分配适于执行所述相应处理操作的多个所述可编程区段,并利用所述编程信息对所分配的多个所述可编程区段进行编程。
5.根据权利要求4所述的处理器,其中,所述编程信息包括资源声明,以及所述分配和编程逻辑使用所述资源声明来确定所述可编程区段的数量。
6.根据权利要求1所述的处理器,其中,所述多个可编程逻辑元件包括多个可编程查找表。
7.根据权利要求1所述的处理器,其中,所述多个可编程逻辑元件包括多个加法器、多个复用器和多个寄存器。
8.根据权利要求1所述的处理器,其中,所述PEU还包括通过所述编程信息编程以对所述多个可编程逻辑元件至少之一和所述多个可编程互连器至少之一进行编程的可编程存储器。
9.根据权利要求8所述的处理器,其中,所述编程信息包括位流,所述位流包括被扫描到所述PEU的所述可编程存储器中的多个位。
10.根据权利要求1所述的处理器,其中,指定的UDI包括宏指令,以及相应的所述至少一个内部指令包括至少一个微指令。
11.根据权利要求10所述的处理器,其中,所述至少一个微指令包括用于指示所述相应处理操作的等待时间的UDI微指令,所述处理器还包括:
PEU调度器,用于使用所指示的所述等待时间来对所述UDI微指令向所述PEU的分派进行调度。
12.根据权利要求1所述的处理器,其中,对所述PEU进行编程以执行多个处理操作,其中所述多个处理操作各自用于被编程到所述指令表中的多个UDI中的相应UDI。
13.根据权利要求12所述的处理器,其中,不同的多个进程各自是由多个进程标识符中的相应进程标识符所标识的,以及所述指令表中的针对所述多个UDI各自的各条目是利用所述多个进程标识符中的相应进程标识符进行编程的。
14.根据权利要求13所述的处理器,其中,所述指令表针对所述多个UDI中的各UDI存储唯一执行标识符,所述唯一执行标识符用于标识被编程到所述PEU中的所述多个处理操作中的相应处理操作。
15.根据权利要求14所述的处理器,其中,所述PEU将接收到的内部指令应用于所述PEU中的利用所述多个处理操作中的相应处理操作进行编程并且由所述唯一执行标识符所标识的部分。
16.一种处理器,包括:
至少一个执行单元,用于执行所述处理器的预定本地指令集的本地指令;
可编程执行单元即PEU,其包括多个可编程逻辑元件和多个可编程互连器,所述多个可编程逻辑元件和所述多个可编程互连器被共同配置为被编程以响应于内部指令来执行至少一个处理操作;以及
解码器,用于将预定指令集架构的多个标准指令转换为所述处理器的所述预定本地指令集的所述本地指令,并将接收到的用户定义指令加载指令即UDI加载指令转发到UDI系统,所述UDI加载指令用于指定UDI以及相应编程信息的外部位置,
其中,所述UDI系统包括:
指令表,其能够被编程为包括至少一个UDI和相应的至少一个内部指令;以及
UDI加载器,用于响应于所述UDI加载指令以利用指定的UDI对所述指令表进行编程,检索所述相应编程信息,并利用所述相应编程信息对所述PEU进行编程,
其中,所述编程信息包括等待时间声明,所述等待时间声明通过完成所述处理操作所需的时钟周期的数量来表示所述处理操作的等待时间,以及
其中,所述UDI加载器通过编程信息地址字段检索所述编程信息,所述编程信息地址字段与所述指令表中的指向存储器中的编程信息的所述外部位置的指定的UDI相对应。
17.根据权利要求16所述的处理器,其中,还包括UDI处理程序,
其中,所述解码器将接收到的UDI转发到所述UDI处理程序,
所述UDI处理程序判断接收到的UDI是否在所述指令表中被编程,以及
如果接收到的UDI在所述指令表中被编程,则所述UDI处理程序将所述内部指令转发到所述PEU以执行所述至少一个处理操作中的相应处理操作。
18.根据权利要求16所述的处理器,其中,所述PEU的所述多个可编程逻辑元件和所述多个可编程互连器被细分为大致相同的多个可编程区段。
19.根据权利要求18所述的处理器,其中,所述PEU还包括分配和编程逻辑,所述分配和编程逻辑用于分配适于执行所述至少一个处理操作中的相应处理操作的多个所述可编程区段,并利用所述编程信息对所分配的多个所述可编程区段进行编程。
20.根据权利要求19所述的处理器,其中,所述编程信息包括资源声明,以及所述分配和编程逻辑使用所述资源声明来确定所述可编程区段的数量。
21.根据权利要求16所述的处理器,其中,所述多个可编程逻辑元件包括多个查找表。
22.根据权利要求16所述的处理器,其中,所述多个可编程逻辑元件包括多个加法器、多个复用器和多个寄存器。
23.根据权利要求16所述的处理器,其中,所述PEU还包括通过所述编程信息进行编程以对所述多个可编程逻辑元件至少之一和所述多个可编程互连器至少之一进行编程的可编程存储器。
24.根据权利要求16所述的处理器,其中,
所述内部指令用于指示所述处理操作的等待时间,以及
所述处理器还包括PEU调度器,所述PEU调度器用于使用所指示的所述等待时间来对所述内部指令向所述PEU的分派进行调度。
25.根据权利要求16所述的处理器,其中,对所述PEU进行编程以执行多个处理操作,其中所述多个处理操作各自用于被编程到所述指令表中的多个UDI中的相应UDI。
26.根据权利要求25所述的处理器,其中,不同的多个进程各自是由多个进程标识符中的相应进程标识符所标识的,以及所述指令表中的针对所述多个UDI各自的各条目是利用所述多个进程标识符中的相应进程标识符进行编程的。
27.根据权利要求26所述的处理器,其中,所述指令表针对所述多个UDI中的各UDI存储唯一执行标识符,所述唯一执行标识符用于标识被编程到所述PEU中的所述多个处理操作中的相应处理操作。
28.根据权利要求27所述的处理器,其中,所述PEU将所述内部指令应用于所述PEU中的利用所述多个处理操作中的相应处理操作进行编程并且由所述唯一执行标识符所标识的部分。
29.一种使用动态可配置的执行资源来扩展处理器的指令集的方法,包括:
将包括多个可编程逻辑元件和多个可编程互连器的可编程执行单元即PEU并入到所述处理器内,其中所述多个可编程逻辑元件和所述多个可编程互连器被共同配置为被编程以响应于用户定义指令即UDI来执行用户定义的处理操作;以及
响应于接收到包括所述UDI和用于定位外部能够访问的编程信息的地址的UDI加载指令,进行以下操作:
利用所述UDI和用于外部能够访问的编程信息的地址对指令表进行编程;以及
访问所述编程信息,并利用所述编程信息对所述PEU进行编程,
其中,所述编程信息包括等待时间声明,所述等待时间声明通过完成所述处理操作所需的时钟周期的数量来表示所述处理操作的等待时间,以及
其中,UDI加载器通过编程信息地址字段检索编程信息,所述编程信息地址字段与所述指令表中的指向存储器中的编程信息的外部位置的指定的UDI相对应。
30.根据权利要求29所述的方法,其中,还包括:
响应于接收到用于执行的UDI,进行以下操作:
访问所述指令表以判断所接收到的UDI是否位于所述指令表内;以及
如果所接收到的UDI位于所述指令表内,则调用所述PEU以执行用户定义的处理操作。
31.根据权利要求29所述的方法,其中,
对指令表进行编程的步骤还包括:利用相应的内部UDI指令来对所述指令表进行编程;
访问指令表的步骤包括:如果所接收到的UDI位于所述指令表内,则检索相应的内部UDI指令;以及
调用PEU的步骤包括:将检索到的内部UDI指令转发到所述PEU。
32.根据权利要求31所述的方法,其中,还包括:基于用户定义的处理操作的等待时间来选择内部UDI指令。
33.根据权利要求32所述的方法,其中,还包括:在所述编程信息内设置等待时间声明。
34.根据权利要求32所述的方法,其中,还包括:使用所指定的等待时间来对内部UDI指令的分派进行调度。
35.根据权利要求29所述的方法,其中,将可编程的PEU并入到处理器内的步骤包括:将所述多个可编程逻辑元件和所述多个可编程互连器细分为大致相同的多个可编程区段,
其中,所述方法还包括:
分配适于执行用户定义的处理操作的多个所述可编程区段;以及
使用所述编程信息对所分配的多个所述可编程区段进行编程。
36.根据权利要求35所述的方法,其中,还包括:在所述编程信息内设置资源声明,其中使用所述资源声明来分配所述可编程区段的数量。
37.根据权利要求29所述的方法,其中,将可编程的PEU并入到处理器内的步骤包括:并入多个可编程查找表。
38.根据权利要求29所述的方法,其中,还包括:并入通过所述编程信息编程以对所述多个可编程逻辑元件至少之一和所述多个可编程互连器至少之一进行编程的可编程存储器。
39.根据权利要求29所述的方法,其中,还包括:对所述PEU进行编程以执行用户定义的多个处理操作,其中所述多个处理操作各自用于被编程到所述指令表中的多个UDI中的相应UDI。
40.根据权利要求39所述的方法,其中,还包括:针对被编程到所述指令表中的多个UDI中的各UDI来对多个进程标识符中的相应进程标识符进行编程,其中所述多个进程标识符各自用于标识不同的多个进程中的相应进程。
41.根据权利要求39所述的方法,其中,还包括:针对被编程到所述指令表中的多个UDI中的各UDI,来将多个执行标识符中的相应执行标识符编程到所述指令表中,其中所述多个执行标识符各自用于标识用户定义的多个处理操作中的相应处理操作。
CN201680053747.0A 2015-12-08 2016-11-29 用于动态配置执行资源的具有可扩展指令集架构的处理器 Active CN108027798B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810354229.3A CN108563449B (zh) 2015-12-08 2016-11-29 编译器系统及将应用源程序编译为可执行程序的方法
CN201810355729.9A CN108563464B (zh) 2015-12-08 2016-11-29 转换系统和将可执行程序转换为定制可执行程序的方法

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562264816P 2015-12-08 2015-12-08
US62/264,816 2015-12-08
US15/337,140 US10642617B2 (en) 2015-12-08 2016-10-28 Processor with an expandable instruction set architecture for dynamically configuring execution resources
US15/337,140 2016-10-28
PCT/US2016/064042 WO2017100041A1 (en) 2015-12-08 2016-11-29 Processor with an expandable instruction set architecture for dynamically configuring execution resources

Related Child Applications (2)

Application Number Title Priority Date Filing Date
CN201810355729.9A Division CN108563464B (zh) 2015-12-08 2016-11-29 转换系统和将可执行程序转换为定制可执行程序的方法
CN201810354229.3A Division CN108563449B (zh) 2015-12-08 2016-11-29 编译器系统及将应用源程序编译为可执行程序的方法

Publications (2)

Publication Number Publication Date
CN108027798A CN108027798A (zh) 2018-05-11
CN108027798B true CN108027798B (zh) 2021-08-20

Family

ID=57629240

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201810354229.3A Active CN108563449B (zh) 2015-12-08 2016-11-29 编译器系统及将应用源程序编译为可执行程序的方法
CN201680053747.0A Active CN108027798B (zh) 2015-12-08 2016-11-29 用于动态配置执行资源的具有可扩展指令集架构的处理器
CN201810355729.9A Active CN108563464B (zh) 2015-12-08 2016-11-29 转换系统和将可执行程序转换为定制可执行程序的方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201810354229.3A Active CN108563449B (zh) 2015-12-08 2016-11-29 编译器系统及将应用源程序编译为可执行程序的方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201810355729.9A Active CN108563464B (zh) 2015-12-08 2016-11-29 转换系统和将可执行程序转换为定制可执行程序的方法

Country Status (4)

Country Link
US (3) US10642617B2 (zh)
EP (1) EP3179362B9 (zh)
CN (3) CN108563449B (zh)
WO (1) WO2017100041A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9880852B2 (en) * 2012-12-27 2018-01-30 Intel Corporation Programmable hardware accelerators in CPU
US10642617B2 (en) 2015-12-08 2020-05-05 Via Alliance Semiconductor Co., Ltd. Processor with an expandable instruction set architecture for dynamically configuring execution resources
US10268586B2 (en) 2015-12-08 2019-04-23 Via Alliance Semiconductor Co., Ltd. Processor with programmable prefetcher operable to generate at least one prefetch address based on load requests
US11061853B2 (en) 2015-12-08 2021-07-13 Via Alliance Semiconductor Co., Ltd. Processor with memory controller including dynamically programmable functional unit
EP3316130A1 (en) * 2016-10-28 2018-05-02 VIA Alliance Semiconductor Co., Ltd. Conversion system for a processor with an expandable instruction set architecture for dynamically configuring execution resources
US20190065333A1 (en) * 2017-08-23 2019-02-28 Unisys Corporation Computing systems and methods with functionalities of performance monitoring of the underlying infrastructure in large emulated system
US10664251B2 (en) 2018-10-05 2020-05-26 International Business Machines Corporation Analytics driven compiler
US11119766B2 (en) * 2018-12-06 2021-09-14 International Business Machines Corporation Hardware accelerator with locally stored macros
US10996952B2 (en) * 2018-12-10 2021-05-04 SiFive, Inc. Macro-op fusion
GB2580151B (en) * 2018-12-21 2021-02-24 Graphcore Ltd Identifying processing units in a processor
US11681508B2 (en) 2020-08-24 2023-06-20 Cisco Technology, Inc. Source code analysis to map analysis perspectives to events
US11442708B2 (en) * 2020-09-17 2022-09-13 Cisco Technology, Inc. Compiler-generated alternate memory-mapped data access operations
CN112346780B (zh) * 2020-11-05 2022-11-15 海光信息技术股份有限公司 一种信息处理方法、装置和存储介质
WO2022199483A1 (zh) * 2021-03-26 2022-09-29 北京灵汐科技有限公司 编译方法及装置、电子设备、计算机可读存储介质
US20210326135A1 (en) * 2021-06-25 2021-10-21 Dheeraj Subbareddy Programmable Fabric-Based Instruction Set Architecture for a Processor
US20220413849A1 (en) * 2021-06-28 2022-12-29 Advanced Micro Devices, Inc. Providing atomicity for complex operations using near-memory computing

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5640538A (en) * 1994-08-22 1997-06-17 Adaptec, Inc. Programmable timing mark sequencer for a disk drive
CN101404492A (zh) * 2008-11-14 2009-04-08 华为技术有限公司 加载现场可编程门阵列的方法、装置和系统
CN101946233A (zh) * 2008-02-22 2011-01-12 高通股份有限公司 用于缩短图形处理中的指令等待时间的系统和方法

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748979A (en) * 1995-04-05 1998-05-05 Xilinx Inc Reprogrammable instruction set accelerator using a plurality of programmable execution units and an instruction page table
US5802569A (en) 1996-04-22 1998-09-01 International Business Machines Corp. Computer system having cache prefetching amount based on CPU request types
US6023564A (en) 1996-07-19 2000-02-08 Xilinx, Inc. Data processing system using a flash reconfigurable logic device as a dynamic execution unit for a sequence of instructions
US5819097A (en) 1996-12-09 1998-10-06 Allen Bradley Company, Llc Industrial controller compiler with expandable instruction set
US6138229A (en) 1998-05-29 2000-10-24 Motorola, Inc. Customizable instruction set processor with non-configurable/configurable decoding units and non-configurable/configurable execution units
JP2002517856A (ja) 1998-06-08 2002-06-18 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ メモリとデータプリフェッチユニットを備えた処理装置
US6118300A (en) * 1998-11-24 2000-09-12 Xilinx, Inc. Method for implementing large multiplexers with FPGA lookup tables
US6477683B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US6453407B1 (en) 1999-02-10 2002-09-17 Infineon Technologies Ag Configurable long instruction word architecture and instruction set
US6308311B1 (en) 1999-05-14 2001-10-23 Xilinx, Inc. Method for reconfiguring a field programmable gate array from a host
US20070288765A1 (en) 1999-12-22 2007-12-13 Kean Thomas A Method and Apparatus for Secure Configuration of a Field Programmable Gate Array
US7036106B1 (en) * 2000-02-17 2006-04-25 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US7873814B1 (en) 2000-12-22 2011-01-18 Lsi Corporation Microcode based hardware translator to support a multitude of processors
US7155560B2 (en) 2001-06-27 2006-12-26 Intel Corporation Method and apparatus for storing data in flash memory
US6578130B2 (en) 2001-10-18 2003-06-10 International Business Machines Corporation Programmable data prefetch pacing
US20030225998A1 (en) * 2002-01-31 2003-12-04 Khan Mohammed Noshad Configurable data processor with multi-length instruction set architecture
US20030171907A1 (en) * 2002-03-06 2003-09-11 Shay Gal-On Methods and Apparatus for Optimizing Applications on Configurable Processors
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
US8914590B2 (en) * 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
US7200735B2 (en) * 2002-04-10 2007-04-03 Tensilica, Inc. High-performance hybrid processor with configurable execution units
WO2004021176A2 (de) * 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
US7079147B2 (en) 2003-05-14 2006-07-18 Lsi Logic Corporation System and method for cooperative operation of a processor and coprocessor
US7177985B1 (en) 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
US7051146B2 (en) 2003-06-25 2006-05-23 Lsi Logic Corporation Data processing systems including high performance buses and interfaces, and associated communication methods
US7225318B2 (en) 2003-10-08 2007-05-29 Intel Corporation Dynamic prefetch in continuous burst read operation
US7584345B2 (en) * 2003-10-30 2009-09-01 International Business Machines Corporation System for using FPGA technology with a microprocessor for reconfigurable, instruction level hardware acceleration
TW200617703A (en) * 2004-11-30 2006-06-01 Tokyo Electron Ltd Dynamically reconfigurable processor
US7664928B1 (en) * 2005-01-19 2010-02-16 Tensilica, Inc. Method and apparatus for providing user-defined interfaces for a configurable processor
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
JP4936517B2 (ja) * 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US20070288909A1 (en) * 2006-06-07 2007-12-13 Hong Kong Applied Science and Technology Research Institute Company Limited Hardware JavaTM Bytecode Translator
US8473724B1 (en) 2006-07-09 2013-06-25 Oracle America, Inc. Controlling operation of a processor according to execution mode of an instruction sequence
US9195462B2 (en) * 2007-04-11 2015-11-24 Freescale Semiconductor, Inc. Techniques for tracing processes in a multi-threaded processor
US20090031107A1 (en) * 2007-07-24 2009-01-29 Via Technologies On-chip memory providing for microcode patch overlay and constant update functions
US7592835B2 (en) 2007-12-28 2009-09-22 Intel Corporation Co-processor having configurable logic blocks
US8131984B2 (en) 2009-02-12 2012-03-06 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static serializing instruction state
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
EP2695078B1 (en) * 2011-04-07 2016-10-19 VIA Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
CN104137060B (zh) * 2011-12-30 2018-03-06 英特尔公司 高速缓存协处理单元
US9098418B2 (en) 2012-03-20 2015-08-04 Apple Inc. Coordinated prefetching based on training in hierarchically cached processors
US20140181415A1 (en) 2012-12-21 2014-06-26 Advanced Micro Devices, Inc. Prefetching functionality on a logic die stacked with memory
US10169618B2 (en) 2014-06-20 2019-01-01 Cypress Semiconductor Corporation Encryption method for execute-in-place memories
US9898292B2 (en) * 2015-02-25 2018-02-20 Mireplica Technology, Llc Hardware instruction generation unit for specialized processors
US10268586B2 (en) 2015-12-08 2019-04-23 Via Alliance Semiconductor Co., Ltd. Processor with programmable prefetcher operable to generate at least one prefetch address based on load requests
US10642617B2 (en) 2015-12-08 2020-05-05 Via Alliance Semiconductor Co., Ltd. Processor with an expandable instruction set architecture for dynamically configuring execution resources
JP6694138B2 (ja) 2016-07-26 2020-05-13 富士通株式会社 プログラマブルロジックデバイスの制御プログラム、制御方法及び情報処理装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5640538A (en) * 1994-08-22 1997-06-17 Adaptec, Inc. Programmable timing mark sequencer for a disk drive
CN101946233A (zh) * 2008-02-22 2011-01-12 高通股份有限公司 用于缩短图形处理中的指令等待时间的系统和方法
CN101404492A (zh) * 2008-11-14 2009-04-08 华为技术有限公司 加载现场可编程门阵列的方法、装置和系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Reconfigurable instruction set processors: a survey;F. Barat; R. Lauwereins;《 Proceedings 11th International Workshop on Rapid System Prototyping. RSP 2000. Shortening the Path from Specification to Prototype (Cat. No.PR00668)》;20020806;全文 *
The MOLEN polymorphic processor;S. Vassiliadis; S. Wong; G. Gaydadjiev; K. Bertels; G. Kuzmanov;;《IEEE Transactions on Computers 》;20040927;全文 *
融合动态采样剖析的可重构指令集处理器;张惠臻,王超;《计算机科学》;20130315;全文 *

Also Published As

Publication number Publication date
US20170161067A1 (en) 2017-06-08
CN108563449A (zh) 2018-09-21
EP3179362B9 (en) 2023-08-16
CN108563449B (zh) 2022-03-15
US20170161037A1 (en) 2017-06-08
EP3179362B1 (en) 2023-05-10
WO2017100041A1 (en) 2017-06-15
EP3179362A1 (en) 2017-06-14
CN108027798A (zh) 2018-05-11
US20170161036A1 (en) 2017-06-08
US10127041B2 (en) 2018-11-13
CN108563464A (zh) 2018-09-21
US10146543B2 (en) 2018-12-04
US10642617B2 (en) 2020-05-05
CN108563464B (zh) 2020-10-30

Similar Documents

Publication Publication Date Title
CN108027798B (zh) 用于动态配置执行资源的具有可扩展指令集架构的处理器
CN108829615B (zh) 具有可编程预取器的处理器
US10671391B2 (en) Modeless instruction execution with 64/32-bit addressing
US8516222B1 (en) Virtual architectures in a parallel processing environment
US10048967B2 (en) Processor arranged to operate as a single-threaded (nX)-bit processor and as an n-threaded X-bit processor in different modes of operation
EP3462307B1 (en) Microprocessor with compressed and uncompressed microcode memories
EP3316130A1 (en) Conversion system for a processor with an expandable instruction set architecture for dynamically configuring execution resources
US9830155B2 (en) Microprocessor using compressed and uncompressed microcode storage
KR20040071446A (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
EP3316146B1 (en) Processor with programmable prefetcher
WO2022153026A1 (en) Memory copy size determining instruction and data transfer instruction
Srivastava et al. Evolution of architectural concepts and design methods of microprocessors

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd.

Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Pudong New Area, Shanghai 201203

Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd.

CP03 Change of name, title or address