CN113168399B - 可执行存储器单元 - Google Patents
可执行存储器单元 Download PDFInfo
- Publication number
- CN113168399B CN113168399B CN201980078934.8A CN201980078934A CN113168399B CN 113168399 B CN113168399 B CN 113168399B CN 201980078934 A CN201980078934 A CN 201980078934A CN 113168399 B CN113168399 B CN 113168399B
- Authority
- CN
- China
- Prior art keywords
- code
- unit
- data
- executable memory
- memory unit
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种存储器***,所述存储器***包括具有第一可执行存储器单元和编译单元的存储器。所述编译单元被配置为:从主机设备接收指令序列;将所述指令序列中的每个指令转换成执行流;将来自所述执行流的第一代码加载到所述第一可执行存储器单元的代码部分中;以及将来自所述执行流的第一数据加载到所述第一可执行存储器单元的数据部分中。所述第一可执行存储器单元被配置为经由所述第一可执行存储器单元的算术逻辑单元将所述第一代码应用于所述第一数据。
Description
相关申请的交叉引用
本申请是2019年3月14日提交的美国非临时申请号16/354,053的PCT申请,该PCT申请与2019年3月14日提交的非临时专利申请16/354,038相关。前述申请中的每个申请的内容全文以引用方式并入本文。
背景技术
提供以下描述以帮助读者理解。所提供的信息或所引用的参考文献均不被承认是现有技术。
用于处理数据的计算技术通常要求在将可执行代码应用到数据之前将可执行代码和数据从持久性存储装置复制到易失性存储器中。然后,将处理结果返回到持久性存储装置。随着计算***演进以向持久性存储装置提供更快的读取和写入速度,在持久性存储装置和易失性存储器之间来回传输数据的上述方法导致处理限制和明显的瓶颈。因此,现有计算机构由于其配置和其操作方式而受到限制。
发明内容
根据本公开的一些方面,公开了一种存储器***。该存储器***包括具有第一可执行存储器单元和编译单元的存储器。该编译单元被配置为从主机设备接收指令序列;将指令序列中的每个指令转换成执行流;将来自执行流的第一代码加载到第一可执行存储器单元的代码部分中;以及将来自执行流的第一数据加载到第一可执行存储器单元的数据部分中。第一可执行存储器单元被配置为经由第一可执行存储器单元的算术逻辑单元将第一代码应用于第一数据。
根据本公开的一些其他方面,公开了另一种存储器***。该存储器***包括具有第一可执行存储器单元和编译单元的存储器。该编译单元被配置为从指令序列创建代码流。代码流包括多个代码单元,该多个代码单元中的每个代码单元存储子代码。该编译单元还被配置为从指令序列创建数据流以用于存储第一操作数和第二操作数,并且将第一子代码加载到第一可执行存储器单元中。第一子代码存储在该多个代码单元中的第一代码单元中。该编译单元还被配置为将第一操作数加载到第一可执行存储器单元中,并且将第一子代码从第一代码单元移位到该多个代码单元中的第二代码单元。
根据本公开的另外其他方面,公开了一种非暂态计算机可读介质,该非暂态计算机可读介质包括在其上体现的计算机可执行指令。这些指令在由处理器执行时使得该处理器执行包括以下操作的过程:接收指令序列;转换指令序列中的每个指令以创建执行流;将来自执行流的第一代码加载到第一可执行存储器单元的代码部分中;以及将来自执行流的第一数据加载到第一可执行存储器单元的数据部分中。该过程还包括经由第一可执行存储器单元的算术逻辑单元将第一代码应用于第一数据。
前述发明内容仅是例示性的,并不旨在以任何方式进行限制。除了上述例示性方面、实施方案和特征之外,通过参考以下附图和具体实施方式,另外的方面、实施方案和特征将变得显而易见。
附图说明
图1是根据本公开的一些实施方案的计算***的示例性框图。
图2是根据本公开的一些实施方案的图1的计算***的数据处理单元的示例性框图。
图3是根据本公开的一些实施方案的图2的数据处理单元的存储器单元的示例性框图。
图4是示出了根据本公开的一些实施方案的由图3的存储器单元执行的单操作数运算的示例性流程图。
图5是示出了根据本公开的一些实施方案的由图3的存储器单元执行的双操作数运算的示例性流程图。
图6是示出了根据本公开的一些实施方案的由图3的存储器单元执行的双操作数运算的另一个示例性流程图。
图7是根据本公开的一些实施方案的根据要由图1的计算***处理的指令创建的示例性执行流。
图8是示出了根据本公开的一些实施方案的使用图7的执行流执行的运算的示例性框图。
图9是根据本公开的一些实施方案的根据要由图1的计算***处理的指令创建的另一个示例性执行流。
图10是示出了根据本公开的一些实施方案的使用图9的执行流执行的运算的示例性框图。
图11是示出了根据本公开的一些实施方案的使用图9的执行流执行的运算的示例性流程图。
结合附图,根据以下描述和所附权利要求,本公开的上述和其它特征将变得显而易见。应当理解,这些附图仅描绘了根据本公开的若干实施方案,并且因此不应被认为是对其范围的限制,通过使用附图,将更具体且更详细地描述本公开。
具体实施方式
在以下具体实施方式中,参考了形成该具体实施方式的一部分的附图。在附图中,除非上下文另外指明,否则类似的符号通常标识类似的部件。在具体实施方式、附图和权利要求中描述的例示性实施方案并非旨在为限制性的。在不脱离在此呈现的主题的实质或范围的情况下,可利用其它实施方案,并且可进行其它改变。将容易理解的是,如本文一般所述并且在图中示出的本公开的各方面可被布置、取代、组合和设计成广泛多种不同的配置,所有这些配置均被明确地设想并成为本公开的一部分。
现代计算技术依赖于集中式方法处理数据。集中式方法使用主机设备,该主机设备具有中央处理单元(CPU)和与CPU相关联的易失性或主存储器,以及持久性存储装置(例如,与存储器控制器相关联的非易失性存储器),数据和可执行代码从该持久性存储装置传输到易失性存储器以处理数据。一旦数据处理完成,就将数据处理的结果从易失性存储器传输回持久性存储装置。随着持久性存储技术演进为以更快的读取和写入速度处理请求,集中式方法中数据的来回传输导致数据处理限制。大数据以及大数据处理中的增大的复杂性和需求加剧了这些限制。
用于提高集中式方法的性能的一种机制是增加CPU内核的数量。然而,增加CPU内核的数量仅在一定程度上改善数据处理性能。增加CPU内核的数量不会减少由显著影响数据处理性能的其他部件(诸如任务调度器、一致性协议等)造成的开销。增加CPU内核的数量也不会解决由易失性存储器和持久性存储装置之间的数据传输引起的低效率问题。另外,增加CPU内核的数量无法利用持久性存储技术的改进。因此,虽然增加CPU内核的数量可在一定程度上改善性能,但该方法具有许多限制。
因此,本公开提供了用于存储数据并在存储的位置中处理该数据的技术解决方案。因此,本公开提供了具有多个可执行存储器单元的数据处理单元。该多个可执行存储器单元中的每个可执行存储器单元既能够存储数据又能够处理存储在其中的数据。具体地讲,该多个可执行存储器单元中的每个可执行存储器单元包括用于存储数据的数据部分、用于存储用于处理数据的代码的代码部分和用于执行运算或将代码应用于数据的算术逻辑单元。通过在该多个可执行存储器单元中的每个可执行存储器单元内既存储数据又变换数据,本公开提供了更快的数据处理和改善的性能。此外,该多个可执行存储器单元中的每个可执行存储器单元可并行执行数据处理,从而允许并行数据处理以进一步改善性能。通过在同一可执行存储器单元中存储数据和处理数据,使数据和代码的来回传输最小化并且提高了功率效率。
参考图1,示出了根据本公开的一些实施方案的计算***100的示例性框图。计算***100包括与非易失性存储器阵列110相关联的主机设备105。主机设备105可被配置为从一个或多个输入设备115接收输入,并且将输出提供到一个或多个输出设备120。主机设备105可被配置为分别经由适当接口125A、125B和125C与非易失性存储器阵列110、输入设备115和输出设备120进行通信。计算***100可在多种计算设备中实现,该多种计算设备诸如计算机(例如,台式计算机、膝上型计算机等)、平板电脑、个人数字助理、移动设备、可穿戴计算设备(诸如智能手表、其它手持式或便携式设备)、或适于使用主机设备105执行操作的任何其它计算单元。
输入设备115可包括多种输入技术中的任一种,诸如键盘、触笔、触摸屏、鼠标、轨迹球、小键盘、麦克风、语音识别、运动识别、远程控制器、输入端口、一个或多个按钮、拨号盘、操纵杆、以及与主机设备105相关联并且允许外部源(诸如用户)将信息(例如,数据)键入主机设备中并且将指令发送到主机设备的任何其它输入***设备。类似地,输出设备120可包括多种输出技术,诸如外部存储器、打印机、扬声器、显示器、麦克风、发光二极管、耳机、绘图仪、语音生成设备、视频设备、全球定位***、以及被配置为从主机设备105接收信息(例如,数据)的任何其它输出***设备。输入到主机设备105中和/或从主机设备输出的“数据”可包括多种文本数据、图形数据、视频数据、声音数据、位置数据、它们的组合,或适于使用计算***100进行处理的其它类型的模拟和/或数字数据中的任一种。
主机设备105可包括被配置为运行应用程序135的数据处理单元130。数据处理单元130可被配置为执行用于运行应用程序135的指令(在本文中也称为可执行代码或代码)。数据处理单元130可能以硬件、固件、软件或它们的任何组合来实现。“执行指令”意指数据处理单元130执行该指令所要求的运算。数据处理单元130可包括一个或多个可执行存储器单元140、编译单元145和管理单元150。可执行存储器单元140被配置为既存储数据又处理数据。换句话讲,可执行存储器单元140可被配置为存储数据并且对该数据执行指令所要求的运算。编译单元145将指令转换成可执行存储器单元140理解的形式,并且准备执行流以供可执行存储器单元使用。管理单元150管理和控制编译单元145以及由可执行存储器单元140进行的数据处理。
因此,在一些实施方案中,数据处理单元130可直接或间接地从编译单元145检索指令,将这些指令以可执行形式复制到可执行存储器单元140,并且将这些指令应用于也存储在这些可执行存储器单元内的数据。数据处理单元130可为专用计算机,并且包括逻辑电路(例如,算术逻辑单元)、硬件电路等以执行指令。数据处理单元130被配置为执行指令,这些指令可使用一种或多种编程语言、脚本语言、汇编语言等来编写。在一些实施方案中,可执行存储器单元140可以是非易失性存储器阵列110的部分,在这种情况下,数据处理单元130可被主机设备105中的传统中央处理单元和主存储器替换,并且在这种情况下,可执行存储器单元140可设置有其自身的数据处理单元130和其他支持单元,诸如编译单元145和管理单元150,以在非易失性存储器阵列110内执行本文所述的功能。在一些实施方案中,可使用具有可执行存储器单元140的数据处理单元130,以及具有一个或多个可执行存储器单元(例如,类似于可执行存储器单元140)的非易失性存储器阵列110。通过将数据存储在可执行存储器单元140中(无论是在数据处理单元130中和/或是在非易失性存储器阵列110中)并且还在存储数据的位置(例如,可执行存储器单元)中处理数据,计算***100被配置为更有效且快速地运行应用程序135。
应用程序135中的每个应用程序是被配置为执行用于实现一个或多个目标的一个或多个运算的软件程序或程序组。应用程序135可被配置为供最终用户使用。就这一点而言,应用程序135可被视为最终用户应用程序。在一些实施方案中,应用程序135可以是***应用程序或实用应用程序。根据使用计算***100的环境,应用程序135的数量和类型(例如,应用程序被设计为实现的数量和类型)可因实施方案而异。计算***100还可包括操作***155,该操作***被配置为促进数据处理单元130执行应用程序135。操作***155是管理计算***100的各种硬件和软件资源的***软件程序。具体地讲,操作***155用作计算***100的硬件资源与请求执行的应用程序135之间的中介。操作***155可以是适用于计算***100的各种类型的操作***中的任一种操作***,诸如Microsoft Windows、macOS、iOS、Android、UNIX、Linux等。
非易失性存储器阵列110可包括能够执行可选存储器位置级编程和擦除而不改变存储在其他可选级的数据的各种非易失性存储器设备中的任一种非易失性存储器设备。例如,非易失性存储器阵列110中的每个位可独立改变,而不改变存储在非易失性存储器中的其他位中的数据。因此,非易失性存储器阵列110可被配置为在任何单个位写入“0”或“1”(或改变存储状态)而不改变任何其他可访问位。非易失性存储器阵列110可被配置为可逐字节改变、可逐字改变和/或可以其他粒度改变。在一些实施方案中,非易失性存储器阵列110可以是适用于计算***100的各种持久性或非持久存储器设备中的任一种。例如,在一些实施方案中,非易失性存储器阵列110可以是各种持久性存储装置中的任一种,诸如相变存储器(PCM)设备、电阻式随机存取存储器(ReRAM)设备、动态随机存取存储器(DRAM)、磁阻式随机存取存储器(MRAM)设备、铁电随机存取存储器(FeRAM)、全息存储器设备。在其他实施方案中,可使用适用于计算***100的任何其他类型的非易失性存储器设备。
此外,尽管未示出,但非易失性存储器阵列110可包括存储器控制器以与主机设备105通信,并且具体地讲,与操作***155通信以促进应用程序135的执行。
应当理解,图1中示出和描述了计算***100的仅一些部件。然而,计算***100可包括其它部件,诸如各种电池和电源、联网接口、路由器、交换机、外部存储器***、控制器等。一般来讲,计算***100可包括执行本文所述的功能所需或被认为是期望的多种硬件、软件和/或固件部件中的任一种。
现在转到图2,示出了根据本公开的一些实施方案的数据处理单元200的示例性框图。数据处理单元200类似于图1的数据处理单元130。数据处理单元200包括多个可执行存储器单元205。多个可执行存储器单元205中的每个可执行存储器单元类似于图1的可执行存储器单元140中的每个可执行存储器单元。此外,尽管未示出,但数据处理单元200还包括编译单元(例如,类似于编译单元145)、管理单元(例如,类似于管理单元150)和在执行本文所述的功能时可能必需或期望的任何其他部件。此外,基于使用与数据处理单元相关联的计算***的应用程序,数据处理单元200中的多个可执行存储器单元205的数量可因实施方案而异。
在一些实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可由上文关于非易失性存储器阵列110讨论的任何类型的存储器制成。在一些实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可由静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、磁阻式随机存取存储器(MRAM)、相位控制存储器(PCM)、电阻式随机存取存储器(ReRAM)、3D XPoint存储器、铁电随机存取存储器(FeRAM)、全息存储器设备和其他类型的字节可寻址存储器制成。在一些实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可包括混合存储器,该混合存储器包括易失性存储器部分和非易失性存储器部分。此外,在一些实施方案中,所有多个可执行存储器单元205都可由同一类型的存储器制成,而在其他实施方案中,该多个可执行存储器单元中的一个或多个可执行存储器单元可由不同类型的存储器制成。
另外,在一些实施方案中,多个可执行存储器单元205中的每个可执行存储器单元被配置为存储一个字节的二进制信息。在其他实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可被配置为存储多于或少于一个字节的二进制信息。因此,多个可执行存储器单元205中的每个可执行存储器单元可以是单级单元或多级单元。在一些实施方案中,多个可执行存储器单元205中的每个可执行存储器单元可具有多个物理级(例如,256级),这些物理级可用于在其中实现算术和逻辑运算。例如,在一些实施方案中,在多个可执行存储器单元205中的每个可执行存储器单元内,可借助于物理级向左(用于乘法)和向右(用于除法)的移位来促进乘法和除法运算。在一些实施方案中,物理级的移位可基于通过施加不同电压值来切换可执行存储器单元的状态。类似地,在一些实施方案中,可由多个可执行存储器单元205使用移位运算来实现加法、减法和逻辑运算。在其他实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可实现其他或附加机制以促进算术和逻辑运算。
此外,在一些实施方案中,多个可执行存储器单元205中的一些可执行存储器单元可被优化用于执行某些算术和逻辑运算,而该多个可执行存储器单元中的其他可执行存储器单元可被优化用于执行其他算术和逻辑运算。因此一般来讲,根据存储器的类型和特定可执行存储器单元的配置,存储在多个可执行存储器单元205中的每个可执行存储器单元中的信息量和由多个可执行存储器单元205中的每个可执行存储器单元执行的运算的类型可因实施方案而异。
另外,多个可执行存储器单元205可全部位于单个存储器芯片或位于多个存储器芯片上。此外,多个可执行存储器单元205中的至少一些可执行存储器单元可彼此互连。例如,在一些实施方案中,多个可执行存储器单元205中的至少一些可执行存储器单元可使用互连网络互连。互连网络可以是允许多个可执行存储器单元205彼此通信的各种基于网络的通信机制中的任一种。在一些实施方案中,特别是当多个可执行存储器单元205全部位于单个存储器芯片上时,互连网络可以是片上网络(“NoC”)互连。在一些实施方案中,可使用促进多个可执行存储器单元205之间通信的其他机制。当位于多个芯片上时,可选择互连网络使得即使在多个可执行存储器单元205位于不同芯片上时也允许它们通信。此外,互连网络可允许多个可执行存储器单元205经由另一个部件直接和/或间接通信。
此外,在一些实施方案中,多个可执行存储器单元205中的每个可执行存储器单元可与管理单元(例如,管理单元150)的实例相关联,而在其他实施方案中,管理单元的一个实例可被配置为管理该多个可执行存储器单元中的全部或至少一些可执行存储器单元。在一些实施方案中,多个可执行存储器单元205中的一个或多个可执行存储器单元可具有与计算***(例如,计算***100)的管理单元(例如,管理单元150)分开的管理单元。
现在参考图3,示出了根据本公开的一些实施方案的可执行存储器单元300的示例性框图。可执行存储器单元300类似于可执行存储器单元140和多个可执行存储器单元205。可执行存储器单元300包括:算术逻辑单元305,该算术逻辑单元被配置为执行指令;代码部分310,在该代码部分中存储正被执行的代码(例如,可执行代码);和数据部分315,在该数据部分中存储数据,来自代码部分的代码应用于所述数据。可执行存储器单元300还包括管理单元320,该管理单元使用存储在代码部分310中的代码和存储在数据部分315中的数据来管理算术逻辑单元305中的执行。管理单元320还可被配置为经由代码总线325在代码部分310中加载代码,并且经由数据总线330在数据部分315中加载数据。管理单元320还可被配置为将执行的结果存储在代码部分310、数据部分315或可执行存储器单元300的另一个专用结果部分(未示出)中。在一些实施方案中,管理单元320可经由数据总线330将执行的结果发送到另一个可执行存储器单元,发送到相关联数据处理单元的另一个部件(例如,数据处理单元130、200),和/或发送到输出设备120。此外,尽管管理单元320被示出为可执行存储器单元300的部分,但在一些实施方案中,管理单元可在可执行存储器单元外部(例如,如图1所示)并且管理可执行存储器单元内的运算。
此外,代码部分310和数据部分315可以是可执行存储器单元300的专用存储器部分,分别专用于存储执行就绪代码和存储数据。在一些实施方案中,代码部分310和数据部分315可分别被配置为存储一条代码和存储一条数据,而在其他实施方案中,代码部分和/或数据部分可根据其相应大小分别存储多条代码和存储多条数据。
算术逻辑单元305被配置成执行基本算术和逻辑运算。例如,在一些实施方案中,算术逻辑单元305可被配置为执行加法、减法、乘法、除法、逻辑OR、NOT、AND、XOR、NOR和NAND运算。在一些实施方案中,算术逻辑单元305也可被配置为执行附加运算或其他运算。在一些实施方案中,算术逻辑单元305可包括一组功能块,其中每个功能块能够执行一种运算(OR、XOR、加法、减法等)。另外,如上所述,算术逻辑单元305执行各种算术和逻辑运算的方式可基于用于构造可执行存储器单元,尤其是可执行存储器单元的算术逻辑单元部分的存储器的类型而变化。例如,在一些实施方案中,算术逻辑单元305可通过使可执行存储器单元300的物理级移位、对存储器单元重新编程、电阻切换、磁切换或使用适合于用于可执行存储器单元的存储器类型的其他机制来执行算术和逻辑运算。
现在转到图4,示出了根据本公开的一些实施方案的概述用于在可执行存储器单元400中执行单操作数运算的操作的示例性流程图。根据具体实施方案,流程图可包括其他、附加操作或其他操作。可执行存储器单元400类似于可执行存储器单元300。因此,可执行存储器单元400还包括用于存储代码的代码部分405、用于存储数据的数据部分410、用于将来自代码部分的代码应用于来自数据部分的数据的算术逻辑单元415、和管理单元420。管理单元420接收代码并将代码存储在代码部分405中,接收数据并将数据存储在数据部分410中,指示算术逻辑单元415将代码应用于数据,并且从算术逻辑单元接收应用程序的结果以用于存储在数据部分、代码部分中和/或用于传输到可执行存储器单元400外部(或指示算术逻辑单元存储/传输结果)。
单操作数运算涉及要对其执行运算的一个变量(例如,一条数据)。单操作数运算的示例可包括NOT运算。为了执行单操作数运算,管理单元420在操作425处将数据(例如,操作数)加载到数据部分410中,并且在操作430处将代码加载到代码部分405中。在一些实施方案中,管理单元420可先将代码加载到代码部分405中,然后将数据加载到数据部分410中。此外,在一些实施方案中,数据可能先前已存储在可执行存储器单元400的数据部分410中。在这种情况下,管理单元420可不需要在执行运算时将数据存储在数据部分410中,并且可跳过操作425。另外,为了将数据存储在数据部分410中并且将代码存储在代码部分405中,管理单元420可从由编译单元(例如,编译单元145)生成的可执行流和/或从另一个可执行存储器单元接收数据和代码。
在将数据存储在数据部分410中并且将代码存储在代码部分405中之后,管理单元420在操作435处发起代码的执行。作为发起的一部分,管理单元420可选择算术逻辑单元415的一个或多个功能块或者算术逻辑单元的一个或多个微程序,将来自代码部分405的代码应用于来自数据部分410的数据。在一些实施方案中,管理单元420可施加特殊电压以选择算术逻辑单元415的功能块/微程序,并且将选定功能块/微程序与数据部分410连接。在操作440处,算术逻辑单元415将来自代码部分405的代码应用于来自数据部分410的数据。具体地讲,来自数据部分410的数据形成用于管理单元在操作435处选择的选定功能块/微程序的输入。在操作440处,选定功能块/微程序从数据部分410读取数据、修改数据并存储结果。选定功能块/微程序可将结果存储在数据部分410中、代码部分405中或任何其他指定位置中。在一些实施方案中,管理单元420还可被配置为将结果存储在数据部分410中、代码部分405中和/或将结果发送到另一个部件。
参考图5,示出了根据本公开的一些实施方案的概述用于执行双操作数运算的操作的示例性流程图。根据具体实施方案,流程图可包括其他、附加操作或其他操作。双操作数运算涉及对其执行运算的两个变量(例如,两条数据)。具体地讲,双操作数运算涉及左操作数与右操作数,二者由运算符分开。因此,双操作数运算涉及两个可执行存储器单元:用于存储左操作数的第一可执行存储器单元500和用于存储右操作数的第二可执行存储器单元505。在一些实施方案中,第一可执行存储器单元500可存储右操作数,而第二可执行存储器单元505可存储左操作数。
第一可执行存储器单元500和第二可执行存储器单元505类似于可执行存储器单元300。因此,第一可执行存储器单元500和第二可执行存储器单元505中的每一者包括用于存储可执行代码的代码部分、用于存储数据的数据部分、用于将来自代码部分的代码应用到存储在数据部分中的数据的算术逻辑单元、和用于促进执行的管理单元。为了便于解释,在第一可执行存储器单元500和第二可执行存储器单元505中未示出代码部分、数据部分、算术逻辑单元和管理单元。
为了执行双操作数运算,在操作510处,第一可执行存储器单元500的管理单元将第一操作数存储在第一可执行存储器单元的数据部分中。在操作515处,第二可执行存储器单元505的管理单元将第二操作数存储在第二可执行存储器单元的数据部分中。在一些实施方案中,第一操作数和/或第二操作数可先前分别存储在第一可执行存储器单元500的数据部分和第二可执行存储器单元505的数据部分中。在此类情况下,可跳过操作510和/或操作515。例如,如果在执行双操作数运算时第一操作数已经存储在第一可执行存储器单元500中,则可跳过操作510。类似地,如果在执行双操作数运算时第二操作数已经存储在第二可执行存储器单元505中,则可跳过操作515。
另外,在操作520处,第一可执行存储器单元500的管理单元将第一代码存储在第一可执行存储器单元的代码部分中,并且在操作525处,第二可执行存储器单元505的管理单元将第二代码存储在第二可执行存储器单元的代码部分中。第一代码和第二代码可以是从主机设备(例如,主机设备105)接收的指令的子代码。在一些实施方案中,第一代码和第二代码可被配置为按指定序列应用。此外,在一些实施方案中,第一代码可识别第一操作数是左操作数,并且第二代码可识别第二操作数是右操作数。在一些运算中,诸如减法、除法等运算中,操作数的次序对于正确地执行运算可能是重要的。例如,如果操作数为5和3并且运算符为减法运算,则函数5-3和3-5得出不同的结果。因此,第一代码和第二代码可限定操作数要在运算中使用的正确次序。
此外,在一些实施方案中,第一代码和/或第二代码还可识别要应用于第一操作数和第二操作数的运算符并且/或者限定要如何处理运算的结果。在其他实施方案中,第一可执行存储器单元500和/或第二可执行存储器单元505的管理单元可接收第三代码(例如,运算符),该第三代码限定要应用于第一操作数和第二操作数上的运算,并且/或者限定要如何处理运算的结果。在一些实施方案中,第一可执行存储器单元500和/或第二可执行存储器单元505的管理单元可接收***码,该***码限定要如何处理运算的结果。因此,指令可被划分成一个或多个子代码,这些子代码可以按指定序列应用以执行指令。
此外,操作510-525可以按任何次序执行。第一操作数、第二操作数、第一代码和第二代码加载到第一可执行存储器单元500和第二可执行存储器单元505中的相对次序可因实施方案而异。
在将第一操作数和第一代码存储在第一可执行存储器单元500中之后,操作530开始。在操作530处,第一可执行存储器单元500的管理单元指示第一可执行存储器单元的算术逻辑单元将第一操作数指定为左操作数。管理单元还可选择算术逻辑单元中的功能块/微程序以将第一代码应用于第一操作数。类似地,在将第二操作数和第二代码存储在第二可执行存储器单元505中之后,操作535开始。在操作535处,第二可执行存储器单元505的管理单元指示第二可执行存储器单元的算术逻辑单元将第二操作数指定为右操作数。管理单元还可选择算术逻辑单元中的功能块/微程序以将第二代码应用于第二操作数。操作530和535可同时执行。
此外,在其中使用附加代码(例如,第三代码、***码等)的一些实施方案中,在操作530和535完成之后,第一可执行存储器单元500和第二可执行存储器单元505的管理单元可接收下一个要应用的代码。管理单元可将这些附加代码存储在其相应可执行存储器单元的代码部分中。在接收并存储附加代码之后或者在不需要附加可执行代码部分的情况下,在操作540处,可执行存储器单元中的一个可执行存储器单元的管理单元将存储在其中的操作数传输到其他可执行存储器单元。在一些实施方案中,存储左操作数的可执行存储器单元可将左操作数传输到存储右操作数的可执行存储器单元。在其他实施方案中,存储右操作数的可执行存储器单元可将右操作数传输到存储左操作数的可执行存储器单元。
因此,如图5所示,第二可执行存储器单元505将第二操作数传输到存储第一操作数的第一可执行存储器单元500。在接收到第二操作数之后,第一可执行存储器单元500的管理单元可将第一操作数移动到第一可执行存储器单元的代码部分,并且将第二操作数存储在第一可执行存储器单元的数据部分中。在一些实施方案中,第一可执行存储器单元500的管理单元可不将第二操作数存储在第一可执行存储器单元的数据部分中。相反,管理单元可将第二操作数存储在代码部分中或将第二操作数直接连接到第一可执行存储器单元的算术逻辑单元。
在操作545处,第一可执行存储器单元500的管理单元指示第一可执行存储器单元的算术逻辑单元执行该执行。具体地讲,在一些实施方案中,第一可执行存储器单元500的管理单元可选择第一可执行存储器的算术逻辑单元的功能块/微程序以应用于第一操作数和第二操作数。在从管理单元接收到指令之后,第一可执行存储器单元500的算术逻辑单元的所选功能块/微程序执行运算(例如,将代码应用于第一操作数和第二操作数)并获得结果。第一可执行存储器单元500的算术逻辑单元或管理单元可将结果存储在第一可执行存储器单元的数据部分中、第一可执行存储器单元的代码部分中,将结果传输到第二可执行存储器单元505或将结果传输到另一个部件。在一些实施方案中,在操作545完成之后,第一可执行存储器单元500的管理单元可接收限定要如何处理结果的另一个代码。
参考图6,示出了根据本公开的一些实施方案的另一个双操作数运算的示例性流程图。根据具体实施方案,流程图可包括其他、附加操作或其他操作。类似于图5,图6的双操作数运算由两个可执行存储器单元:第一可执行存储器单元600和第二可执行存储器单元605来执行。第一可执行存储器单元600和第二可执行存储器单元605类似于可执行存储器单元300。因此,尽管未示出,但第一可执行存储器单元600和第二可执行存储器单元605中的每一者包括用于存储代码的代码部分、用于存储数据的数据部分、用于将来自代码部分的代码应用于来自数据部分的数据的算术逻辑单元、和用于促进运算的管理单元。
为了执行双操作数运算,在操作610处,第一可执行存储器单元600的管理单元将第一操作数(例如,第一条数据)存储在第一可执行存储器单元的数据部分中。在操作615处,第二可执行存储器单元605的管理单元将第二操作数(例如,第二条数据)存储在第二可执行存储器单元的数据部分中。在一些实施方案中,第一操作数和/或第二操作数可先前已分别存储在第一可执行存储器单元和/或第二可执行存储器单元中。在此类情况下,可跳过操作610和/或操作615。
另外,在操作620处,第一可执行存储器单元600的管理单元将第一代码存储在第一可执行存储器单元的代码部分中,并且在操作625处,第二可执行存储器单元605的管理单元将第二代码存储在第二可执行存储器单元的代码部分中。同样,第一数据、第二数据、第一代码和第二代码加载到第一可执行存储器单元600和第二可执行存储器单元605中的相对次序可因实施方案而异。
此外,第一代码可识别第一操作数是左操作数还是右操作数,并且第二代码可识别第二操作数是右操作数还是左操作数。第一代码和/或第二代码还可选择要应用于第一操作数和第二操作数上的相应算术逻辑单元的功能块/微程序。在一些实施方案中,第三代码可用于限定运算。此外,在一些实施方案中,***码可用于管理运算的结果,如上文关于图5所讨论的。
在将第一操作数和第一代码存储在第一可执行存储器单元600中之后,在操作630处,第一可执行存储器单元的管理单元指示第一可执行存储器单元的算术逻辑单元将第一操作数指定为左操作数或右操作数。类似地,在将第二操作数和第二可执行代码存储在第二可执行存储器单元605中之后,操作635开始。在操作635处,第二可执行存储器单元605的管理单元指示第二可执行存储器单元的算术逻辑单元将第二操作数指定为右操作数或左操作数。操作630和635可同时执行。操作610-635类似于上文所讨论的操作510-535。
此外,在一些实施方案中并且如图6所讨论的,可将来自第一可执行存储器单元600的第一代码和来自第二可执行存储器单元605的第二代码组合在一起,而不是如关于图5所讨论的将数据从一个可执行存储器单元发送到另一个可执行存储器单元。在其中使用附加代码(例如,第三代码、***码等)的实施方案中,在操作630和635完成之后,第一可执行存储器单元600和第二可执行存储器单元605的管理单元可接收下一个要应用的代码并且将这些代码组合。
因此,在操作640处,将来自第一可执行存储器单元600的第一代码和来自第二可执行存储器单元605的第二代码组合在一起。在一些实施方案中,可通过允许第一可执行存储器单元600和/或第二可执行存储器单元605的算术逻辑单元访问其他可执行存储器单元的数据部分来实现该组合。例如,在一些实施方案中,第一可执行存储器单元600和第二可执行存储器单元605的管理单元可允许第一可执行存储器单元的算术逻辑单元访问第二可执行存储器单元的数据部分以访问第二操作数。在其他实施方案中,第一可执行存储器单元600和第二可执行存储器单元605的管理单元可允许第二可执行存储器单元的算术逻辑单元访问第一可执行存储器单元的数据部分以访问第一操作数。在其他实施方案中,第一可执行存储器单元600和第二可执行存储器单元605的管理单元可允许第一可执行存储器单元的算术逻辑单元访问第二可执行存储器单元中的第二操作数,并且允许第二可执行存储器单元的算术逻辑单元访问第一可执行存储器单元中的第一操作数。
然后,具有对第一操作数和第二操作数的访问权限的算术逻辑单元可应用代码来执行双操作数运算。在一些实施方案中,第一可执行存储器单元600和第二可执行存储器单元605的算术逻辑单元的功能块/微程序可被组合以形成组合功能块/微程序。可允许组合功能块/微程序访问第一可执行存储器单元600和第二可执行存储器单元605的数据部分以执行双操作数运算。在一些实施方案中,可通过移位运算来实现第一代码和第二代码的组合,如下文更详细地讨论的。运算的结果可以如上文关于图5所讨论的类似的方式处理。
现在转到图7,示出了根据本公开的一些实施方案的示例性执行流700。执行流700由计算***(例如,计算***100)的编译单元(例如,编译单元145)生成。在从主机设备(例如,主机设备105)接收到指令序列(例如,运行应用程序135中的一个应用程序)之后,编译单元将指令序列中的每个指令转换成易于被可执行存储器单元(例如,可执行存储器单元140)理解并且准备执行的形式。因此,编译单元将输入源代码转换成目标源代码。加载到可执行存储器单元中的代码是目标源代码。
通过将输入源代码转换成目标源代码,编译单元创建可执行二进制流(例如,执行流700)。作为转换的一部分,在一些实施方案中,编译单元可将指令分解成多个子运算或子代码。例如,如上文所讨论的,双操作数运算可涉及多个代码:用于识别左操作数的第一代码、用于识别右操作数的第二代码、用于应用运算的第三代码、和用于管理运算的结果的***码。因此,上述每个代码可被认为是子代码或一步命令。可通过按指定序列执行子代码来执行具有多个子代码的指令。
在一些实施方案中,编译单元(例如,编译单元145)可以是即时编译器。在其他实施方案中,编译单元可以是适合与可执行存储器单元(例如,可执行存储器单元140)一起使用的另一种类型的编译器。此外,编译单元所生成的执行流700可被视为图灵机的无限带,该无限带包括多个分立的单元,其中每个单元存储代码(例如,子代码)或数据。因此,执行流700可包括多个单元,该多个单元包括与代码交织的数据。例如,执行流700的单元705A可存储代码1。要应用代码1的数据可存储在单元710A中。执行流700的单元705B可存储代码2,并且单元710B可存储要应用代码2的数据。如果代码1是包括多个子代码的指令的子代码,则代码2可以是序列中的第二子代码,该第二子代码要在代码1之后执行。如果代码1是独立代码,则代码2可以是具有多个子代码的另一个指令的第一子代码或另一个独立代码。因此,编译单元(例如,编译单元145)创建要由可执行存储器单元(例如,可执行存储器单元140)执行的连续数据和代码(无论是独立代码还是子代码)流。执行流700将代码和数据两者存储在单个流中。因此,执行流700可被视为“单个执行流”。
尽管执行流700将代码单元(例如,单元705A、705B、705N)示出在数据单元(例如,单元710A、710B、710N)的右侧,但在一些实施方案中,代码单元可在数据单元的左侧。此外,尽管每个代码单元(例如,单元705A、705B、705N)与另一个代码单元由数据单元(例如,单元710A、710B、710N)分开,但在一些实施方案中,两个或更多个代码单元可彼此相邻定位,而在其间没有数据单元。同样,在一些实施方案中,两个或更多个数据单元(例如,单元710A、710B、710N)可彼此相邻定位,而在其间没有代码单元(例如,单元705A、705B、705N)。一般来讲,执行流700以及执行流中代码单元(例如,单元705A、705B、705N)和数据单元(例如,单元710A、710B、710N)的布置可取决于要执行的指令的类型和该指令中的子代码的数量、要执行这些子代码的次序以及要应用这些子代码的数据。
执行流700可使用指针715来执行。指针715指示执行流700的当前正在执行的代码单元。一旦指针715正指向的代码单元已完成执行,指针就移动到序列中的下一个代码单元。例如,指针715可在单元705A处开始。当指针715正指向单元705A时,正在执行与该单元相关联的代码。在一些实施方案中,来自指针715正指向的单元705A的代码可被读取并加载到可执行存储器单元中。在一些实施方案中,相关联的数据处理单元(例如,数据处理单元130)的管理单元(例如,管理单元150)可从单元705A读取代码并且将代码发送到适当的可执行存储器单元的管理单元以用于存储在该可执行存储器单元的代码部分中。管理单元还可将可与代码单元705A中的代码相关联的、来自数据单元710A的数据发送到可执行存储器单元的数据部分。在接收并存储代码和数据之后,可执行存储器单元可开始执行,如上文关于图4至图6所讨论。
在一些实施方案中,执行流700可存储在可执行存储器单元的序列中。例如,来自每个代码单元(例如,单元705A、705B、…、705N)的代码可存储在可执行存储器单元的代码部分,并且来自每个数据单元(例如,单元710A、710B、…、710N)的相关联数据可存储在可执行存储器单元的数据部分中。因此,当指针715指向特定代码单元时,来自该代码单元的代码和来自相关联数据单元的数据可能已经存储在可执行存储器单元中,并且该可执行存储器单元可简单地开始执行代码。
尽管指针715已被解释为从执行流700的右侧移动到左侧,但在一些实施方案中,指针也可从左侧移动到右侧。另外,尽管示出了单个指针,但在一些实施方案中,也可在执行流700中使用多个指针,其中每个指针用于执行流的一部分。
根据执行流700,可执行单操作数运算和双操作数运算。例如并且具体参见图8,示出了根据本公开的一些实施方案的使用单个执行流800执行的示例性运算。类似于执行流700,执行流800包括分立的代码单元805A、805B、…、805N和数据单元810A、810B、…、810N。执行流800可特别适用于执行单操作数运算。可使用执行流800以顺序方式或并行方式执行运算。
为了以顺序方式执行运算,逐个地顺序遍历执行流800的每个单元。执行流800中的每个数据单元和代码单元都与可执行存储器单元相关联。此外,在一些实施方案中,一个数据单元和要应用于该数据的一个代码单元可形成代码/数据单元对,并且该对可与同一可执行存储器单元相关联。例如,在一些实施方案中,来自代码单元805A的代码和来自数据单元810A的数据可形成代码/数据单元对,并且可与第一可执行存储器单元815相关联。类似地,在一些实施方案中,来自代码单元805B的代码和来自数据单元810B的数据可形成代码/数据单元对,并且可与第二可执行存储器单元820相关联,以此类推。
此外,在一些实施方案中,当执行流的指针825正指向执行流800的代码/数据单元对的代码单元时,可将来自该代码单元的代码和来自数据单元的数据加载到可执行存储器单元中。例如,在一些实施方案中,当指针825正指向代码单元805A时,可将来自该代码单元的代码1和来自数据单元810A的数据1加载到第一可执行存储器单元815中。在其他实施方案中,可将整个执行流800(或其至少一部分)存储在可执行存储器单元中,然后开始第一代码单元(例如,代码单元805A)的执行。具体地讲,可提前将来自每个代码/数据单元对的信息加载到可执行存储器单元中,并且当指针825指向代码/数据单元对的代码单元时,可执行存储器单元可开始执行。无论代码和数据何时存储在可执行存储器单元中,对于顺序执行,每个代码/数据单元对都可以按指针的移动表示的指定序列执行。例如,可在第一存储器单元815中执行来自代码单元805A的代码1,然后执行来自代码单元805B的代码。
单操作数运算可包括多个子代码。例如,在一些实施方案中,单操作数运算可包括两个子代码:用于将代码应用于数据的第一子代码和用于存储运算的结果的第二子代码。因此,在执行流800中,第一子代码可存储在代码单元805A中,并且第二子代码可存储在代码单元805B中。数据或操作数可存储在数据单元810A中。为了执行,来自代码单元805A的第一子代码可存储在第一可执行存储器单元815的代码部分中,并且来自数据单元810A的数据可存储在第一可执行存储器单元的数据部分中。如上文所讨论,可通过第一可执行存储器单元815的管理单元(图8中未示出)来促进将代码加载到代码部分中以及将数据加载到数据部分中。在加载第一子代码和数据并且将第一子代码应用于数据之后,第一可执行存储器单元815可将结果存储在第二可执行存储器单元820的数据部分中。指针825可移动到代码单元805B以将第二子代码加载到第二可执行存储器单元820的代码部分中。因此,第二可执行存储器单元820可从第一可执行存储器单元815接收数据并且从执行流800接收第二子代码。然后,第二可执行存储器单元820可将第二子代码应用于第二可执行存储器单元的数据部分中的数据。可以如上文关于图4所讨论的那样执行单操作数运算。
为了以并行方式执行运算,可将每对数据和代码并行地加载到可执行存储器单元中。因此,可同时部署多个可执行存储器单元以用于并行执行。例如,可并行地将来自代码单元805A的代码1、来自代码单元805B的代码2和来自代码单元805C的代码分别加载到第一可执行存储器单元、第二可执行存储器单元和第三可执行存储器单元的代码部分中。类似地,可并行地将来自数据单元810A的数据、来自数据单元810B的数据和来自数据单元810C的数据分别加载到第一可执行存储器单元、第二可执行存储器单元和第三可执行存储器单元的数据部分中。因此,通过将其相应的代码部分中的代码应用于存储在其相应的数据部分中的数据,第一可执行存储器单元、第二可执行存储器单元和第三可执行存储器单元中的每一者都可并行地执行。当代码单元805A、805B和805C中的代码将不按指定序列执行时,并行运算是特别有利的。例如,当代码单元805B中的代码的执行不需要完成代码单元805A中的代码的执行时,可使用并行执行。在一些实施方案中,当要将同一代码应用于不同数据时,并行执行可以是特别有利的,使得同一代码可被存储在执行流800的每个代码单元中并且每个数据单元都可具有要应用该代码的数据的实例。
在一些实施方案中,执行流800的一部分可顺序执行,而执行流的另一部分可并行地执行。此外,在一些实施方案中,随着执行流800的每个单元中的代码和数据改变,执行也可在顺序和并行之间改变。因此,基于存储在执行流800中的代码以及特定代码的执行是否依赖于另一代码的执行的完成,执行流可顺序地或并行地执行。
现在参考图9,示出了根据本公开的一些实施方案的示例性执行流900。与作为在一个执行流中具有交织的数据和代码的单个执行流的执行流700相比,执行流900是针对数据和代码具有单独执行流的双执行流。因此,执行流900包括数据流905和代码流910。数据流905被配置为存储数据,并且代码流910被配置为存储代码。在从主机设备(例如,主机设备105)接收到指令之后,编译单元(例如,编译单元145)可创建执行流900。
执行流900的数据流905和代码流910各自包括多个分立的单元。在一些实施方案中,代码流910中的每个代码单元可与数据流905中的一个数据单元相关联。此外,在一些实施方案中,代码单元/数据单元对可与一个可执行存储器单元相关联。指针915可用于跟踪代码流910的执行。在一些实施方案中,并且特别是当执行流900用于通过移位来执行运算时,可不提供指针915,或者不使用指针(如果提供)。通过提供单独的数据流(例如,数据流905)和单独的代码流(例如,代码流910),可独立地控制这些流中的每个流。执行流900的其他方面类似于执行流700,因此不再讨论。
此外,类似于执行流800,执行流900可用于以顺序或并行方式执行运算,如相对于图10所讨论的。因此,图10示出了根据本公开的一些实施方案的示例性执行流1000。执行流1000包括数据流1005和代码流1010。由于处于单独的流中,数据流1005中的数据可独立于代码流1010中的代码使用,如分别由虚线框1015和1020表示。另外,类似于执行流800,可使用执行流1000以顺序方式或并行方式执行运算。
一般来讲,使用执行流1000的顺序运算和并行运算类似于上文关于执行流800所讨论的顺序运算和并行运算。执行流1000将来自代码流1010的一个代码单元和来自数据流1005的一个数据单元与一个可执行存储器单元相关联,而不是将同一流(例如,执行流800)的一个代码单元和一个数据单元与一个可执行存储器单元相关联。例如,为了执行单操作数顺序运算,编译单元(例如,编译单元145)可发送来自数据单元1025A的数据以将其加载到第一可执行存储器单元1030的数据部分中。编译单元还可发送来自代码单元1035A的代码以将其加载到第一可执行存储器单元1030的代码部分中。类似地,可将来自数据单元1025B的数据和来自代码单元1035B的代码加载到第二可执行存储器单元1040中。第二可执行存储器单元1040可与第一可执行存储器单元1030相同或不同,以用于顺序运算。因此,按顺序次序执行执行流1000的每个代码单元/数据单元对。
为了使用执行流1000以顺序方式执行双操作数运算,可使用移位运算。下文关于图11更详细地讨论移位运算。对于使用执行流1000的并行执行,每个代码单元/数据单元对可与单独的可执行存储器单元相关联。当代码将不按指定序列执行时(例如,当一个代码单元中的代码的执行不依赖于另一个代码单元中的代码的执行时),并行执行可能是有利的。为了并行地执行执行流1000,可将来自数据单元1025A的数据和来自代码单元1035A的代码加载到第一可执行存储器单元1030中,可将来自数据单元1025B的数据和来自代码单元1035B的代码加载到第二可执行存储器单元1040中,依此类推,并行地进行。执行流1000的并行执行类似于上文所讨论的执行流800的并行执行。
现在转到图11,示出了根据本公开的一些实施方案的示例性执行流1100。结合图5和图6讨论图11。执行流1100类似于执行流1000。因此,执行流1100包括数据流1105和代码流1110。数据流1105和代码流1110两者分别包括用于存储数据和用于存储代码的多个单元。可以如上文关于图5和图6所讨论的那样执行双操作数运算。具体地讲,可使用移位运算来执行图5和图6的双操作数运算。为了执行移位运算,代码流1110可一次移位一个代码单元。如上所述,用于双操作数运算的指令可包括如下多个子代码:用于将第一操作数识别为左/右操作数的第一子代码、用于将第二操作数识别为左/右操作数的第二子代码、用于将代码应用于第一操作数和第二操作数上的第三子代码、和用于管理运算的结果的第四子代码。
因此,为了执行双操作数运算,第一操作数可存储在数据流1105的数据单元1115A中,并且第二操作数可存储在数据流的数据单元1115B中。类似地,并且在运算开始时,第一子代码可存储在代码流1110的代码单元1120A中。数据单元1115A和代码单元1120A可与第一可执行存储器单元相关联。数据单元1115B和代码单元1120B可与第二可执行存储器单元相关联。在操作1125处,可将第一操作数从数据单元1115A加载到第一可执行存储器单元的数据部分中,并且可将第二操作数从数据单元1115B加载到第二可执行存储器单元的数据部分中。另外,可将第一子代码加载到第一可执行存储器单元的代码部分中。操作1125引起图5的操作510、515和520以及图6的操作610、615和620。在将第一操作数和第一子代码加载到第一可执行存储器单元中之后,第一可执行存储器单元可执行图5的操作530和图6的操作630。
在完成图5/图6的操作530/640的执行之后,在操作1130处,执行流1100使代码流1110移位一个代码单元。由于移位运算,代码单元1120B接收第一子代码,而第二子代码加载到代码单元1120A中。同样在操作1130中,将来自代码单元1120B的第一子代码加载到第二可执行存储器单元的代码部分中。因此,操作1130引起图5的操作525和图6的操作625。在一些实施方案中,在操作1130处而不是在操作1125处,可将来自数据单元1115B的第二操作数加载到第二可执行存储器单元中。另外,在操作1130处,现在将来自代码单元1120A的第二子代码加载到第一可执行存储器单元的代码部分中。因此,在操作1130处,第一可执行存储器单元存储第一操作数和第二子代码,而第二可执行存储器单元存储第二操作数和第一子代码。第二可执行存储器单元可应用图5的操作535和图6的操作635。
在操作1135处,将第三子代码加载到代码单元1120A中,并且将第二子代码移位到代码单元1120B。另外,在操作1135处,将第三子代码加载到第一可执行存储器单元中,并且将第二子代码加载到第二可执行存储器单元中。此外,如果图5的过程用于执行双操作数运算,则在该阶段第二可执行存储器单元可将第二操作数传输到(在操作540处)第一可执行存储器单元。如果使用图6的过程,则由于移位运算,第一可执行存储器单元已经具有第二子代码。因此,由于移位运算,发生操作640。同样在操作1135处,在接收到第三子代码之后,第一可执行存储器单元执行双操作数运算,如在图5的操作545和图6的操作645处所讨论的。
然后,在操作1140处,代码单元1120A加载有第四子代码,而第三子代码移位到代码单元1120B中。因此,在操作1140处,将第四子代码加载到第一可执行存储器单元中,并且将第三子代码加载到第二可执行存储器单元中。在接收到第四子代码之后,第一可执行存储器单元根据第四子代码存储双操作数运算的结果。在操作1145处,将第四子代码移位到代码单元1120B中并加载到第二可执行存储器单元中。该加载向第二可执行存储器单元发送信号特通知双操作数运算已结束。因此,对于双操作数运算,第一可执行存储器单元和第二可执行存储器单元中的每一者都接收所有四个子代码。
因此,本公开提供了可执行存储器单元,该可执行存储器单元被配置为处理存储数据的位置中的数据。本公开还提供了将指令转换成易于被可执行存储器单元理解的形式以进行处理的机制。应当理解,本文所用的任何示例仅仅是出于解释的目的,并非旨在以任何方式进行限制。
本文所述的主题有时说明了包含在不同其它部件内或与不同其它部件连接的不同部件。应当理解,此类描绘的架构仅是示例性的,并且事实上实现相同功能的许多其它架构可被实现。在概念意义上,用以实现相同功能的部件的任何布置被有效地“相关联”,使得实现期望功能。因此,本文组合以实现特定功能的任何两个部件可被视为彼此“相关联”,使得实现期望功能,而与架构或中间部件无关。同样地,如此相关联的任何两个部件还可被视为彼此“可操作地连接”、或“可操作地耦接”以实现期望功能,并且能够如此相关联的任何两个部件还可被视为彼此“可操作地耦接”以实现期望功能。可操作地耦接的具体示例包括但不限于物理上可匹配和/或物理上交互的部件和/或无线可交互和/或无线交互的部件和/或逻辑上交互和/或逻辑上可交互的部件。
关于在本文基本上任何复数和/或单数术语的使用,本领域的技术人员可视上下文和/或应用而定从复数转化为单数和/或从单数转化为复数。为了清楚起见,本文可明确地阐述各种单数/复数变换。
本领域的技术人员应当理解,一般而言,在本文中,尤其在所附权利要求书中所用的术语(例如,所附权利要求书中的主体)通常意指“开放性”术语(例如,术语“包括”应被解释为“包括但不限于”,术语“具有”应被解释为“具有至少”,术语“包括”应被解释为“包括但不限于”等)。本领域的技术人员还应当理解,如果意图引入特定数目的引入的权利要求表述,则这种意图将在权利要求书中明确表述,并且在不存在此类表述的情况下,不存在此类意图。例如,为了有助于理解,以下所附权利要求书可包含使介绍性短语“至少一个”和“一个或多个”以引入权利要求表述。然而,此类短语的使用不应被解释为暗示由不定冠词“一个”或“一种”引入的权利要求表述将包含此类引入的权利要求表述的任何特定权利要求书限制为仅包含一个此类表述的发明,即使当相同权利要求包括介绍性短语“一个或多个”或“至少一个”以及不定冠词诸如“一个”或“一种”(例如,“一个”和/或“一种”通常应被解译为表示“至少一个”或“一个或多个”)时也是如此;使用用于引入权利要求表述的定冠词也是如此。此外,即使明确地表述了特定数目的引入的权利要求表述,本领域的那些技术人员也将认识到,此类表述通常应被解释为意思是至少所述表述的数目(例如,在没有其它修饰语的情况下,“两种表述”的无修饰表述通常意思是至少两种表述,或者两种或更多种表述)。此外,在其中使用类似于“A、B和C等中的至少一者”的常规惯例的那些情况下,一般来讲这种构造意指是在本领域的技术人员将理解常规惯例的意义上(例如,“具有A、B和C中的至少一者的***”将包括但不限于单独具有A、单独具有B、单独具有C、同时具有A和B、同时具有A和C、同时具有B和C、和/或同时具有A、B和C的***等)。在其中使用类似于“A、B或C等中的至少一者”的常规惯例的那些情况下,一般来讲这种构造意指是在本领域的技术人员将理解常规惯例的意义上(例如,“具有A、B或C中的至少一者的***”将包括但不限于单独具有A、单独具有B、单独具有C、同时具有A和B、同时具有A和C、同时具有B和C、和/或同时具有A、B和C的***等)。本领域技术人员将会进一步理解,实际上无论是在说明书、权利要求书还是在附图中,呈现两个或更多个替代性术语的任何分离性词语和/或短语应被理解为设想包括术语中的一个、术语中的任一个或两个术语的可能性。例如,短语“A或B”将被理解为包括“A”或“B”或“A和B”的可能性。此外,除非另外指明,否则使用词语“大约”、“约”、“周围”,“基本上”等意思是加或减百分之十。
已出于说明和描述的目的呈现了例示性实施方案的前述描述。在所公开的精确形式方面并非旨在是穷举性的或限制性的,并且根据上述教导内容,修改形式和变型形式是可能的,或者可从所公开的实施方案的实践中获得。本发明的范围旨在由所附权利要求书及其等效物限定。
Claims (20)
1.一种存储器***,包括:
存储器,所述存储器包括第一可执行存储器单元;和
编译单元,所述编译单元被配置为:
从主机设备接收指令序列;
将所述指令序列转换成执行流,所述执行流包括代码和数据的连续流;
将来自所述执行流的第一代码加载到所述第一可执行存储器单元的代码部分中;以及
将来自所述执行流的第一数据加载到所述第一可执行存储器单元的数据部分中;
其中所述第一可执行存储器单元被配置为经由所述第一可执行存储器单元的算术逻辑单元将所述第一代码应用于所述第一数据。
2.根据权利要求1所述的存储器***,其中所述执行流包括多个单元,所述多个单元中的每个单元存储代码或数据。
3.根据权利要求1所述的存储器***,其中所述执行流包括用于存储数据的数据流和用于存储代码的代码流。
4.根据权利要求1所述的存储器***,其中所述编译单元被配置为确定所述指令序列中的第一指令包括多个子代码,并且其中所述编译单元被进一步配置为将所述多个子代码中的每个子代码按指定序列存储在所述执行流中。
5.根据权利要求4所述的存储器***,其中所述多个子代码中的每个子代码由所述第一可执行存储器单元按所述指定序列执行。
6.根据权利要求1所述的存储器***,其中所述存储器进一步包括第二可执行存储器单元,所述编译单元被进一步配置为:
接收在所述第一可执行存储器单元中所述第一代码到所述第一数据的所述应用完成的指示;
在接收到所述完成指示之后,在所述第二可执行存储器单元的代码部分中加载第二代码;以及
在接收到所述完成指示之后,在所述第二可执行存储器单元的数据部分中加载第二数据。
7.根据权利要求1所述的存储器***,其中所述执行流包括多个子代码和多个数据,其中所述多个子代码中的每个子代码与所述多个数据中的一个数据相关联以形成多个代码/数据对,并且其中所述多个代码/数据对中的每个代码/数据对与一个可执行存储器单元相关联以供执行。
8.根据权利要求7所述的存储器***,其中所述多个代码/数据对中的每个代码/数据对按指定序列顺序地执行。
9.根据权利要求7所述的存储器***,其中所述多个代码/数据对中的每个代码/数据对并行地执行。
10.根据权利要求1所述的存储器***,其中使用所述执行流中的移位运算来执行双操作数运算。
11.一种存储器***,包括:
存储器,所述存储器包括第一可执行存储器单元;和
编译单元,所述编译单元被配置为:
从指令序列创建代码流,其中所述代码流包括多个代码单元,所述多个代码单元中的每个代码单元存储子代码;
从所述指令序列创建数据流以用于存储第一操作数和第二操作数;
将第一子代码加载到所述第一可执行存储器单元中,其中所述第一子代码存储在所述多个代码单元的第一代码单元中;
将所述第一操作数加载到所述第一可执行存储器单元中;以及
将所述第一子代码从所述第一代码单元移位到所述多个代码单元中的第二代码单元。
12.根据权利要求11所述的存储器***,其中所述编译单元被进一步配置为:
在所述第一代码单元中加载第二子代码;
将所述第二子代码加载到所述第一可执行存储器单元中;
将来自所述第二代码单元的所述第一子代码加载到所述存储器的第二可执行存储器单元;以及
将所述第二子代码移位到所述第二代码单元。
13.根据权利要求11所述的存储器***,其中所述编译单元被进一步配置为将所述第二操作数加载到所述存储器的第二可执行存储器单元中。
14.根据权利要求13所述的存储器***,其中所述第一可执行存储器单元和所述第二可执行存储器单元一起执行双操作数运算。
15.一种非暂态计算机可读介质,所述非暂态计算机可读介质包括在其上体现的计算机可执行指令,所述计算机可执行指令在由处理器执行时使得所述处理器执行包括以下操作的过程:
接收指令序列;
转换所述指令序列以创建执行流,所述执行流包括代码和数据的连续流;
将来自所述执行流的第一代码加载到第一可执行存储器单元的代码部分中;
将来自所述执行流的第一数据加载到所述第一可执行存储器单元的数据部分中;以及
经由所述第一可执行存储器单元的算术逻辑单元将所述第一代码应用于所述第一数据。
16.根据权利要求15所述的非暂态计算机可读介质,其中所述过程还包括创建包括与数据交织的代码的单个执行流。
17.根据权利要求15所述的非暂态计算机可读介质,其中所述过程还包括创建用于存储代码的代码流和用于存储数据的数据流。
18.根据权利要求15所述的非暂态计算机可读介质,其中所述指令序列中的第一指令包括要按指定序列执行的多个子代码,并且其中所述执行流按所述指定序列存储所述多个子代码。
19.根据权利要求15所述的非暂态计算机可读介质,其中所述执行流包括多个单元,并且其中所述多个单元中的每个单元与一个可执行存储器单元相关联。
20.根据权利要求15所述的非暂态计算机可读介质,其中所述过程还包括:
在接收到由所述第一可执行存储器单元执行的第一运算完成的指示之后,在第二可执行存储器单元的代码部分中加载第二代码;以及
在接收到所述第一运算的所述完成指示之后,在所述第二可执行存储器单元的数据部分中加载第二数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/354,053 | 2019-03-14 | ||
US16/354,053 US10884664B2 (en) | 2019-03-14 | 2019-03-14 | Executable memory cell |
PCT/US2019/067660 WO2020185282A1 (en) | 2019-03-14 | 2019-12-19 | Executable memory cell |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113168399A CN113168399A (zh) | 2021-07-23 |
CN113168399B true CN113168399B (zh) | 2023-09-19 |
Family
ID=72423446
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980078934.8A Active CN113168399B (zh) | 2019-03-14 | 2019-12-19 | 可执行存储器单元 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10884664B2 (zh) |
CN (1) | CN113168399B (zh) |
DE (1) | DE112019005520T5 (zh) |
WO (1) | WO2020185282A1 (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102592082A (zh) * | 2010-12-18 | 2012-07-18 | 微软公司 | 通过操作码随机化的安全 |
CN105159761A (zh) * | 2008-06-06 | 2015-12-16 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
CN105556466A (zh) * | 2013-10-30 | 2016-05-04 | 国际商业机器公司 | 代码堆栈管理 |
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
CN106575271A (zh) * | 2014-06-23 | 2017-04-19 | 谷歌公司 | 管理存储设备 |
US10102158B1 (en) * | 2014-04-22 | 2018-10-16 | Accusoft Corporation | Methods and apparatus for processing multiple streams of data |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4293733A (en) | 1979-11-13 | 1981-10-06 | John A. Weithman | Safety cover for electrical outlets |
DE69131679T2 (de) | 1990-07-30 | 2000-05-11 | Texas Instruments Inc | Statisches Speicherfeld mit wahlfreiem Zugriff, welches mindestens eine arithmetisch-logische Einheit enthält |
KR940004434A (ko) | 1992-08-25 | 1994-03-15 | 윌리엄 이. 힐러 | 스마트 다이나믹 랜덤 억세스 메모리 및 그 처리방법 |
TW318933B (en) | 1996-03-08 | 1997-11-01 | Hitachi Ltd | Semiconductor IC device having a memory and a logic circuit implemented with a single chip |
US20030023960A1 (en) | 2001-07-25 | 2003-01-30 | Shoab Khan | Microprocessor instruction format using combination opcodes and destination prefixes |
GB0125711D0 (en) * | 2001-10-26 | 2001-12-19 | Ibm | In-memory arithmetic |
JP2004005287A (ja) | 2002-06-03 | 2004-01-08 | Hitachi Ltd | コプロセッサを搭載したプロセッサシステム |
US8117567B2 (en) | 2007-12-03 | 2012-02-14 | International Business Machines Corporation | Structure for implementing memory array device with built in computation capability |
US8819651B2 (en) * | 2008-07-22 | 2014-08-26 | International Business Machines Corporation | Efficient software cache accessing with handle reuse |
US8327316B2 (en) * | 2008-09-30 | 2012-12-04 | Ics Triplex Isagraf Inc. | Compilation model |
US9152427B2 (en) | 2008-10-15 | 2015-10-06 | Hyperion Core, Inc. | Instruction issue to array of arithmetic cells coupled to load/store cells with associated registers as extended register file |
WO2010109751A1 (ja) | 2009-03-25 | 2010-09-30 | 日本電気株式会社 | コンパイルシステム、コンパイル方法およびコンパイルプログラムを格納した記憶媒体 |
US8234460B2 (en) | 2009-06-04 | 2012-07-31 | Micron Technology, Inc. | Communication between internal and external processors |
US8521958B2 (en) | 2009-06-04 | 2013-08-27 | Micron Technology, Inc. | Internal processor buffer |
US9606807B2 (en) | 2009-06-04 | 2017-03-28 | Micron Technology, Inc. | Direct communication with a processor internal to a memory device |
US9477636B2 (en) | 2009-10-21 | 2016-10-25 | Micron Technology, Inc. | Memory having internal processors and data communication methods in memory |
US8719516B2 (en) | 2009-10-21 | 2014-05-06 | Micron Technology, Inc. | Memory having internal processors and methods of controlling memory access |
US20110314263A1 (en) | 2010-06-22 | 2011-12-22 | International Business Machines Corporation | Instructions for performing an operation on two operands and subsequently storing an original value of operand |
US8780634B2 (en) | 2012-11-09 | 2014-07-15 | Sandisk Technologies Inc. | CAM NAND with OR function and full chip search capability |
US20150106574A1 (en) | 2013-10-15 | 2015-04-16 | Advanced Micro Devices, Inc. | Performing Processing Operations for Memory Circuits using a Hierarchical Arrangement of Processing Circuits |
US10223260B2 (en) * | 2014-03-19 | 2019-03-05 | International Business Machines Corporation | Compiler-generated memory mapping hints |
US9875358B2 (en) * | 2014-06-20 | 2018-01-23 | Microsoft Technology Licensing, Llc | Preventing code modification after boot |
WO2017065379A1 (ko) | 2015-10-16 | 2017-04-20 | 삼성전자 주식회사 | 프로세싱-인-메모리를 이용한 명령어 처리 방법 및 그 장치 |
GB2549775B (en) * | 2016-04-28 | 2018-05-16 | Imagination Tech Ltd | Directed placement of data in memory |
US10198349B2 (en) * | 2016-09-19 | 2019-02-05 | Advanced Micro Devices, Inc. | Programming in-memory accelerators to improve the efficiency of datacenter operations |
US10732866B2 (en) | 2016-10-27 | 2020-08-04 | Samsung Electronics Co., Ltd. | Scaling out architecture for DRAM-based processing unit (DPU) |
US10860318B2 (en) | 2016-12-06 | 2020-12-08 | Gsi Technology, Inc. | Computational memory cell and processing array device using memory cells |
DE102017103347B4 (de) | 2017-02-17 | 2023-07-20 | Infineon Technologies Ag | Verarbeitung von daten in speicherzellen eines speichers |
-
2019
- 2019-03-14 US US16/354,053 patent/US10884664B2/en active Active
- 2019-12-19 WO PCT/US2019/067660 patent/WO2020185282A1/en active Application Filing
- 2019-12-19 DE DE112019005520.8T patent/DE112019005520T5/de active Pending
- 2019-12-19 CN CN201980078934.8A patent/CN113168399B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159761A (zh) * | 2008-06-06 | 2015-12-16 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
CN102592082A (zh) * | 2010-12-18 | 2012-07-18 | 微软公司 | 通过操作码随机化的安全 |
CN105556466A (zh) * | 2013-10-30 | 2016-05-04 | 国际商业机器公司 | 代码堆栈管理 |
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
US10102158B1 (en) * | 2014-04-22 | 2018-10-16 | Accusoft Corporation | Methods and apparatus for processing multiple streams of data |
CN106575271A (zh) * | 2014-06-23 | 2017-04-19 | 谷歌公司 | 管理存储设备 |
Non-Patent Citations (1)
Title |
---|
Crossbar-Constrained Technology Mapping for ReRAM based In-Memory Computing;Bhattacharjee;School of Computer Science and Engineering;全文 * |
Also Published As
Publication number | Publication date |
---|---|
US10884664B2 (en) | 2021-01-05 |
US20200293223A1 (en) | 2020-09-17 |
CN113168399A (zh) | 2021-07-23 |
DE112019005520T5 (de) | 2021-09-16 |
WO2020185282A1 (en) | 2020-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8776035B2 (en) | Providing performance tuned versions of compiled code to a CPU in a system of heterogeneous cores | |
JP3180075B2 (ja) | 異なる命令コード相互間の動的変換装置及び方法 | |
NO137165B (no) | Programmerbar anordning. | |
US10778815B2 (en) | Methods and systems for parsing and executing instructions to retrieve data using autonomous memory | |
TW200403583A (en) | Controlling compatibility levels of binary translations between instruction set architectures | |
KR930018378A (ko) | 캐쉬 메모리 시스템의 성능최적화 방법 및 장치 | |
JP5869125B2 (ja) | エントロピ符号化命令シーケンスの記憶および実行可能な形式への変換のための方法および装置 | |
US5964861A (en) | Method for writing a program to control processors using any instructions selected from original instructions and defining the instructions used as a new instruction set | |
KR20170141205A (ko) | Dsp 엔진 및 향상된 컨텍스트 스위치 기능부를 구비한 중앙 처리 유닛 | |
CN105094691A (zh) | 一种数据操作的方法、设备和*** | |
US8707013B2 (en) | On-demand predicate registers | |
CN113168399B (zh) | 可执行存储器单元 | |
US20110289299A1 (en) | System and Method to Evaluate a Data Value as an Instruction | |
WO2012131433A1 (en) | Integrated circuit device and methods of performing bit manipulation therefor | |
CN113168325A (zh) | 可执行存储器单元 | |
Watson et al. | Operational experiences with the TI advanced scientific computer | |
TWI766891B (zh) | 半導體裝置的處理器與其操作方法 | |
US11442715B1 (en) | Asynchronous framework | |
WO2018082344A1 (zh) | 一种软硬件协同分支指令预测方法及装置 | |
CN114968356A (zh) | 一种数据处理的方法、装置、处理器和计算设备 | |
JP2009175797A (ja) | コンパイル方法及びコンパイラプログラム | |
Sadler | FICL: An Embeddable Extension Language Interpreter | |
US20140019990A1 (en) | Integrated circuit device and method for enabling cross-context access | |
Al-Shemery | Hacking Techniques & Intrusion Detection |
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 |