CN108292162A - 用于多线程访问的软件定义fifo缓冲器 - Google Patents
用于多线程访问的软件定义fifo缓冲器 Download PDFInfo
- Publication number
- CN108292162A CN108292162A CN201680070274.5A CN201680070274A CN108292162A CN 108292162 A CN108292162 A CN 108292162A CN 201680070274 A CN201680070274 A CN 201680070274A CN 108292162 A CN108292162 A CN 108292162A
- Authority
- CN
- China
- Prior art keywords
- request
- buffer controller
- buffer
- hardware
- write
- 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.)
- Granted
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
- 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
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/10—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
- G06F5/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Systems (AREA)
- Memory System (AREA)
Abstract
计算机***包含硬件缓冲器控制器。对缓冲器的存储器访问请求不包含所述缓冲器内的地址,并且访问所述缓冲器的线程不访问或直接更新指向所述缓冲器内的位置的任何指针。所述存储器访问请求被寻址到所述硬件缓冲器控制器,所述硬件缓冲器控制器从其当前状态确定地址并且向所述地址发布存储器访问命令。所述硬件缓冲器控制器响应于所述存储器访问请求而更新其状态。响应于上溢或下溢条件或接近上溢或接近下溢条件,所述硬件缓冲器控制器评估其状态并且将事件输出到线程调度器。所述线程调度器随后可以阻止线程向所述硬件缓冲器控制器发布存储器访问请求。实施的所述缓冲器可以是FIFO或其它类型的缓冲器。
Description
技术领域
本发明涉及用于实施FIFO缓冲器的***和方法。
背景技术
在常规的计算机***中,先进先出(FIFO)缓冲器可以由多个线程访问。然而,在常规***中,一次仅一个线程可以访问FIFO缓冲器。这会引入延迟和处理开销,以防止在等待FIFO缓冲器的数据结构由另一线程释放时由阻塞线程同时访问。
本文所公开的***和方法提供一种用于实施同时可由多个线程访问的FIFO缓冲器的改进方法。
附图说明
为了使得将容易理解本发明的优点,将参考附图中所说明的具体实施例呈现对上文简述的本发明的更具体描述。在理解这些图式仅描绘本发明的典型实施例且因此不应认为其限制本发明的范围的情况下,将通过使用附图来以额外特异性和细节来描述并解释本发明,在附图中:
图1是适合于实施根据本发明的实施例的方法的计算机***的示意性框图;
图2A到2B是根据本发明的实施例的用于实施硬件FIFO缓冲器的组件的示意性框图;
图3A和3B是根据本发明的实施例的用于实施到硬件FIFO缓冲器的读取和写入的方法的过程流程图;以及
图4是根据本发明的实施例用于使用硬件FIFO缓冲器防止缓冲器上溢和下溢的方法的过程流程图。
具体实施方式
容易理解的是,如本文中大体描述且在图中说明的本发明的组件可以各种不同配置来布置和设计。因此,图中表示的本发明的实施例的以下更详细描述并不意图限制所要求的本发明的范围,而是仅表示根据本发明的当前设想的实施例的某些实例。参考图式将最好地理解当前所描述的实施例,其中通篇中用相同数字表示相同部分。
根据本发明的实施例可以实施为设备、方法或计算机程序产品。因此,本发明可以采用完全硬件实施例、完全软件实施例(包含固件、驻留软件、微码等)或组合软硬件方面的实施例(在本文中可以全部总称为"模块"或"***")的形式。另外,本发明可以采用实施于任何有形表达媒体中的计算机程序产品的形式,所述有形表达媒体具有实施于媒体中的计算机可用程序代码。
可以利用一个或多个计算机可用媒体或计算机可读媒体的任何组合,包含非暂时性媒体。例如,计算机可读介质可以包含便携式计算机磁盘、硬盘、随机存取存储器(RAM)装置、只读存储器(ROM)装置、可擦除可编程只读存储器(EPROM或闪存存储器)装置、便携式压缩光盘只读存储器(CDROM)、光学存储装置和磁性存储装置中的一个或多个。在所选的实施例中,计算机可读介质可以包括任何非暂时性媒体,所述非暂时性介质可以容纳、存储、传送、传播或传递通过或结合指令执行***、设备或装置使用的程序。
可以通过一种或多种编程语言的任何组合编写用于执行本发明的操作的计算机程序代码,所述一种或多种编程语言包含例如Java、Smalltalk、C++等等面向对象的编程语言,以及例如“C”编程语言或类似编程语言的常规程序性编程语言。所述程序代码可以作为单独的软件包完全在计算机***上执行,在单独硬件单元上执行,部分地在与计算机隔开某一距离的远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种场景中,远程计算机可以通过任何类型的网络,包含局域网(LAN)或广域网(WAN))连接到计算机,或者可以对外部计算机进行连接(例如,使用互联网服务提供商通过互联网)。
下文参考根据本发明的实施例的方法、设备(***)和计算机程序产品的流程图说明和/或框图描述本发明。应理解,可以通过计算机程序指令或代码实施流程图说明和/或框图中的每一块,以及流程图说明和/或框图中的块的组合。可以将这些计算机程序指令提供到通用计算机、专用计算机或其它可编程数据处理设备的处理器以产生机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实施在流程图和/或框图块中指定的功能/动作的装置。
这些计算机程序指令还可以存储在非暂时性计算机可读介质中,所述非暂时性计算机可读介质可以指导计算机或其它可编程数据处理设备用特定方式运行,使得存储在计算机可读介质中的指令产生包含实施在流程图和/或框图块中指定的功能/动作的指令装置的制品。
计算机程序指令还可以加载到计算机或其它可编程数据处理设备上,以使在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实施的过程,使得在计算机或其它可编程设备上执行的指令提供用于实施在流程图和/或框图块中指定的功能/动作的过程。
图1是说明实例计算装置100的框图。计算装置100可以用于执行各种程序,例如本文中论述的那些程序。计算装置100可以充当服务器、客户端或任何其它计算实体。计算装置可以执行本文中论述的各种监测功能,并且可以执行一个或多个应用程序,例如本文所述的应用程序。计算装置100可以是多种多样的计算装置中的任一种,例如桌上型计算机、笔记本计算机、服务器计算机、手持型计算机、平板计算机等等。
计算装置100包含一个或多个处理器102、一个或多个存储器装置104、一个或多个接口106、一个或多个大容量存储装置108、一个或多个输入/输出(I/O)装置110和显示装置130,所述装置全部连接到总线112。处理器102包含执行存储在存储器装置104和/或大容量存储装置108中的指令的一个或多个处理器或控制器。处理器102还可以包含各种类型的计算机可读媒体,例如,高速缓冲存储器。
存储器装置104包含各种计算机可读媒体,例如,易失性存储器(例如,随机存取存储器(RAM)114)和/或非易失性存储器(例如,只读存储器(ROM)116)。存储器装置104还可以包含可重写ROM,例如,闪存存储器。
大容量存储装置108包含各种计算机可读媒体,例如,磁带、磁盘、光盘、固态存储器(例如,闪存存储器)等等。如图1所示,特定的大容量存储装置是硬盘驱动器124。各种驱动器还可以包含在大容量存储装置108中,以实现从不同计算机可读媒体的读取和/或到不同计算机可读媒体的写入。大容量存储装置108包含可装卸媒体126和/或非可装卸媒体。
I/O装置110包含允许数据和/或其它信息输入到计算装置100或从计算装置100检索的各种装置。实例I/O装置110包含光标控制装置、键盘、小键盘、麦克风、监视器或其它显示装置,例如,扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其它图像捕获装置等。
显示装置130包含能够向计算装置100的一个或多个用户显示信息的任何类型的装置。显示装置130的实例包含监视器、显示终端、视频投影装置等。
图形处理单元(GPU)132可以连接到处理器102和/或显示装置130。GPU可以用于再现计算机生成图像并且执行其它图形处理。GPU可以包含通用处理器,例如处理器102的功能性中的一些或全部。GPU还可以包含特定于图形处理的额外功能性。GPU可以包含与坐标变换、阴影化、纹理化、光栅化有关的硬编码和/或硬接线图形功能,以及有助于再现计算机生成图像的其它功能。
接口106包含允许计算装置100与其它***、装置或计算环境交互的各种接口。例如,接口106包含任何数目的不同网络接口120,例如局域网(LAN)、广域网(WAN)、无线网络和互联网的接口。其它接口包含用户接口118以及***装置接口122。接口106还可以包含一个或多个用户接口元件118。接口106还可以包含一个或多个***接口,例如,用于打印机、指向装置(鼠标、触控板等)、键盘等的接口。
总线112允许处理器102、存储器装置104、接口106、大容量存储装置108和I/O装置110与彼此,以及连接到总线112的其它装置或组件通信。总线112表示若干类型的总线结构,例如,***总线、PCI总线、IEEE 1394总线、USB总线等等中的一个或多个。
出于说明的目的,程序和其它可执行程序组件在本文中示为离散块,但是应理解,此类程序和组件可以在不同时间驻留在计算装置100的不同存储组件中并且通过处理器102执行。或者,本文所描述的***和程序可以在硬件,或硬件、软件和/或固件的组合中实施。例如,一个或多个专用集成电路(ASIC)可以被编程为执行本文所述的***和程序中的一个或多个。
参考图2A,处理装置102可以执行一个或多个线程200。如上所述,计算机***100可以包含多个处理装置102。处理装置102中的任一个或处理装置102的组合可以执行下文归因于“处理装置”102的功能。线程可以通过由处理装置102执行的应用程序实例化。处理器可以通过常规方式分配处理资源并且将执行从一个线程200切换到另一线程。线程200可以向存储器子***204发布存储器访问请求202(例如,读取和写入请求),所述存储器子***204包含存储器装置104以及可能地***于处理装置102与存储器装置104之间的存储器控制器。存储器访问请求202可以是本领域中已知的任何常规的存储器访问请求,例如,包含以下字段<操作码、源类型、源地址、目标类型、目标地址>中的一些或全部的指令,其中操作码是指示待执行的操作的代码,源类型和目标类型指示将访问哪个存储器装置104,源地址是将从其检索数据的存储器装置104内的位置,并且目标地址在数据将写入的存储器装置104内。同样,存储器请求202的处理方式可以是常规的。操作码可以指示读取操作,因此被执行为从源地址检索数据并返回到发布请求的处理器线程200。同样,操作码可以指示被执行为将数据写入到目标地址的写入操作。
处理器线程200可以向硬件缓冲器控制器208发出存储器访问请求206。硬件缓冲器控制器208是硬件装置,所述硬件装置包含被配置成执行本文中归因于硬件缓冲器控制器208的功能的电路。硬件缓冲器控制器208可以与处理装置102位于不同裸片或相同裸片上,或与存储器子***204的一个或多个组件位于相同裸片上。与常规的存储器访问请求202相比,存储器访问请求206可以具有相同或不同格式。然而,存储器访问请求206不直接引用存储器装置104中的任何地址或地址范围。替代地,存储器访问请求202引用特定硬件缓冲器控制器208。硬件缓冲器控制器208可以被初始化以限定一个或多个缓冲器,每个缓冲器定义包含指派给缓冲器的存储器装置104中的一个内的地址分配。可以采用开始和结束地址或开始地址和缓冲器大小的形式为每个缓冲器记录分配。每个硬件缓冲器控制器208的初始化可以包含初始化读取指针210以指向初始读取位置,以及初始化写入指针212以指向初始写入位置。多个缓冲器可以在硬件缓冲器控制器208内初始化,或多个硬件缓冲器控制器208可以通过类似方式初始化。
用于缓冲器的硬件缓冲器控制器208的初始化可以通过处理装置102调用,所述处理装置同样可以根据本领域中已知的任何方法为存储器装置104内的缓冲器分配存储器。缓冲器的初始化可以通过实例化一个或多个处理线程200的应用程序调用,并且可以将对初始化缓冲器的引用返回到应用程序,以供线程使用以读取以及写入到缓冲器。
在所说明的实施例中,硬件缓冲器控制器208实施FIFO缓冲器。然而,还可以实施其它类型的缓冲器(例如,后进先出)。
硬件缓冲器控制器208可以包含求和器214。求和器214接收存储器访问请求206并且确定对每个缓冲器的多个请求206。例如,可以在处理器102、总线112或存储器子***204的一个时钟循环中接收多个请求206。具体来说,可以接收引用相同缓冲器的多个请求。在所说明的实施例中,求和器214将在每个时钟循环中针对每个缓冲器接收到的读取请求206的数目以及在每个时钟循环中针对每个缓冲器接收到的写入请求206的数目求和。每个请求206可以包含缓冲器标识符,使得求和器214可以识别具有相同缓冲器标识符的所有读取请求206以及具有相同缓冲器标识符206的所有写入请求。
用于每个缓冲器的读取指针210随后通过硬件缓冲器控制器208递增在引用每个缓冲器的时钟循环中接收到的读取请求206的数目。同样,用于每个缓冲器的写入指针212通过硬件缓冲器控制器208递增在引用每个缓冲器的时钟循环中接收到的写入请求206的数目。
FIFO地址产生器216检测求和器214的输出或读取指针210的变化中的一个或两个,或另外被通知在时钟循环期间针对每个缓冲器接收到的任何读取请求206和写入请求。FIFO地址产生器216随后将存储器访问请求218输出到存储器子***204。具体来说,在时钟循环期间接收到N个读取请求的情况下,FIFO地址产生器216输出N个读取请求218或包含一系列N个地址的读取请求218。同样,在时钟循环期间接收到N个读取请求的情况下,FIFO地址产生器216产生N个写入请求218或包含待写入的N个值和一系列N个地址的写入请求218。
FIFO地址产生器216在每个请求218中包含基于读取指针210的状态的地址。例如,对于单个读取或写入请求,FIFO发生器216可以取决于C指向缓冲器中的下一可用地址还是缓冲器中的先前访问地址来输出包含读取指针210或写入指针212的当前值(C)或C+1的读取或写入请求。对于N个读取或写入请求,FIFO发生器216输出包含地址C、C+1、C+2、……、C+N-1的N个读取或写入请求,或引用地址C到C+N-1的单个读取或写入请求。在一些实施例中,在确定请求218的地址之前,指针210、212的值递增。因此,对于单个请求218,请求218的地址将是C+1、C+2、……、C+N或范围C+l到C+N。
如先前所提及,硬件缓冲器控制器208可以包含多个缓冲器。因此,MUX 220可以选择性地将指针210、212连接到FIFO地址产生器216,所述FIFO地址产生器216随后又通过先前段落中描述的方式产生对每个缓冲器的请求218。同样,由于存储器访问请求202还被输入到存储器子***204,因此可以将请求202、218输入到MUX 222,所述MUX根据轮询选择方案或其它负载平衡方法选择性地将请求202、218输入到存储器子***204中。
参考图2B,硬件缓冲器控制器208可以进一步基于其状态产生事件224。事件224可以被输入到由处理装置102执行的线程调度器226。线程调度器226确定哪些处理器线程200在处理装置102上执行,并且还阻塞线程、分支到其它线程以及执行本领域中已知的其它线程管理功能。每个事件224可以指示产生事件的缓冲器。
在一些实施例中,线程调度器226接收事件224并且在其上执行线程管理任务。例如,事件224可以指示缓冲器已满或几乎满。因此,可以阻止线程200写入到缓冲器。例如,应用程序可以向线程调度器注册一个或多个线程200以响应于几乎满事件而进行阻塞。同样,调度器226可以被编程为响应于指示缓冲器为空或几乎为空的事件224而阻止某些线程从缓冲器读取。
在所说明的实施例中,基于读取计数器226和写入计数器228产生事件。对于每个缓冲器,通过减法器230从写入计数器的值中减去读取计数器226的值。随后将计数器226、228值之间的差,以及一个或多个阈值234,输入到比较器232。
零差指示缓冲器为空——读取刚好与写入一样多。在一些实施例中,在差为零的情况下,可以产生识别缓冲器的“缓冲器空”事件224。阈值234可以包含低阈值,使得如果参考值小于低阈值,则可以产生引用缓冲器的“接近空”事件224。
等于缓冲器的大小的差指示缓冲器满,因为根据缓冲器中的条目总数,写入操作大于读取操作。在一些实施例中,在差等于缓冲器的大小的情况下,可以产生引用缓冲器的“缓冲器满”事件。阈值234可以包含小于缓冲器的大小的高阈值,例如,等于缓冲器的大小的80%与90%之间。如果差大于高阈值,则可以产生引用缓冲器的“接近满”事件224。
在一些实施例中,为了避免计数器226、228的上溢,可以例如,周期性地或在计数器226、228中的一个接近可由计数器226、228表示的最大值之后,从计数器226、228中减去计数器226、228中的较小者的值。
在一些实施例中,当空、接近空、满或接近满条件停止存在时,比较器232可以产生事件。例如,如果先前发现缓冲器满或接近满,并且随后发现未满或未接近满,则可以通过比较器232产生“缓冲器就绪”或“缓冲器满清除”事件。同样,如果先前发现缓冲器空或接近空,并且随后发现未空或未接近空,则可以通过比较器232产生“缓冲器就绪”或“缓冲器空清除”事件。
如上所述,硬件缓冲器控制器208可以实施多个缓冲器。因此,在此类实施例中,多路复用器236、238可以选择性地将每个缓冲器的计数器226、228连接到减法器230和比较器232,以便评估其间的差并且根据上文所描述的方法视需要产生每个缓冲器的事件。
在接收事件224之后,线程调度器224随后可以调用相对于处理器线程200的一个或多个动作。例如,在接收“缓冲器空”或“接近空”事件之后,应用程序可以通知调度器226阻塞线程200。因此,在接收此事件之后,将阻止执行所述线程200。在清除“缓冲器空”或“缓冲器空”事件之后,例如,在接收“缓冲器就绪”或“缓冲器空清除”事件之后,停止通过线程调度器224阻塞线程。
类似地,在接收“缓冲器满”或“接近满”事件之后,应用程序可以通知调度器226阻塞线程200。因此,在接收此事件之后,随后将阻止执行所述线程200。在清除“缓冲器满”或“接近满”事件之后,例如,在接收“缓冲器就绪”或“缓冲器空清除”事件之后,停止通过线程调度器224阻塞线程。
因此,应用程序可以具有被编程为执行对缓冲器的写入请求的一些线程200,并且可以在接收引用缓冲器的“缓冲器满”或“接近满”事件之后指导线程调度器226阻塞此类线程200。应用程序可以具有被编程为执行对缓冲器的读取请求的一个或多个不同线程200,并且在接收所述缓冲器的“缓冲器空”或“接近空”事件之后,指导线程调度器226阻塞此类线程200。
线程200可以对多于一个缓冲器发出请求,并且应用程序因此可以通知线程调度器226基于引用由硬件缓冲器控制器208实施的一个或多个缓冲器的事件来阻塞线程。
参考图3A,响应于接收引用缓冲器的写入请求,所说明的方法300可以通过硬件缓冲器控制器208执行,所述写入请求包含缓冲器的标识符,但不包含实际上存储缓冲器的条目的存储器装置104中的地址。
方法300包含接收302对缓冲器的一个或多个写入请求,以及求和304写入请求以确定在某一时间段期间缓冲器接收到的写入请求的数目。例如,在步骤304处可以计数在处理装置102、总线112、存储器装置104或硬件缓冲器208的一个时钟循环期间接收到的写入请求的数目。如上所述,多个缓冲器可以通过硬件缓冲器控制器208实施,使得针对在时钟循环期间接收写入请求的每个缓冲器执行方法300的步骤。出于图3A和3B的目的,“缓冲器”是指执行所说明方法的缓冲器。
方法300可以包含更新306写入指针212和写入计数器228中的一个或两个。在一些实施例中,仅这些值中的一个用于表示缓冲器的状态。例如,硬件缓冲器控制器208可以仅存储写入指针212和读取指针210,以确定缓冲器而不是计数器的状态。在其它实施例中,仅使用计数器226、228,并且从计数器以及缓冲器的开始地址确定地址。具体来说,更新指针212和计数器228可以包含使其中的每一个递增在时钟循环期间接收到的写入请求的数目。
方法300进一步包含基于写入指针212的状态以及接收到302的写入请求的数目产生308地址。如上所述,在接收302写入请求以及更新306写入指针212之前指针的当前值是C,并且接收到N个写入请求的情况下,产生的地址可以是C、C+l、……C+N-1,其中C指向将写入的下一地址。在C指向最近写入的地址的情况下,产生的地址是C+1、C+2、……C+N。地址可以以范围的形式产生,例如数据对<C,N-1>或<C+1,N>,其中一个值是开始地址并且另一值是从开始地址的偏移。
方法300可以进一步包含将包含在步骤308处产生的地址的一个或多个写入命令输出310到存储器子***204,写入命令有效地根据在存储器装置104中的一个存储器装置中的一个或多个写入命令中的地址处的写入请求调用数据的写入。如上所述,可以针对接收到302的每个写入请求输出310N个写入命令,并且每个写入命令包含在步骤308处产生的地址中的一个。或者,可以输出310单个写入命令,所述写入命令指定在步骤308处产生的所有N个地址或跨越所有N个地址的一系列地址(例如,开始地址和偏移)。写入命令随后由所述写入命令被寻址到的存储器装置104执行,方法结束。
参考图3B,响应于接收引用缓冲器的读取请求,所说明的方法312可以通过硬件缓冲器控制器208执行,所述读取请求包含缓冲器的标识符,但不包含实际上存储缓冲器的条目的存储器装置104中的地址。
方法312包含接收314对缓冲器的一个或多个读取请求,以及求和316读取请求以确定在某一时间段期间针对缓冲器接收到的读取请求的数目。例如,可以在步骤316处对处理装置102、总线112、存储器装置104或硬件缓冲器208的一个时钟循环期间接收到的读取请求的数目进行计数。如上所述,多个缓冲器可以通过硬件缓冲器控制器208实施,使得针对在时钟循环期间接收写入请求的每个缓冲器执行方法312的步骤。
方法312可以包含更新318读取指针210和读取计数器226中的一个或两个。在一些实施例中,仅这些值中的一个用于表示缓冲器的状态。例如,硬件缓冲器控制器208可以仅存储写入指针212和读取指针210,以确定缓冲器而不是计数器的状态。在其它实施例中,仅使用计数器226、228,并且从计数器以及缓冲器的开始地址确定地址。更新318指针210和计数器226可以包含使其中的每一个递增在时钟循环期间接收到的写入请求的数目。
方法312进一步包含基于读取指针210的状态以及接收到314的读取请求的数目产生320地址。如上所述,在接收314读取请求以及更新318读取指针210之前指针的当前值是C,并且接收到N个读取请求的情况下,产生的地址可以是C、C+l、……C+N-1,其中C指向将写入的下一地址。在C指向最近读取的地址的情况下,产生的地址是C+1、C+2、……C+N。地址可以以范围的形式产生,例如数据对<C,N-1>或<C+1,N>,其中一个值是开始地址并且另一值是从开始地址的偏移。
方法312可以进一步包括将包含在步骤308处产生的地址的一个或多个读取命令输出322到存储器子***204,读取命令有效地在从存储器装置104中的一个产生的一个或多个写入命令中的地址处调用数据的检索,并且将此数据返回到处理装置102。如上所述,可以针对接收到302的每个读取请求输出322N个读取命令,并且每个读取命令包含在步骤308处产生的地址中的一个。或者,可以输出322单个读取命令,所述读取命令指定在步骤308处产生的所有N个地址或跨越所有N个地址的一系列地址(例如,开始地址和偏移)。读取命令随后由所述读取命令被寻址到的存储器装置104执行,方法结束。
方法300和312可以基本上同时执行。例如,分离的读取和写入管线可以通过硬件缓冲器控制器208实施,使得可以针对读取请求和写入请求两者同时产生存储器访问命令。从步骤310和322产生的存储器访问命令可以通过存储器子***204根据本领域中已知的任何命令执行方案按顺序缓冲和执行。
参考图4,所说明的方法400可以通过硬件缓冲器控制器208执行,以便检测缓冲器的满、接近满、空和接近空情况。方法400可以针对由硬件缓冲器控制器208控制的每个缓冲器,下文称为“缓冲器”执行。
方法400可以包含或前面有以下步骤:在时钟循环期间接收302写入指令,以及如上文相对于图3A所描述,求和304在时钟循环期间接收到的写入指令。求和步骤304可以针对方法300和方法400两者执行一次或可以针对每个方法单独地执行。
方法400还可以包含或前面有以下步骤:在时钟循环期间接收314写入指令,以及如上文相对于图3B所描述,求和316在时钟循环期间接收到的写入指令。求和步骤316可以针对方法312和方法400两者执行一次或可以针对每个方法单独地执行。
方法400可以进一步包含更新402写入计数器238以及更新404读取计数器236。如上所述,这可以包含将在时钟循环期间接收到的写入请求的数目添加到写入计数器238,以及将在时钟循环期间接收到的读取请求的数目添加到读取计数器236。
方法400可以进一步包含计算406写入计数器与读取计数器之间的差。在不存在读取超过写入的下溢条件的情况下,写入计数器与读取计数器之间的差将为正或零。在一些实施例中,为了避免超过由实施步骤406的差函数的电路以及存储计数器236、238的寄存器可处理的最大数,对于方法400的每次迭代,写入计数器可以设定成等于差的值并且读取指针可以设定成等于零。
方法400可以包含相对于一个或多个阈值评估在步骤406处计算出的差。例如,如果得出408差大于接近满阈值,则可以产生410接近满事件。如果得出412差小于接近空阈值,则可以产生414接近空事件。如果得出416差大于缓冲器的大小,则可以产生418缓冲器满事件。如果得出420差为零,则可以产生缓冲器空事件。步骤408到420的阈值可以使用并行管线按任何次序或同时评估。
接近满和接近空阈值可以是在执行方法400之前硬接线或编程的预定值。在一些实施例中,接近满和接近空阈值可以是执行线程的数目以及当发现存在接近满或接近空条件时与可以响应于事件阻塞线程之间的延迟的函数。例如,在被编程为发出写入请求的M个线程正执行并且响应于事件至少需要Q个时钟循环来阻塞线程的情况下,接近满阈值可以设定成等于S-Q*M-R,其中S是缓冲器的大小并且R是大于零的值,以便保证不出现上溢。以此方式,如果检测到接近满条件,则在接近满事件导致可以发布写入请求的M个线程阻塞之前不出现缓冲器上溢。
通过类似方式,在被编程为发布读取请求的M个线程正执行的情况下,接近空阈值可以设定成等于Q*M+R,其中S是缓冲器的大小并且R是大于零的值,以便保证不出现下溢。以此方式,如果检测到接近空条件,则在接近空事件导致可以发布读取请求的M个线程阻塞之前不出现缓冲器下溢。
在不脱离本发明的精神或基本特征的情况下,可以其它特定形式实施本发明。所描述的实施例应视为在所有方面均仅为说明性而非限制性的。因此,本发明的范围由所附权利要求书而不是由前述描述指示。在权利要求书等效物的含义和范围内的所有变化均涵盖在权利要求书的范围内。
Claims (20)
1.一种方法,包括:
提供存储可执行数据的存储器装置;
提供处理装置,所述处理装置连接到所述存储器装置并且可用于检索和执行所述可执行数据;
通过所述处理装置将所述存储器装置的一部分分配为缓冲器;
通过所述处理装置开始硬件缓冲器控制器的状态以引用所述缓冲器;
通过所述处理装置执行应用程序,执行所述应用程序包含执行访问所述缓冲器的请求,所述请求仅引用所述硬件缓冲器控制器并且不包含所述缓冲器内的任何地址;
响应于所述请求,通过所述处理装置将所述请求输入到所述硬件缓冲器控制器;
对于每个请求,通过以下操作由所述硬件缓冲器控制器处理所述请求:
基于所述硬件缓冲器控制器的所述状态产生所述缓冲器内的地址;
将包含所述地址的存储器访问指令输出到所述存储器装置;以及
更新所述硬件缓冲器控制器的所述状态。
2.根据权利要求1所述的方法,其中所述硬件缓冲器控制器实施先进先出(FIFO)缓冲器。
3.根据权利要求2所述的方法,其中所述硬件缓冲器控制器的所述状态包含读取指针和写入指针;
其中更新所述硬件缓冲器控制器的所述状态包括:对于所述请求中的每个写入请求,使所述写入指针递增;
其中更新所述硬件缓冲器控制器的所述状态包括:对于所述请求中的每个读取请求,使所述读取指针递增。
4.根据权利要求3所述的方法,其中使所述写入指针递增包括
确定在时钟循环期间接收到的多个写入请求的数目;以及
使所述写入指针递增所述多个写入请求的所述数目;并且
其中使所述写入指针递增包括确定在所述时钟循环期间接收到的多个读取请求的数目,以及使所述读取指针递增所述多个读取请求的所述数目。
5.根据权利要求3所述的方法,其中基于所述硬件缓冲器控制器的所述状态产生缓冲器内的地址包括:对于所述请求中的每个写入请求,输出所述写入指针的当前值;
其中基于所述硬件缓冲器的所述状态产生所述缓冲器内的所述地址包括:对于所述请求中的每个读取请求,输出所述读取指针的当前值。
6.根据权利要求5所述的方法,其进一步包括:
通过处理装置计算一定量的所述写入请求与一定量的所述读取请求之间的差值;
通过所述处理装置确定所述差值小于第一阈值且非零;
响应于确定所述差值小于第一阈值且非零,通过所述处理装置输出指示所述缓冲器接近空的事件;
响应于指示所述缓冲器接近空的所述事件,通过所述处理装置阻止由所述处理装置执行的一个或多个执行线程产生读取请求。
7.根据权利要求5所述的方法,其进一步包括:
通过所述硬件缓冲器控制器计算一定量的所述写入请求与一定量的所述读取请求之间的差;
通过所述硬件缓冲器控制器确定所述差值大于第一阈值;
响应于确定所述差值大于第一阈值,通过所述硬件缓冲器控制器输出指示所述缓冲器接近满的事件;
响应于指示所述缓冲器接近满的所述事件,通过所述处理装置阻止由所述处理装置执行的一个或多个执行线程产生写入请求。
8.根据权利要求1所述的方法,其中通过硬件软件组件处理所述请求,其进一步包括:
集中所述请求中的多个写入请求;
将集中写入指令传输到所述存储器装置,所述集中写入指令包含对应于所述多个写入请求的所述缓冲器内的多个地址;
集中所述请求中的多个读取请求;以及
将集中读取指令传输到所述存储器装置,所述集中读取指令包含对应于所述多个读取请求的所述缓冲器内的多个地址。
9.根据权利要求8所述的方法,其中所述多个写入请求由多个执行线程以重叠方式发布,使得在所述请求中的其它请求输入到所述硬件缓冲器控制器之前接收所述写入请求中的至少一个写入请求。
10.根据权利要求9所述的方法,其进一步包括:
通过处理装置评估所述硬件缓冲器控制器的状态;
通过所述处理装置确定所述硬件缓冲器控制器的所述状态满足阈值条件;
响应于确定所述硬件缓冲器控制器的所述状态满足所述阈值条件,通过所述处理装置阻止所述多个执行线程发布引用所述硬件缓冲器控制器的额外请求。
11.一种***,包括:
存储器装置,用于存储可执行数据;
处理装置,所述处理装置连接到所述存储器装置并且可用于检索和执行所述可执行数据;
硬件缓冲器控制器,所述硬件缓冲器控制器连接到所述处理装置和所述存储器装置,所述硬件缓冲器控制器被编程为--
从所述处理装置接收不包含用于所述存储器装置中的任何存储位置的任何地址的存储器访问请求;
基于所述硬件缓冲器控制器的状态产生分配给缓冲器的所述存储器装置的区域内的所产生地址;
将包含所述所产生地址的存储器访问指令输出到所述存储器装置;以及
更新所述硬件缓冲器控制器的所述状态。
12.根据权利要求11所述的***,其中所述硬件缓冲器控制器的所述状态实施先进先出(FIFO)缓冲器。
13.根据权利要求12所述的***,其中所述硬件缓冲器控制器进一步被编程为:
对于请求中的每个写入请求,通过使写入指针递增更新所述硬件缓冲器控制器的所述状态;
其中更新所述硬件缓冲器控制器的所述状态包括:对于所述请求中的每个读取请求,使读取指针递增。
14.根据权利要求13所述的***,其中所述硬件缓冲器控制器进一步被编程为通过确定在时钟循环期间接收到的多个写入请求的数目使所述写入指针递增,以及使所述写入指针递增所述多个写入请求的所述数目;以及
其中所述硬件缓冲器控制器进一步被编程为通过确定在所述时钟循环期间接收到的多个读取请求的数目使所述读取指针递增,以及使所述读取指针递增所述多个读取请求的所述数目。
15.根据权利要求13所述的***,其中所述硬件缓冲器控制器进一步被编程为通过针对所述请求中的每个写入请求输出所述写入指针的当前值,基于所述硬件缓冲器控制器的所述状态产生分配给缓冲器的存储器装置的区域内的所产生地址;
其中所述硬件缓冲器控制器进一步被编程为通过针对所述请求中的每个读取请求输出所述读取指针的当前值,基于所述硬件缓冲器控制器的所述状态产生分配给所述缓冲器的所述存储器装置的所述区域内的所述所产生地址。
16.根据权利要求5所述的***,其中所述硬件缓冲器控制器进一步被编程为:
计算一定量的所述写入请求与一定量的所述读取请求之间的差值;以及
如果所述差值小于第一阈值且非零,则输出指示所述缓冲器接近空的事件;以及
其中处理装置进一步被配置成响应于指示所述缓冲器接近空的所述事件,阻止由所述处理装置执行的一个或多个执行线程产生读取请求。
17.根据权利要求16所述的方法,其中所述硬件缓冲器控制器进一步被编程为:
计算一定量的所述写入请求与一定量的所述读取请求之间的差值;以及
如果所述差值大于第二阈值,则通过所述处理装置输出指示所述缓冲器接近满的事件;以及
其中所述处理装置进一步被编程为响应于指示所述缓冲器接近满的所述事件,阻止由所述处理装置执行的一个或多个执行线程产生写入请求。
18.根据权利要求11所述的***,其中硬件软件组件进一步被编程为通过以下操作处理所述请求:
集中所述请求中的多个写入请求;
将集中写入指令传输到所述存储器装置,所述集中写入指令包含对应于所述多个写入请求的所述缓冲器内的多个地址;
集中所述请求中的多个读取请求;以及
将集中读取指令传输到所述存储器装置,所述集中读取指令包含对应于所述多个读取请求的所述缓冲器内的多个地址。
19.根据权利要求11所述的***,其中硬件软件组件被编程为以重叠方式从由所述处理装置执行的多个执行线程接收所述多个写入请求,使得在将所述请求中的其它请求输入到所述硬件缓冲器控制器之前接收所述写入请求中的至少一个写入请求。
20.根据权利要求19所述的***,其中所述硬件缓冲器控制器进一步被编程为:
评估所述硬件缓冲器控制器的所述状态;
如果所述硬件缓冲器控制器的所述状态满足阈值条件,则通过所述处理装置调用阻止所述多个执行线程发布引用所述硬件缓冲器控制器的额外请求。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/966,631 | 2015-12-11 | ||
US14/966,631 US10585623B2 (en) | 2015-12-11 | 2015-12-11 | Software defined FIFO buffer for multithreaded access |
PCT/US2016/066106 WO2017100748A1 (en) | 2015-12-11 | 2016-12-12 | Software defined fifo buffer for multithreaded access |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108292162A true CN108292162A (zh) | 2018-07-17 |
CN108292162B CN108292162B (zh) | 2021-08-31 |
Family
ID=59013408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680070274.5A Active CN108292162B (zh) | 2015-12-11 | 2016-12-12 | 用于多线程访问的软件定义fifo缓冲器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10585623B2 (zh) |
EP (1) | EP3387513A4 (zh) |
JP (1) | JP6884149B2 (zh) |
KR (1) | KR102683211B1 (zh) |
CN (1) | CN108292162B (zh) |
WO (1) | WO2017100748A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459400A (zh) * | 2019-01-18 | 2020-07-28 | 香港商希瑞科技股份有限公司 | 在存储服务器中进行基于管线的存取管理的方法及设备 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10095408B2 (en) * | 2017-03-10 | 2018-10-09 | Microsoft Technology Licensing, Llc | Reducing negative effects of insufficient data throughput for real-time processing |
CN108038006B (zh) * | 2017-11-14 | 2022-02-08 | 北京小鸟看看科技有限公司 | 头戴显示设备的控制方法、设备及*** |
KR102421103B1 (ko) * | 2018-01-04 | 2022-07-14 | 에스케이하이닉스 주식회사 | 컨트롤러, 이를 포함하는 메모리 시스템 및 그것들의 동작 방법 |
US10713746B2 (en) | 2018-01-29 | 2020-07-14 | Microsoft Technology Licensing, Llc | FIFO queue, memory resource, and task management for graphics processing |
US11068308B2 (en) * | 2018-03-14 | 2021-07-20 | Texas Instruments Incorporated | Thread scheduling for multithreaded data processing environments |
US10719268B2 (en) | 2018-06-29 | 2020-07-21 | Microsoft Technology Licensing, Llc | Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor |
TWI769080B (zh) * | 2021-09-17 | 2022-06-21 | 瑞昱半導體股份有限公司 | 用於同步動態隨機存取記憶體之控制模組及其控制方法 |
US20240220156A1 (en) * | 2022-12-29 | 2024-07-04 | SK Hynix NAND Product Solutions Corp. (dba Solidigm) | Methods and systems for software based prefetching for low buffer depth sequential read traffic |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978868A (en) * | 1997-08-28 | 1999-11-02 | Cypress Semiconductor Corp. | System for generating buffer status flags by comparing read and write pointers and determining direction of progression of read pointer with respect to write pointer |
CN1439966A (zh) * | 2003-03-28 | 2003-09-03 | 北京港湾网络有限公司 | 多通道先进先出数据缓冲存储装置 |
US20030182517A1 (en) * | 2002-03-20 | 2003-09-25 | Mark Gooch | Method and system for buffering multiple requests from multiple devices to a memory |
US20050007374A1 (en) * | 1999-10-18 | 2005-01-13 | S3 Graphics Co., Ltd. | Non-flushing atomic operation in a burst mode transfer data storage access environment |
US20070143490A1 (en) * | 2003-04-17 | 2007-06-21 | Gilles Gallou | Data requesting and transmitting devices and processes |
US20080005401A1 (en) * | 2006-04-11 | 2008-01-03 | Holley Roderick Ii | Buffer controller, codec and methods for use therewith |
US20080270744A1 (en) * | 2007-04-27 | 2008-10-30 | Yoshinobu Hashimoto | Buffer memory sharing apparatus |
CN101661386A (zh) * | 2009-09-24 | 2010-03-03 | 成都市华为赛门铁克科技有限公司 | 多硬件线程处理器及其业务处理方法 |
US20110320680A1 (en) * | 2010-06-28 | 2011-12-29 | Avaya Inc. | Method and Apparatus for Efficient Memory Bank Utilization in Multi-Threaded Packet Processors |
CN102388372A (zh) * | 2009-04-07 | 2012-03-21 | 想象技术有限公司 | 保证数据缓存与主存储器之间的一致性 |
CN103106122A (zh) * | 2011-08-08 | 2013-05-15 | Arm有限公司 | 针对同时待处理数据访问请求的数据冲突处理 |
CN103294753A (zh) * | 2012-01-30 | 2013-09-11 | 辉达公司 | 无锁先入先出 |
US9098462B1 (en) * | 2010-09-14 | 2015-08-04 | The Boeing Company | Communications via shared memory |
CN105027091A (zh) * | 2013-03-13 | 2015-11-04 | 英派尔科技开发有限公司 | 内存分配加速器 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07118187B2 (ja) | 1985-05-27 | 1995-12-18 | 松下電器産業株式会社 | 先入れ先出し記憶装置 |
US4894797A (en) | 1986-11-17 | 1990-01-16 | Amp Incorporated | FIFO data storage system using PLA controlled multiplexer for concurrent reading and writing of registers by different controllers |
US5581705A (en) | 1993-12-13 | 1996-12-03 | Cray Research, Inc. | Messaging facility with hardware tail pointer and software implemented head pointer message queue for distributed memory massively parallel processing system |
KR0139887B1 (ko) | 1994-02-17 | 1999-02-18 | 김광호 | 영상메모리의 데이타 혼선방지회로 |
US6115761A (en) | 1997-05-30 | 2000-09-05 | Lsi Logic Corporation | First-In-First-Out (FIFO) memories having dual descriptors and credit passing for efficient access in a multi-processor system environment |
US6044030A (en) | 1998-12-21 | 2000-03-28 | Philips Electronics North America Corporation | FIFO unit with single pointer |
US20040098519A1 (en) | 2001-03-16 | 2004-05-20 | Hugo Cheung | Method and device for providing high data rate for a serial peripheral interface |
US7181563B2 (en) | 2003-10-23 | 2007-02-20 | Lsi Logic Corporation | FIFO memory with single port memory modules for allowing simultaneous read and write operations |
US8135915B2 (en) | 2004-03-22 | 2012-03-13 | International Business Machines Corporation | Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator |
US6956776B1 (en) * | 2004-05-04 | 2005-10-18 | Xilinx, Inc. | Almost full, almost empty memory system |
EP1811370A2 (en) | 2005-12-30 | 2007-07-25 | STMicroelectronics Pvt. Ltd. | A first-in first-out (FIFO) memory architecture providing multiport functionality |
US20090132979A1 (en) | 2007-11-19 | 2009-05-21 | Simon Joshua Waters | Dynamic pointer dereferencing and conversion to static hardware |
JP5842206B2 (ja) * | 2012-01-27 | 2016-01-13 | 株式会社トプスシステムズ | プロセッサ・コア、およびマルチコア・プロセッサ・システム |
US9542227B2 (en) | 2012-01-30 | 2017-01-10 | Nvidia Corporation | Parallel dynamic memory allocation using a lock-free FIFO |
US9639371B2 (en) | 2013-01-29 | 2017-05-02 | Advanced Micro Devices, Inc. | Solution to divergent branches in a SIMD core using hardware pointers |
US9672008B2 (en) * | 2014-11-24 | 2017-06-06 | Nvidia Corporation | Pausible bisynchronous FIFO |
-
2015
- 2015-12-11 US US14/966,631 patent/US10585623B2/en active Active
-
2016
- 2016-12-12 KR KR1020187018862A patent/KR102683211B1/ko active IP Right Grant
- 2016-12-12 EP EP16874038.9A patent/EP3387513A4/en active Pending
- 2016-12-12 CN CN201680070274.5A patent/CN108292162B/zh active Active
- 2016-12-12 JP JP2018529209A patent/JP6884149B2/ja active Active
- 2016-12-12 WO PCT/US2016/066106 patent/WO2017100748A1/en active Application Filing
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978868A (en) * | 1997-08-28 | 1999-11-02 | Cypress Semiconductor Corp. | System for generating buffer status flags by comparing read and write pointers and determining direction of progression of read pointer with respect to write pointer |
US20050007374A1 (en) * | 1999-10-18 | 2005-01-13 | S3 Graphics Co., Ltd. | Non-flushing atomic operation in a burst mode transfer data storage access environment |
US20030182517A1 (en) * | 2002-03-20 | 2003-09-25 | Mark Gooch | Method and system for buffering multiple requests from multiple devices to a memory |
CN1439966A (zh) * | 2003-03-28 | 2003-09-03 | 北京港湾网络有限公司 | 多通道先进先出数据缓冲存储装置 |
US20070143490A1 (en) * | 2003-04-17 | 2007-06-21 | Gilles Gallou | Data requesting and transmitting devices and processes |
US20080005401A1 (en) * | 2006-04-11 | 2008-01-03 | Holley Roderick Ii | Buffer controller, codec and methods for use therewith |
US20080270744A1 (en) * | 2007-04-27 | 2008-10-30 | Yoshinobu Hashimoto | Buffer memory sharing apparatus |
CN102388372A (zh) * | 2009-04-07 | 2012-03-21 | 想象技术有限公司 | 保证数据缓存与主存储器之间的一致性 |
CN101661386A (zh) * | 2009-09-24 | 2010-03-03 | 成都市华为赛门铁克科技有限公司 | 多硬件线程处理器及其业务处理方法 |
US20110320680A1 (en) * | 2010-06-28 | 2011-12-29 | Avaya Inc. | Method and Apparatus for Efficient Memory Bank Utilization in Multi-Threaded Packet Processors |
US9098462B1 (en) * | 2010-09-14 | 2015-08-04 | The Boeing Company | Communications via shared memory |
CN103106122A (zh) * | 2011-08-08 | 2013-05-15 | Arm有限公司 | 针对同时待处理数据访问请求的数据冲突处理 |
CN103294753A (zh) * | 2012-01-30 | 2013-09-11 | 辉达公司 | 无锁先入先出 |
CN105027091A (zh) * | 2013-03-13 | 2015-11-04 | 英派尔科技开发有限公司 | 内存分配加速器 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459400A (zh) * | 2019-01-18 | 2020-07-28 | 香港商希瑞科技股份有限公司 | 在存储服务器中进行基于管线的存取管理的方法及设备 |
CN111459400B (zh) * | 2019-01-18 | 2023-03-28 | 香港商希瑞科技股份有限公司 | 在存储服务器中进行基于管线的存取管理的方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
JP2019502201A (ja) | 2019-01-24 |
KR20180107091A (ko) | 2018-10-01 |
KR102683211B1 (ko) | 2024-07-08 |
CN108292162B (zh) | 2021-08-31 |
US10585623B2 (en) | 2020-03-10 |
US20170168755A1 (en) | 2017-06-15 |
EP3387513A1 (en) | 2018-10-17 |
EP3387513A4 (en) | 2019-07-10 |
JP6884149B2 (ja) | 2021-06-09 |
WO2017100748A1 (en) | 2017-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108292162A (zh) | 用于多线程访问的软件定义fifo缓冲器 | |
KR102380670B1 (ko) | 메모리 제어기에서의 세분화된 대역폭 프로비저닝 | |
EP3398075B1 (en) | Transfer descriptor for memory access commands | |
CN107395665A (zh) | 一种区块链业务受理及业务共识方法及装置 | |
CN111324427B (zh) | 一种基于dsp的任务调度方法及装置 | |
US11138034B2 (en) | Method and apparatus for collecting information, and method and apparatus for releasing memory | |
US20200117623A1 (en) | Adaptive Interrupt Coalescing | |
CN110020383B (zh) | 一种页面数据请求处理方法及装置 | |
CN110209493A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN111553699A (zh) | 一种资源调度方法及装置 | |
CN114416178A (zh) | 数据访问方法、装置及非临时性计算机可读存储介质 | |
CN112615795A (zh) | 流量控制方法、装置、电子设备、存储介质及产品 | |
CN113238852B (zh) | 一种任务分配方法、装置、电子设备及存储介质 | |
CN110727405A (zh) | 数据处理方法、装置、电子设备及计算机可读介质 | |
CN108292230A (zh) | 硬件访问计数器以及用于协调多线程处理的事件产生 | |
CN112306901B (zh) | 基于分层存储***的刷盘方法、装置、电子设备及介质 | |
CN114610575B (zh) | 应用于计算分支的更新峰值的方法、装置、设备和介质 | |
US20240256352A1 (en) | System and method for managing data retention in distributed systems | |
US20230333769A1 (en) | Shared memory protection method for securing mmio commands | |
CN108090029A (zh) | 矩阵求逆中的算粒调度装置 | |
CN113254180B (zh) | 一种数据匹配方法、装置、电子设备及存储介质 | |
CN111913650B (zh) | 一种确定预测窗口期的方法及装置 | |
CN118192878A (zh) | 一种数据删除方法及装置 | |
CN114331804A (zh) | 资源处理方法、装置、设备及存储介质 | |
CN117931689A (zh) | 数据处理方法、装置、芯片、设备和存储介质 |
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 |