CN109219805B - 一种多核系统内存访问方法、相关装置、系统及存储介质 - Google Patents
一种多核系统内存访问方法、相关装置、系统及存储介质 Download PDFInfo
- Publication number
- CN109219805B CN109219805B CN201780034087.6A CN201780034087A CN109219805B CN 109219805 B CN109219805 B CN 109219805B CN 201780034087 A CN201780034087 A CN 201780034087A CN 109219805 B CN109219805 B CN 109219805B
- Authority
- CN
- China
- Prior art keywords
- data
- core
- cache
- memory
- instruction
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 310
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000003860 storage Methods 0.000 title claims abstract description 32
- 238000012545 processing Methods 0.000 claims abstract description 38
- 230000008054 signal transmission Effects 0.000 claims description 2
- 238000004364 calculation method Methods 0.000 description 80
- 238000010586 diagram Methods 0.000 description 26
- 238000004891 communication Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 8
- 230000003287 optical effect Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
一种多核系统内存访问方法、相关装置、系统及存储介质,预取模块用于向内存控制器发送第一预取指令,第一预取指令中包含第一内核的标识;内存控制器用于根据第一预取指令,从系统内存中获取第一数据,并向第一内核发送第一反馈消息,第一反馈消息中携带第一数据;第一内核用于将第一数据写入第一内核的核内缓存。由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
Description
技术领域
本申请涉及无线通信技术领域,尤其涉及一种多核系统内存访问方法、相关装置、系统及存储介质。
背景技术
随着计算机技术的发展,多核系统越来越广泛的被应用到产品中,比如多核处理器已广泛应用于服务器、笔记本、游戏平台以及高性能多媒体应用等多个领域。另一方面,随着信息技术的发展,信息系统所产生的数据呈现规模上的爆炸式增长和模式上的高度复杂化,世界已进入大数据(Big Data)时代。多核系统架构的基于线程、任务级并行的高并发度是当前海量数据的处理的主要解决手段之一。然而,处理器工作效率和内存系统工作效率的提升速度并不相同。其中,处理器的主频每年以60%的速度迅速增长,而内存芯片工作频率平均每年只有10%的提高,可见,随着多核系统的发展,访存性能逐渐成为影响处理器性能的重要因素。
核内缓存,通常由高速但昂贵的存储模块构成,用于处理器计算时的数据高速存取。其工作原理是当处理器要读取一个数据时,首先从核内缓存中查找,找到就立即读取并送给处理器处理;没有找到,就用相对大的访问时间开销从内存中读取并送给处理器处理,同时把这个数据所在的数据块调入核内缓存中,可以使得以后对整块数据的读取都从核内缓存中进行,不必再调用内存。
为了提高处理器速率,通常并发多个线程,将待处理数据预取至核内缓存中,从而使处理器直接从核内缓存中读取数据,从而降低数据的访问时间开销。举例来说,对于仅仅根据单一元素进行计算的第一操作,比如:
for(i=0;i<256;i++)
B[i]=A[i]*8;
在上述第一操作中,可以将A[i]数列分为多块,将每块数据对应预取至多核系统的每个内核的核内缓存中,从而提高多核系统下的计算速率。
但是,对于需要结合多个元素进行计算的第二操作,比如:
for(i=0;i<256;i++)
B[i]=A[i+1]+A[i];
在上述第二操作中,若将A[i]数列仍分为多块,将每块数据对应预取至多核系统的每个核内缓存中,则当计算到一些边界数据时,则会出现一些问题。比如第一核内缓存中存储A[0]至A[3];第二核内缓存中存储A[4]至A[7]。当计算B[3]时,需要读取A[3]和A[4]。
现有技术中,各个内核都是独立操作的,举个例子,第一内核通过计算映射的方式确定出需要放到第一内核的第一核内缓存中的数据时,第一内核产生相应的内存访问请求,第一内核向内存控制器发送内存访问请求,从而主动将数据从系统内存中预取到第一核内缓存中。相应地,第二内核通过计算映射的方式确定出需要放到第二内核的第二核内缓存中的数据时,将需要预取的数据主动预取到第二内核的第二核内缓存中。在这个过程中,内核通过计算映射的方式确定哪一部分的数据放到自己的核内缓存上,是一个独立计算的过程,其它内核无法知道哪些数据放到了该内核的核内缓存中。
也就是说,现有技术中,在上述示例中,当第一内核需要读取A[3]和A[4]进行计算时,第一内核无法知道A[4]存储在哪个核内缓存上的。此时,第一内核需要重新从内存中将数据A[4]预取至第一核内缓存中。可见,现有技术中内存访问方法中各个内核独立运作,从而可造成重复预取数据的情况,增加了数据整个处理过程的时间开销。
发明内容
本申请实施例提供一种多核系统内存访问方法、相关装置、系统及存储介质,用于通过重新构造预取指令从而对预取数据有全局的掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
第一方面,本申请实施例提供一种多核系统,多核系统包括预取模块、内存控制器、系统内存和多个内核。预取模块用于向内存控制器发送第一预取指令,第一预取指令中包含第一内核的标识;内存控制器用于:根据第一预取指令,从系统内存中获取第一数据,并向第一内核发送第一反馈消息,第一反馈消息中携带第一数据;第一内核用于:将第一数据写入第一内核的核内缓存。由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
一种可选地实施方式中,预取指令中还包括该预取指令需要预取的数据的数据长度,比如第一预取指令中还包含第一数据的数据长度,从而使根据该第一预取指令进行预取第一数据时,可以突破现有技术中每次预取一个cacheline长度的数据的规定,本申请实施例中由于明确指示了第一数据的数据长度,因此可以预取大于或小于一个cacheline长度的的数据。
另一方面,可选地,内存控制器接收到第一预取指令后,还用于将内存通道设置为忙碌状态;在根据第一预取指令,从系统内存中获取数据长度的第一数据后,将内存通道设置为空闲状态。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。具体设置内存通道的方式有多种,比如通过burst_mode位的比特值来设置,当该burst_mode位的比特值为0时,表示内存通道为空闲,当该burst_mode位的比特值为1时,表示内存通道为忙碌。
为了进一步提高对数据的全局掌控性,更加准确的知道预取数据的存储位置,可选地,第一预取指令中还包含缓存bank标识,第一反馈消息中还包含缓存bank标识;第一内核用于:将第一数据写入缓存bank标识指示的缓存bank。
本申请实施例,由于通过预取指令将系统内存中的数据对应存储至各个核内缓存中,且预取指令中包括内核的标识,因此可以从全局上知道哪个数据存储至哪个内核上,因此可以根据多个内核上的数据进行计算操作,另外,在多核系统中,在进行N论计算操作时,可以进行当前轮的计算,另外并行预取下一轮中需要用到的新数据,从而提高数据处理速度。可选地,所述多核处理器用于根据所述第一数据进行计算操作;所述多核处理器根据所述第一数据进行计算操作时,所述预取模块还用于向内存控制器发送第二预取指令,所述第二预取指令中包含第二内核的标识,所述第二预取指令用于将所述系统缓存中的第二数据预取至所述第二内核的核内缓存;所述多核处理器用于进行N轮计算操作,在所述多核处理器的下一轮计算操作中需要使用所述第一数据和所述第二数据,其中N为大于1的整数。
具体预取第二数据的过程与预取第一数据的过程类似,具体来说,预取模块还用于:向内存控制器发送第二预取指令,第二预取指令中包含第二内核的标识;内存控制器还用于:根据第二预取指令,从系统内存中获取第二数据,并向第二内核发送第二反馈消息,第二反馈消息中携带第二数据;第二内核用于:将第二数据写入第二内核的核内缓存。
另一种可选地实施例中,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;若多核处理器需根据第一数据中的连续P个数据元素进行运算操作,则:第一内核还用于:将P个数据元素分别写入P个FIFO寄存器;多核处理器还用于:通过并行读取P个FIFO寄存器中不同的数据位,从而获取第一数据中的连续P个数据元素,并根据P个数据元素进行运算操作。如此,当需要从一个内核的核内缓存中读取多个数据元素时,无需生成多个读取命令分别读取多个数据元素,而是仅生成一条读取指令,从而根据该读取指令分别从P个FIFO寄存器中读取该多个数据元素,进一步节省了数据处理时间的开销。
第二方面,本申请实施例提供一种多核系统的内存访问方法,所述多核系统包含预取模块和多个内核,所述方法包括:预取模块向内存控制器发送预取指令,所述预取指令中包含内核的标识;所述内核接收来自所述内存控制器的反馈消息,所述反馈消息包含预取数据;所述内核将所述预取数据写入所述内核的核内缓存。由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
可选地,预取指令中还包含预取数据的数据长度。可选地,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识;内核将预取数据写入内核的核内缓存,包括:内核将预取数据写入缓存bank标识指示的缓存bank。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。
可选地,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;内核将预取数据写入内核的核内缓存之后,还包括:内核将连续P个数据元素分别写入P个FIFO寄存器;其中,P个FIFO寄存器用于使多核处理器通过并行读取P个FIFO寄存器中不同的数据位,从而获取P个数据元素,并根据P个数据元素进行运算操作。如此,当需要从一个内核的核内缓存中读取多个数据元素时,无需生成多个读取命令分别读取多个数据元素,而是仅生成一条读取指令,从而根据该读取指令分别从P个FIFO寄存器中读取该多个数据元素,进一步节省了数据处理时间的开销。
第三方面,本申请实施例提供一种多核系统的内存访问方法,方法包括:内存控制器接收预取模块发送的预取指令,预取指令中包含内核的标识;内存控制器根据预取指令,从系统内存中获取预取数据;内存控制器向内核发送反馈消息,反馈消息中携带预取数据。
可选地,预取指令中还包含预取数据的数据长度。由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
一种可选地实施方案中,内存控制器根据预取指令,从系统内存中获取预取数据,包括:内存控制器将内存通道设置为忙碌状态;内存控制器根据预取指令,从系统内存中获取预取数据;并在获取数据长度的预取数据后,将内存通道设置为空闲状态。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。
为了进一步提高对数据的全局掌控性,更加准确的知道预取数据的存储位置,可选地,可选地,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识;缓存bank标识用于使内核将预取数据写入缓存bank标识指示的缓存bank。每个核内缓存中都包括至少一个缓存bank。
第四方面,本申请实施例提供一种多核处理器,所述多核处理器包括多个内核,其中每个内核包括存储器、收发器和处理器,其中:存储器用于存储指令;处理器用于根据执行存储器存储的指令,并控制收发器进行信号接收和信号发送,当处理器执行存储器存储的指令时,内核用于执行上述第二方面或第二方面中任一种方法。
第五方面,本申请实施例提供一种内存控制器,内存控制器包括存储器、收发器和处理器,其中:存储器用于存储指令;处理器用于根据执行存储器存储的指令,并控制收发器进行信号接收和信号发送,当处理器执行存储器存储的指令时,内存控制器用于执行上述第三方面或第三方面中任一种方法。
第六方面,本申请实施例提供一种多核处理器,用于实现上述第二方面或第二方面中的任意一种方法,包括相应的功能模块,分别用于实现以上方法中的步骤。
第七方面,本申请实施例提供一种内存控制器,用于实现上述第三方面或第三方面中的任意一种的方法,包括相应的功能模块,分别用于实现以上方法中的步骤。
第八方面,本申请实施例提供一种计算机存储介质,计算机存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第二方面或第二方面的任意可能的实现方式中的方法。
第九方面,本申请实施例提供一种计算机存储介质,计算机存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第三方面或第三方面的任意可能的实现方式中的方法。
第十方面,本申请实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第二方面或第二方面的任意可能的实现方式中的方法。
第十一方面,本申请实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第三方面或第三方面的任意可能的实现方式中的方法。
本申请实施例中,预取模块用于向内存控制器发送第一预取指令,第一预取指令中包含第一内核的标识;内存控制器用于根据第一预取指令,从系统内存中获取第一数据,并向第一内核发送第一反馈消息,第一反馈消息中携带第一数据;第一内核用于将第一数据写入第一内核的核内缓存。由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
附图说明
图1为本申请实施例提供的一种多核系统架构示意图;
图1a为本申请实施例提供的另一种多核系统架构示意图;
图1b为本申请实施例提供的一种内存控制器的结构示意图;
图1c为本申请实施例提供的一种多核处理器的结构示意图;
图1d为本申请实施例提供的另一种多核处理器的结构示意图;
图2为本申请实施例提供一种多核系统的内存访问方法的流程示意图;
图2a为本申请实施例提供的一种进行第一维度计算操作的方案示意图;
图2b为本申请实施例提供的一种进行第一维度计算操作的方案示意图;
图2c为本申请实施例提供的一种进行第一维度计算操作的方案示意图;
图2d为本申请实施例提供的一种进行第一维度计算操作的方案示意图;
图2e为本申请实施例提供的一种进行第二维度计算操作的示意图;
图2f为本申请实施例提供的一种进行第二维度计算操作的示意图;
图2g为本申请实施例提供的一种进行第二维度计算操作的示意图;
图2h为本申请实施例提供的一种核内缓存连接Q个FIFO寄存器的示意图;
图2i为本申请实施例提供的一种核内缓存连接Q个FIFO寄存器的示意图;
图3为本申请实施例提供的另一种内存控制器的结构示意图;
图4为本申请实施例提供的另一种多核处理器的结构示意图。
具体实施方式
图1示例性示出了本申请实施例提供的一种多核系统架构示意图,如图1所示,本申请实施例中包括系统内存100、内存控制器101、预取模块102、多个内核,以及多个内核中每个内核的核内缓存。多个内核比如图1所示的第一内核106和第二内核107,第一内核中包括核内缓存113,第二内核中包括核内缓存123。系统内存100连接内存控制器101,内存控制器101连接预取模块102。内存控制器连接各个内核,可选地,内存控制器101可以通过第一接口104连接各个内核。本申请实施例中预取模块102可以是多核处理器中的一个内核处理器的模块,也可以是其它处理器中的模块。
本申请实施例提供的系统中,预取模块102用于向内存控制器101发送第一预取指令,第一预取指令中包含第一内核106的标识;内存控制器101用于根据第一预取指令,从系统内存100中获取第一数据,并向第一内核106发送第一反馈消息,第一反馈消息中携带第一数据;第一内核106用于将第一数据写入第一内核106的核内缓存。
由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
一种可选地实施方案中,内存控制器101接收到第一预取指令后,还用于将内存通道设置为忙碌状态;在根据第一预取指令,从系统内存100中获取数据长度的第一数据后,将内存通道设置为空闲状态。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。
一种可选地实施方式中,预取指令中还包括该预取指令需要预取的数据的数据长度,比如第一预取指令中还包含第一数据的数据长度,从而使根据该第一预取指令进行预取第一数据时,可以突破现有技术中每次预取一个cacheline长度的数据的规定,本申请实施例中由于明确指示了第一数据的数据长度,因此可以预取大于或小于一个cacheline长度的的数据。
为了进一步提高对数据的全局掌控性,更加准确的知道预取数据的存储位置,可选地,第一预取指令中还包含缓存bank标识,第一反馈消息中还包含缓存bank标识;第一内核106用于将第一数据写入缓存bank标识指示的缓存bank。每个核内缓存中都包括至少一个缓存bank。具体设置内存通道的方式有多种,比如通过burst_mode位的比特值来设置,当该burst_mode位的比特值为0时,表示内存通道为空闲,当该burst_mode位的比特值为1时,表示内存通道为忙碌。
本申请实施例,由于通过预取指令将系统内存中的数据对应存储至各个核内缓存中,且预取指令中包括内核的标识,因此可以从全局上知道哪个数据存储至哪个内核上,因此可以根据多个内核上的数据进行计算操作,另外,在多核系统中,在进行N论计算操作时,可以进行当前轮的计算,另外并行预取下一轮中需要用到的新数据,从而提高数据处理速度。可选地,所述多核处理器用于根据所述第一数据进行计算操作;所述多核处理器根据所述第一数据进行计算操作时,所述预取模块还用于向内存控制器发送第二预取指令,所述第二预取指令中包含第二内核的标识,所述第二预取指令用于将所述系统缓存中的第二数据预取至所述第二内核的核内缓存;所述多核处理器用于进行N轮计算操作,在所述多核处理器的下一轮计算操作中需要使用所述第一数据和所述第二数据,其中N为大于1的整数。
另一方面,本申请实施例中当需要根据多个数据进行一轮计算时,可以将多个数据分别预取至多个内核,其中一个数据预取至一个内核,如此,由于本申请实施例中可以通过预取指令对数据进行全局掌控,因此在根据预取到的数据进行计算时,可以知道每个预取数据所存储的内核,进而实现了从不同内核上直接读取各个预取数据进行一轮计算的目的,避免了数据的重复预取,进一步节省了数据处理时间的开销。
另一种可选地实施例中,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;若多核处理器需根据第一数据中的连续P个数据元素进行运算操作,则:第一内核106还用于:将P个数据元素分别写入P个FIFO寄存器;多核处理器还用于:通过并行读取P个FIFO寄存器中不同的数据位,从而获取第一数据中的连续P个数据元素,并根据P个数据元素进行运算操作。如此,当需要从一个内核的核内缓存中读取多个数据元素时,无需生成多个读取命令分别读取多个数据元素,而是仅生成一条读取指令,从而根据该读取指令分别从P个FIFO寄存器中读取该多个数据元素,进一步节省了数据处理时间的开销。
基于相同构思和上述描述,本申请实施例中还提供一种多核系统架构示意图,图1a示例性示出了该另一种多核系统的架构示意图,如图1a所示,本申请实施例中包括系统内存100、内存控制器101、预取模块102、多个内核,以及多个内核中每个内核的核内缓存。系统内存100连接内存控制器101,内存控制器101连接预取模块102。预取模块102可连接译码器103,可选地,预取模块102可用于向内存控制器101发送预取指令,预取指令可以是译码器发送给预取模块的,也可以是预取模块自己生成的。内存控制器101根据预取指令将预取数据从系统内存100中发送到内核上,内核将受到的数据写入核内缓存中。预取指令中包括内核标识。可选地,还包括预存模块110,预存模块110在内存控制器101的控制下,将数据通过第一接口104从各个内核的核内缓存预存至系统内存100中。本申请实施例中预取模块102和预存模块110都可以是多核处理器中的一个内核处理器的模块,也可以是其它处理器中的模块。
另一方面,可选地,译码器103可以将译码后的读取/写入指令通过第二接口105将读取/写入命令传至各个内核的读取/写入控制模块,以使各个内核的读取/写入控制模块从从各个核内缓存中读取数据,或者将数据写入各个核内缓存中。
图1中将第一接口104和第二接口105画为两个接口,实际操作中,第一接口104和第二接口105可为同一个接口,也可为不同的两个接口,比如分别为多路选择器DMUX1接口和多路选择器DMUX2接口。若第一接口104和第二接口105分别为两个不同的接口,则第二接口105传输读取/写入指令,第一接口104可传输预取/预存的数据,从而提高第二接口105的指令传输速率。
如图1和图1a所示,多核系统中包括至少两个内核,图1a中仅示例性示出了四个内核。本申请实施例中在逻辑功能上将一个核内缓存,以及该核内缓存对应的逻辑控制系统可称为一个内核系统,也就是说,本申请实施例中一个内核对应使用一个核内缓存进行预取、预存、读取或写入。比如图1中所示的第一内核106的核内缓存113、第二内核107的核内缓存123、第三内核108的核内缓存133和第四内核109的核内缓存143。可选地,核内缓存中可包括一个或多个缓存bank。
可选地,各个内核包括读取/写入控制模块,用于执行读取/写入命令,以使从各个核内缓存中读取数据,或者将数据写入各个核内缓存中。比如图1a中所示的第一内核106的读取/写入控制模块111、第二内核107的读取/写入控制模块121、第三内核108的读取/写入控制模块131和第四内核109的读取/写入控制模块141。
可选地,各个内核包括缓存控制器,用于执行预取/预存命令,以使将数据从系统内存中预取至各个核内缓存中,或者将数据从各个核内缓存中预存至系统内存中。比如图1a中所示的第一内核106的缓存控制器112、第二内核107的缓存控制器122、第三内核108的缓存控制器132和第四内核109的缓存控制器142。
如图1a所示,为了与现有技术兼容,比如可在通用的多核处理器或多核加速器中使用本申请的预取指令、预存指令、读取指令或写入指令,可选地,需要在CPU的外层指令cache(通常为三级指令缓存L3 icache或者外层统一cache)、内存控制器中增加指令分发模块,当指令分发模块确定是本申请的预取指令、预存指令、读取指令或写入指令时,将指令发送至图1a的译码器103。若是现有技术中的指令,则按原多核系统的的原有通路,发送到该线程所被加载到的某个内核的指令缓存中。
本申请实施例中的核内缓存可包括一个或多个缓存bank,缓存bank英文可称为Cache line或Cache block,每个缓存bank存储具有连续系统内存地址的若干个存储模块。比如,在32位计算机上通常是一个字(word),即四个字节。本申请实施例中的系统内存可包括双倍速率同步动态随机存储器(Double Data Rate,DDR)。DDR系统内存是在SDRAM系统内存基础上发展而来。DDRx中x可指代2、3、4,分别指代不同的DDR类型。本申请实施例中的内核可包括中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。本申请实施例中的“/”是或者的意思。比如,预取/预存表示预取或预存,读取/写入表示读取或写入。
基于相同构思以及上述描述,本申请实施例提供一种内存控制器,图1b示例性示出了本申请实施例提供的一种内存控制器的结构示意图,如图1b所示,该内存控制器101包括接收模块151,处理模块152和发送模块153,。其中,接收模块151,用于接收预取模块102发送的预取指令,预取指令中包含内核的标识;处理模块152,用于根据预取指令,从系统内存100中获取预取数据;发送模块153,用于向内核160发送反馈消息,反馈消息中携带预取数据。内核160可以是多核系统中的任一个内核,比如图1和图1a中的第一内核至第四内核中的任一个内核。
另一种可选地方案中,处理模块152用于将内存通道设置为忙碌状态;根据预取指令,从系统内存中获取预取数据;并在获取数据长度的预取数据后,将内存通道设置为空闲状态。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。
基于相同构思以及上述描述,本申请实施例提供一种多核处理器,图1c示例性示出了本申请实施例提供的一种多核处理器的结构示意图,如图1c所示,多核处理器中包括预取模块102和多个内核,图1b中仅示例性示出了一个内核160,另外预取模块102可以是内核160中的多个任一个内核的核处理器中的模块。该内核106包括接收模块163,处理模块162和核内缓存161。所述多核系统包含预取模块102和多个内核,所述方法包括:预取模块102向内存控制器101发送预取指令,所述预取指令中包含内核的标识;所述内核106接收来自所述内存控制器101的反馈消息,所述反馈消息包含预取数据;所述内核将所述预取数据写入所述内核的核内缓存.
为了进一步提高对数据的全局掌控性,更加准确的知道预取数据的存储位置,可选地,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识,处理模块,用于:将预取数据写入缓存bank标识指示的缓存bank。基于相同构思以及上述描述,图1d示例性示出了本申请实施例提供的另一种用于多核系统的内存访问的内核的结构示意图,如图1d所示,核内缓存161包括至少一个缓存bank,比如缓存bank171、缓存bank172和缓存bank173。
如图1d所示,内核160中还包括FIFO寄存器,每个缓存bank均连接至少一个FIFO寄存器,比如图1d中所示的第一FIFO寄存器、第二FIFO寄存器和第三FIFO寄存器。每个寄存器中包括至少一个数据位,比如图1d所示的位置0的数据位、位置1的数据位和位置2的数据位。可选地,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;处理器,还用于:将连续P个数据元素分别写入P个FIFO寄存器;其中,P个FIFO寄存器用于使多核处理器通过并行读取P个FIFO寄存器中不同的数据位,从而获取P个数据元素,并根据P个数据元素进行运算操作。如此,当需要从一个内核的核内缓存中读取多个数据元素时,无需生成多个读取命令分别读取多个数据元素,而是仅生成一条读取指令,从而根据该读取指令分别从P个FIFO寄存器中读取该多个数据元素,进一步节省了数据处理时间的开销。
基于相同构思以及上述论述的内容,本申请实施例提供一种多核系统的系统内存访问方法,图2示例性示出了本申请实施例提供一种多核系统的系统内存访问方法的流程示意图,如图2所示,该方法包括:
步骤211,内存控制器接收预取模块发送的第一预取指令,第一预取指令中包含第一内核的标识;
步骤212,内存控制器根据第一预取指令,从系统内存中获取第一数据;
步骤213,内存控制器向第一内核发送第一反馈消息,第一反馈消息中携带第一数据。可选地,上述步骤211至213可由上述内存控制器101执行。可选地,该方法还包括以下步骤214和步骤215。
步骤214,第一内核接收来自内存控制器的第一反馈消息,第一反馈消息包含第一数据;反馈消息是内存控制器接收到预取模块发送的第一预取指令后,根据预取指令从系统内存中获取第一数据后发送的;第一预取指令中包含第一内核的标识;
步骤215,第一内核将第一数据写入第一内核的核内缓存。可选地,步骤214和步骤215可由多核系统中的任一个内核来实现,可为上述图1b至图1d中的内核160,也可以是图1至图1a中第一内核106至第四内核109中的任一个内核。可选地,为了介绍方便,将步骤211至步骤215中提及的内核称为第一内核。
可选地,内存控制器接收预取模块发送的第二预取指令,第二预取指令中包含第二内核的标识;内存控制器根据第二预取指令,从系统内存中获取第二数据;内存控制器向第二内核发送第二反馈消息,第二反馈消息中携带第二数据。第二内核接收来自内存控制器的第二反馈消息,第二反馈消息包含第二数据;第二反馈消息是内存控制器接收到预取模块发送的第二预取指令后,根据预取指令从系统内存中获取第二数据后发送的;第二预取指令中包含第二内核的标识;第二内核将第二数据写入第二内核的核内缓存。可选地,步骤214和步骤215可由多核系统中的任一个内核来实现,可为上述图1b至图1d中的内核160,也可以是图1至图1a中第二内核106至第四内核109中的任一个内核。也就是说,本申请实施例中将预取数据预取至内核的核内缓存的过程均与上述步骤211至步骤215类似。
由于当需要预取数据时可通过预取模块发送预取指令来完成,且在预取指令中包括内核的标识,从而通过预取指令可获知每段数据存储至哪个内核的核内缓存中,从而实现对预取的数据的全局掌控,进而避免重复预取数据的问题,降低数据整个处理过程的时间开销。
一种可选地实施方案中,内存控制器根据预取指令,从系统内存中获取预取数据,包括:内存控制器将内存通道设置为忙碌状态;内存控制器根据预取指令,从系统内存中获取预取数据;并在获取数据长度的预取数据后,将内存通道设置为空闲状态。如此,可以一次性将第一数据预取至核内缓存后,再将内存通道让给其它内核使用,避免了频繁去竞争内存通道的问题,进一步节省了数据预取时间。
可选地,设置内存通道工作状态包括多种形式,比如可用burst模式,内存通道工作状态为忙碌可以将参数burst mode设置为1,内存通道工作状态为空闲可以将参数burstmode设置为0。
通过上述可选地的方案,可以看出,本申请实施例中在执行预取或预存指令时,先查看内存通道工作状态,内存通道比如为DDRx通道,内存通道工作状态包括空闲和忙碌两种状态,一次预取或预存一段数据,具体来说,可以设置一个计数器,预取/预存一个数据后,递增一个计数器的值,直至预取/预存该段数据之后,再将内存通道的工作状态设置为空闲,如此可以使一个内核预取/预存一整段数据,避免了现有技术中每次预取/预存一个缓存bank的数据量,下次重新竞争通道接着预取/预存数据的情况,本申请实施例减少了内核竞争通道的次数,从而提高了工作通道的带宽利用率,进一步降低了内存访问时延,提升了内存访问性能。
进一步,在核内缓存与内存之间预取/预存数据,需要在内核的缓存控制器和内存的内存控制器之间建立握手,握手成功后进行预取/预存数据,预取/预存数据之后,握手释放,本申请实施例中由于每次握手后,预取/预存一整段数据,而不是通过多次握手每次仅预取/预存一个缓存bank的数据的方式,减少了握手次数。
为了进一步提高对数据的全局掌控性,更加准确的知道预取数据的存储位置,可选地,,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识;缓存bank标识用于使内核将预取数据写入缓存bank标识指示的缓存bank。可选地,内核将预取数据写入内核的核内缓存,包括:内核将预取数据写入缓存bank标识指示的缓存bank。
本申请实施例中提供一些可选地实施方案,用于对四种系统内存指令:预取指令、预存指令、读取指令和写入指令进行一些完善。
第一种,预取指令。
可选地,预取指令中还包含预取数据的数据长度,如此,可以指示一次性将该数据长度的预取数据预取至核内缓存中,避免了多次抢占内存通道带来的时延较长的问题。预取指令中还包括以下内容中的任一项或任多项:根据该预取指令所预取的一段数据对应存储的核内缓存的标识;根据该预取指令所预取的一段数据在系统内存中的起始地址;根据该预取指令所预取的一段数据的数据长度。表1示例性示出了一种预取指令的格式示意表,如表1所示,预取指令中包括:指令类型、内核标识、核内缓存的标识、数据在系统内存中的起始地址、数据长度。
表1预取指令的格式示意表
在表1中,指令类型为该指令区别于其它内存指令的标志位。本申请实施例所示的内存指令共4种,分别为预取指令、预存指令、读取指令和写入指令。表1中的指令类型可以采用2比特来表示。
内核标识为该指令所对应的多核系统上的目标内核的标识,假设为第一内核。核内缓存的标识为该指令所对应的第一内核上的核内缓存的标识编号,假设为第一核内缓存。本申请实施例中每个内核可以包括多个核内缓存,但是预取时,本申请实施例通过M个内核将M段数据预取至M个内核的核内缓存中,即一个内核仅仅将一段数据预取至该内核的一个核内缓存中,如果该内核将两段数据预取至该内核的两个核内缓存中,则将该内核从逻辑上视为两个内核。
可选地,起始地址为该内存指令所对应的一段数据在系统内存中的起始地址,假设为0x8000_F000。数据长度为预取的一段数据中元素的个数,以字(WORD)为单位,比如为100。
基于上述示例,表1中的预取指令可以表示:从多核系统的系统内存上,连续预取起始系统内存地址为0x8000_F000的100个数据,连续存放到多核系统的第一内核的第一核内缓存的物理存储空间上。可选地,数据在核内缓存内的物理存放地址可由系统内存地址00140算出,具体算法存在多种,比如采用定向地图(directed map)的方式,由0x8000_F000对核内缓存的大小并取模获得。
举个例子,比如假设核内缓存的大小为256个字,采用directed map的方式下,这256个字的核内缓存的每个索引为idx的模块,可以对应到4*n*256+4*idx的系统内存地址上的字。其中的n是整数,4是由于一个字由4个Byte组成。所以反过来,当由系统内存地址0x8000_F000求在这个directed map方式的核内缓存上的索引时,采用的是(0x8000_F000/4)mod 256的计算方式。例如,当系统内存地址为0x8000_F000(32位)时,在该缓存bank上的索引值是(0x8000_F000>>2)&0xff。&0xff是由于对256取模可以由与运算获得(256是2的8次方)。当缓存bank大小为2的N次方时,取模操作在硬件上可以直接选取系统内存地址中的某些位。在缓存bank上的地址可以采用这种方法获取。可选地,通常内存通道上每个周期可以读写连续地址上的多个数据,假设内存通道带宽为4个字,这条预取指令将使用100/4个存取数据时钟完成。
第二种,读取指令。
可选地,读取指令中还包括以下内容中的任一项或任多项:根据该读取指令所读取的一段数据对应存储的核内缓存的标识;根据该读取指令所读取的一段数据在系统内存中的起始地址;根据该读取指令所读取的一段数据的数据长度。表2示例性示出了一种读取指令的格式示意表,如表2所示,读取指令中包括:指令类型、内核标识、核内缓存的标识、数据在系统内存中的起始地址、数据长度。可选地,表2中还包括一些其它参数。该读取指令所读取的一段数据在系统内存中的起始地址也可以表示为该数据在核内缓存中存储的位置的索引。数据在系统内存中的地址和在核内缓存中的索引为一一对应的关系。数据的长度表示该读取指令所需读取的数据的总长度,如表2所示,从0x8000_F000地址开始,连续读取100次。
表2读取指令的格式示意表
读取指令中的各项与预取指令中的各项类似,不再赘述。读取指令的含义为从第一内核的第一核内缓存上读取数据,该数据在系统内存中的起始地址为0x8000_F000,数据长度为100。表2中的其它参数用于指导一些特定的读取方式等,作为预留接口支撑多样的规则运算。例如,传统的向量计算和基于模板的计算是两种典型的规则运算的方式,分别会对核内缓存的使用有一定的差异。比如,若计算操作为基于模板的计算,则其它参数中可以设置模板=ON,ON为开的意思。
可选地,本申请实施例中的基于模板的计算(Stencil computation),多用于解偏微分方程(Partial Differential Equations)。其代表特性是在计算对象元素时,需要按特定几何模板访问该对象元素所在位置的周围元素。例如二维的Jacobi计算中,对象元素的计算由对十字形周围5个源数据点的计算完成。
可选地,本申请实施例中的传统向量计算(Vectorization),即同时以对复数个数据进行操作的计算方式。向量化是数据并行的主要操作方式之一,代表的有使用单指令流多数据流方式进行向量化,即通称的单指令多数据流(Single lnstruction MultipleData,SIMD)指令。
读取指令的用途是,从完成系统内存到核内缓存的预取后,从核内缓存中连续的读取数据用以支撑核内的计算。同预取指令类似,每一条读取指令负责从一个核内缓存中读取数据。
第三种,写入指令。
相应地,为了明确知道哪个数据写入或预存入了那块区域,可选地,根据预取至核内缓存的M段数据进行计算操作之后,还包括:根据生成的写入指令将计算操作的结果写入核内缓存中;其中,写入指令中包括:计算操作的结果待写入的内核的标识、计算操作的结果待写入的核内缓存的标识计算操作的结果待预存至系统内存中的起始地址、计算操作的结果的数据长度中的任一项或任多项。表3示例性示出了一种写入指令的格式示意表,如表3所示,写入指令中包括:指令类型、内核标识、核内缓存的标识、数据在系统内存中的起始地址、数据长度。
表3写入指令的格式示意表
写入指令的用途是,将计算完成的结果连续的写入到核内缓存中,更新核内缓存中的目标地址。写入指令通常与循环体中的输出数据流同时出现。例如,计算FOR(i=0;i<N;i++){C[i]=A[i]+B[i];}的循环时,C数组对应了这个循环体的计算输出,则需要一条写入指令指导C数据在缓存bank中的更新方式。写入指令的意义为,将数据写入第一内核的的第一核内缓存上,该数据写入至核内缓存中与系统内存中的起始地址为0x8000_F000对应的索引所指示的位置上,数据长度为100。数据在系统内存中的地址和在核内缓存中的索引为一一对应的关系。
第四种,预存指令。
可选地,根据预取至核内缓存的第i次第一维度计算操作需访问的M段数据进行第i次第一维度计算操作之后,还包括:根据生成的预存指令将写入核内缓存中的第i次第一维度计算操作的结果写入系统内存中;其中,预存指令中包括:第i次第一维度计算操作的结果存储的内核的标识、第i次第一维度计算操作的结果存储的核内缓存的标识、第i次第一维度计算操作的结果待预存至系统内存中的起始地址、第i次第一维度计算操作的结果的数据长度中的任一项或任多项。表4示例性示出了一种预存指令的格式示意表,如表4所示,预存指令中包括:指令类型、内核标识、核内缓存的标识、数据在系统内存中的起始地址、数据长度。
表4预存指令的格式示意表
预存指令表示该预存指令所对应的数据方向为从核内缓存上向系统内存的连续写入。举个例子,该预存指令的含义为将多核系统的第一内核的第一核内缓存上的待写入数据,连续预存至系统内存上以0x8000_F000为首地址的地址空间上,数据长度为100。核内缓存上数据的索引与系统内存的地址的映射算法与预取指令相同,不再赘述。
基于上述论述,本申请实施例提供一种多核系统的系统内存访问方法,若确定需根据系统内存中存储的数据进行N次第一维度计算操作,即N论计算操作;其中,N次第一维度计算操作中的每次第一维度计算操作需读取数据中的M段数据,N和M均为大于1的整数,则并行执行两个步骤:根据预取至核内缓存的第i次第一维度计算操作需访问的M段数据进行第i次第一维度计算操作;且根据生成的R个预取指令,通过除第i次第一维度计算操作需访问的M段数据对应存储的M个内核之外的其余K-M个内核中的R个内核将第i+1次第一维度计算操作需访问的、且未预取至核内缓存的R段数据从系统内存中预取至R个内核的核内缓存中;R为大于等于1,且小于等于M和K-M中的较小值的整数,i为大于等于1且小于N的整数,若i等于N,即进行最后一轮计算操作,则直接进行计算即可。
本申请实施例中,若确定需根据系统内存中存储的数据进行N次第一维度计算操作;其中,N次第一维度计算操作中的每次第一维度计算操作需读取数据中的M段数据,N和M均为大于1的整数,则在i大于等于1且小于等于N-1的整数时,根据生成的R个预取指令将第i+1次第一维度计算操作需访问的、且未预取至核内缓存的R段数据从系统内存中预取至R个内核的核内缓存中,且由于R个预取指令中的每个预取指令中包括内核的标识,因此,可以通过预取指令获知每段数据存储至哪个内核的核内缓存中,从而实现预取的数据的全局掌控,在需要通过存储在多个内核的核内缓存中多段数据进行操作时,可直接从多个内核的核内缓存中获取数据,无需像现有技术中一样重复预取,从而降低数据预取时间的开销,提升处理器操作效率。
进一步,由于若i为大于等于1且小于等于N-1的整数时,则针对第i次第一维度计算操作:若通过K个内核中的M个内核将第i次第一维度计算操作需访问的M段数据从系统内存中预取至M个内核的核内缓存中,K为大于等于M+1的整数;则并行执行:根据预取至核内缓存的第i次第一维度计算操作需访问的M段数据进行第i次第一维度计算操作;且:根据生成的R个预取指令,通过除第i次第一维度计算操作需访问的M段数据对应存储的M个内核之外的其余K-M个内核中的R个内核将第i+1次第一维度计算操作需访问的、且未预取至核内缓存的R段数据从系统内存中预取至R个内核的核内缓存中。可见,并行执行预取和第一维度计算操作,提升了处理器的计算效率。
进一步,由于若i为大于等于1且小于等于N-1的整数时,针对第i次第一维度计算操作:根据生成的R个预取指令,通过除第i次第一维度计算操作需访问的M段数据对应存储的M个内核之外的其余K-M个内核中的R个内核将第i+1次第一维度计算操作需访问的、且未预取至核内缓存的R段数据从系统内存中预取至R个内核的核内缓存中。可见,若相邻的第i次第一维度计算操作和第i+1次第一维度计算操作存在重叠的M-R个元素,则在第i+1次第一维度计算操作中,无需重复预取该重叠的M-R个元素,仅仅预取第i+1次第一维度计算操作相比第i次第一维度计算操作所新增的R个元素即可,进一步降低数据预取时间的开销,提升处理器操作效率。
本申请实施例的多核系统中,由于将每一段数据分布存储在一个内核的核内缓存中,因此可以并发的从多个核内缓存中读取多段数据,一种可选地的实施方案中,若i为大于1且小于等于N的整数时,则:根据预取至核内缓存的第i次第一维度计算操作需访问的M段数据进行第i次第一维度计算操作,包括:生成M个读取指令;其中,M个读取指令中的每个读取指令中包括:内核的标识;该读取指令的内核的标识用于使通过该读取指令读取该内核上对应存储的一段数据;针对第i-1次第一维度计算操作需访问的M段数据与第i次第一维度计算操作需访问的M段数据存在重叠的M-R段数据,根据M个读取指令中对应读取该M-R段数据的M-R个读取指令:从第i-1次第一维度计算操作需访问的该M-R段数据对应存储的核内缓冲中读取该M-R段数据;针对第i次第一维度计算操作需访问的M段数据中除该M-R段数据之外的R段数据,根据M个读取指令中对应读取该R段数据的R个读取指令:从第i次第一维度计算操作需访问的该R段数据对应存储的核内缓冲中读取该R段数据。
也就是说,本申请实施例中对每次第一维度的计算操作所用到的每段数据都有一个全局的掌控,因此,当需要进行第i次第一维度的计算操作时,若相邻两次第一维度的计算操作存在重叠的M-R段数据,则本申请实施例中不必重复两次预取该M-R段数据,在第i+1次第一维度的计算操作中,使用第i次第一维度的计算操作所预取的重叠的该M-R段数据即可,避免了相邻两次第一维度的计算操作中重复预取数据的问题,进一步降低了数据预取量,提高了访问效率,提升了系统内存访问性能。
可选地,根据生成的R个预取指令预取数据之前,还包括:确定出第i+1次第一维度计算操作需访问的M段数据与第i次第一维度计算操作需访问的M段数据存在重叠的M-R段数据;根据第i+1次第一维度计算操作需访问的M段数据中除与第i次第一维度计算操作需访问的M段数据存在重叠的M-R段数据之外的R段数据,生成R个预取指令。
也就是说,由于本申请实施例中预取指令中包括内核的标识,因此可以将数据预取到指定的内核中,进一步若相邻两次第一维度的计算操作存在重叠的M-R段数据,在第i+1次第一维度的计算操作中,使用第i次第一维度的计算操作所预取的重叠的该M-R段数据即可,仅仅预取未与第i次第一维度的计算操作重叠的R段数据即可,可先确定出未重叠的R段数据,之后生成R个预取指令,去预取数据,减少了预取指令的数量,减少了网络开销。
图2a、图2b、图2c、图2d和图2e示例性示出了本申请实施例提供的一种进行第一维度计算操作的方案示意图,下面结合图2a至图2e对本申请实施例提供的一种可选地多核系统的系统内存访问方法进行介绍。
一种可能的进行第一维度计算操作的程序段为:
结合上述程序段,如图2a至2d所示,N为4,一共进行4次第一维度计算操作,每次第一维度计算操作需要获取3段数据,即M为3。在图中,每一段数据表示为一行数据。
如图2a所示,第1次第一维度计算操作使用第0段数据、第1段数据和第2段数据。如图2b所示,第2次第一维度计算操作使用第1段数据、第2段数据和第3段数据。如图2c所示,第3次第一维度计算操作使用第2段数据、第3段数据和第4段数据。如图2d所示,第4次第一维度计算操作使用第3段数据、第4段数据和第5段数据。
由于该示例中每次需要3段数据进行第一维度计算操作,因此应用于该示例的多核系统至少包括4个内核。结合图1a所示的第一内核至第四内核进行介绍。
在第1次第一维度计算操作时,先使用第一内核将第0段数据预取至第一内核的核内缓存中,使用第二内核将第1段数据预取至第二内核的核内缓存中,使用第三内核将第2段数据预取至第三内核的核内缓存中。
在第1次第一维度计算操作,生成三条预取指令,分别为:
第一内核将第0段数据预取至第一内核的核内缓存中的预取指令:预取|第一内核|第一核内缓存|起始地址A[0,0]|数据长度L+2;
第二内核将第1段数据预取至第二内核的核内缓存中的预取指令:预取|第二内核|第一核内缓存|起始地址A[1,0]|数据长度L+2;
第三内核将第2段数据预取至第三内核的核内缓存中的预取指令:预取|第三内核|第一核内缓存|起始地址A[2,0]|数据长度L+2。
上述预取指令中数据长度为L+2表示一整段数据的总的元素的个数为L+2个元素,可以进行L次第二维度计算操作。
上述示例中,将一段数据预取至该内核的核内缓存,该核内缓存并非必须是第一核内缓存,比如也可将第二内核将第1段数据预取至第二内核的第三核内缓存中。
由于第2次第一维度计算操作中所使用的第1段数据和第2段数据均与第1次第一维度计算操作中需要使用的2段数据重叠,因此第2次第一维度计算操作,仅需要再预取一个新的第2段数据即可。
在预取第0段数据、第1段数据和第2段数据之后并行执行:根据预取至核内缓存的第1次第一维度计算操作需访问的3段数据进行第1次第一维度计算操作;同时,使用第四内核将第3段数据预取至地四内核的核内缓存中。如此,实现了计算与预取的同步执行,节省了时延开销,另一方面,无需重复预取第0段数据和第1段数据,降低了预取数据的量,进一步提高了系统内存访问性能。
如图2b所示,在预取第3段数据之后,并行执行:读取第二内核上预取的第1段数据、读取第三内核上预取的第2段数据和第四内核上预取的第3段数据,从而进行第2次第一维度计算操作;同时,通过第一内核预取第4段数据。
如图2c所示,在预取第4段数据之后,并行执行:读取第三内核上预取的第2段数据、读取第四内核上预取的第3段数据和第一内核上预取的第4段数据,从而进行第3次第一维度计算操作;同时,通过第二内核预取第5段数据。
如图2d所示,由于一共进行4次第一维度计算操作,因此,在预取第5段数据之后,执行:读取第四内核上预取的第3段数据、读取第一内核上预取的第4段数据和第二内核上预取的第5段数据,从而进行第4次第一维度计算操作。
通过上述示例可以看出,每次第一维度计算操作中均根据生成的1个预取指令将第i+1次第一维度计算操作需访问的、且未预取至核内缓存的1段数据从系统内存中预取至1个内核的核内缓存中,且由于1个预取指令中的每个预取指令中包括内核的标识,因此,可以通过预取指令获知每段数据存储至哪个内核的核内缓存中,从而实现预取的数据的全局掌控,在需要通过存储在多个内核的核内缓存中多段数据进行操作时,可直接从多个内核的核内缓存中获取数据。
进一步,由于若i为大于等于1且小于等于3的整数时,则针对第i次第一维度计算操作并行执行预取和计算操作,提升了处理器的计算效率。
进一步,由于若i为大于等于1且小于等于3时,针对第i次第一维度计算操作,若相邻的第i次第一维度计算操作和第i+1次第一维度计算操作存在重叠的2段数据,则在第i+1次第一维度计算操作中,无需重复预取该重叠的2段数据,仅仅预取第i+1次第一维度计算操作相比第i次第一维度计算操作所新增的1段数据即可,进一步降低数据预取时间的开销,提升处理器操作效率。
可选地,在上述示例中,读取3段数据之后进行第一维度计算的内核可以是多核系统的任一个内核。
当预取数据存储至一个核内缓存中时,且需要从该核内缓存中读取多个数据元素时,本申请实施例中提供另一种可选地实施方式,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;内核将预取数据写入内核的核内缓存之后,还包括:内核将连续P个数据元素分别写入P个FIFO寄存器;其中,P个FIFO寄存器用于使多核处理器通过并行读取P个FIFO寄存器中不同的数据位,从而获取P个数据元素,并根据P个数据元素进行运算操作。
下面以根据预取至核内缓存的数据需进行L次第二维度计算操作为例进行说明,L为大于等于1的整数,针对第j次第二维度计算操作,其中,j为大于大于等于1且小于等于L的整数:从预取至核内缓存的预取数据中,读取第j次第二维度计算操作需访问的该预取数据中的至少一个数据元素,从而进行第j次第二维度计算操作。进一步,本申请实施例中,可选地,可在每次第一维度计算操作中进行L个第二维度计算操作,如此,可实现较为复杂的复式运算,且在该较为复杂的运算中,也可保持较高的运行速率和较低的系统内存访问时延。
针对第二维度计算操作,为了进一步降低系统内存访问时延,从核内缓存读取数据时,本申请实施例也提供几种可选地实施方式用于提升读取数据的速率。可选地,针对第j次第二维度计算操作,j为大于等于1且为小于等于L的整数,若第j次第二维度计算操作需读取该段数据中的P个数据元素,P为大于1的整数,则:将该段数据中的P个数据元素依次输入至该段数据对应存储的缓存bank所连接的Q个FIFO寄存器中;其中,Q大于等于P;从Q个FIFO寄存器中分别读取第j次第二维度计算操作需访问的该段数据中的P个数据元素;其中,一个FIFO寄存器上对应读取一个数据元素。
图2h和图2i示例性示出了本申请实施例提供的一种缓存bank连接Q个FIFO寄存器的示意图,如图2h和图2i所示,以图1中的第二内核作为示意,缓存bank连接Q个FIFO寄存器,Q大于等于P即可,P为第j次第二维度计算操作需读取该段数据中的P个数据元素。若每次第二维度计算操作需要读取第1段数据的3个数据元素,因此Q的值大于等于3即可,图2g和图2i中示例性画了三个进行示意。如图,将该3个数据元素依次输入至3个FIFO寄存器中,分别从3个FIFO寄存器中读取3个数据元素,从而提高了读取数据的效率,进一步降低了系统内存访问时延。
可选地,Q个FIFO寄存器为先进先出FIFO寄存器;Q个FIFO寄存器中的每个FIFO寄存器所能存储的最大的数据元素数量大于等于P。结合上述示例,如图2g和图2i所示,每个FIFO寄存器所能存储的最大的数据元素数量大于等于3,如此,当FIFO寄存器为先进先出FIFO寄存器时,每个寄存器可以储存最新的3个数据元素,一方面可以避免不再使用的数据元素占据寄存器的存储空间,另一方面也可使寄存器存储的数据元素满足第二维度计算操作的需求。
可选地,若j为大于1且小于等于L的整数时,则:将该段数据中的P个数据元素依次输入至该段数据对应存储的缓存bank所连接的Q个FIFO寄存器中,从Q个FIFO寄存器中分别读取第j次第二维度计算操作需访问的该段数据中的P个数据元素,包括:针对该段数据:确定出第j次第二维度计算操作需读取的P个数据元素和第j-1次第二维度计算操作需读取的P个数据元素存在重叠的S个数据元素;其中,S为大于等于1,且小于等于P的整数;将第j次第二维度计算操作需读取的P个数据元素中除与第j-1次第二维度计算操作需读取的P个数据元素存在重叠的S个数据元素之外的P-S个数据元素依次输入至该段数据对应存储的缓存bank所连接的Q个FIFO寄存器中;从Q个FIFO寄存器中读取:在进行第j-1次第二维度计算操作前输入至Q个FIFO寄存器中的、且与第j次第二维度计算操作需读取的P个数据元素存在重叠的S个数据元素;以及第j次第二维度计算操作需读取的P个数据元素中除与第j-1次第二维度计算操作需读取的P个数据元素存在重叠的S个数据元素之外的P-S个数据元素。如此,在进行每一次第二维度计算操作时,可以向FIFO寄存器中仅仅输入本次第二维度计算操作相对于上次第二维度计算操作来说新增的数据元素即可,进一步降低了时延开销。
图2e、图2f和图2g示例性示出了第1次第二维度计算操作、第2次第二维度计算操作和第3次第二维度计算操作的示意图。计算B[i,j]时,分别读取第0段数据中的A[i-1,j],第1段数据的A[i,j-1]、A[i,j]和A[i,j+1],以及第2段数据A[i+1,j]。如图2e所示,第1次第二维度计算操作,分别读取第0段数据中的第2个数据元素,第1段数据的第1个数据元素、第2个数据元素和第3个数据元素,以及第2段数据的第2个数据元素。结合上述程序段,也就是说,计算B[1,1]时,分别读取第0段数据中的A[0,1],第1段数据的A[1,0]、A[1,1]和A[1,2],以及第2段数据A[2,1]。
下面针对上述示例具体介绍几种可能的读取指令的具体格式。第1次第二维度计算操作,具体的指令格式如下。
针对第0段数据仅读取一个数据元素,即需要读取第0段数据中的第2个数据元素,用A[0,1]表示。读取指令为:读取|第一内核|第一缓存bank|起始地址A[0,1]|数据长度L|其他选项:模板=OFF(OFF为开的意思)。模板OFF的情况下,该读取指令指示直接从第一内核的第一缓存bank上从A[0,1]起始,连续读取L次数据,以便进行L次第二维度计算操作。每次读取一个数据,以便进行第1次第二维度计算操作。在读取指令中,起始地址A[0,1]表示数据A[0,1]的在系统内存中的存储地址,或者是在第一内核的第一缓存bank中的索引,A[0,1]的在系统内存中的存储地址与其在第一内核的第一缓存bank中的索引是一一对应的关系。
针对第2段数据均仅读取一个数据元素,即需要读取第2段数据中的第2个数据元素,用A[2,1]表示。读取指令为:读取|第一内核|第一缓存bank|起始地址A[2,1]|数据长度L|其他选项:模板=OFF(OFF为开的意思)。模板OFF的情况下,该读取指令指示直接从第一内核的第一缓存bank上从A[2,1]起始,连续读取L次数据,以便进行L次第二维度计算操作。每次读取一个数据,以便进行1次第二维度计算操作。在读取指令中,起始地址A[2,1]表示数据A[2,1]的在系统内存中的存储地址,或者是在第一内核的第一缓存bank中的索引,A[2,1]的在系统内存中的存储地址与其在第一内核的第一缓存bank中的索引是一一对应的关系。
针对第1段数据,读取时可以参考图2g所示,先将A[1,0]、A[1,1]和A[1,2]依次输入至3个FIFO寄存器中,分别为第一FIFO寄存器、第二FIFO寄存器和第三FIFO寄存器,如图2g和图2i所示,每个FIFO寄存器中包括三个寄存器,位于每个FIFO寄存器底端的称为寄存器位置0处寄存器,位于每个FIFO寄存器中间的称为寄存器位置1处寄存器,位于每个FIFO寄存器顶端的称为寄存器位置2处寄存器。本申请实施例中,可选地,FIFO寄存器为先进先出FIFO寄存器,新数据输入至FIFO寄存器的位置2处的寄存器,位于底端的位置0处的寄存器中的数据被推出。如图2g所示,第一FIFO寄存器中目前存储数据从位置2至位置0依次为A[1,0]、A[1,1]和A[1,2]。如图2i所示,当输入一个新数据A[1,3],则第一FIFO寄存器存储的数据从位置2至位置0依次为A[1,3]、A[1,0]和A[1,1]。可选地,若每个内核包括多个缓存bank,则该多个缓存bank中的每个缓存bank与该内核中的所有FIFO寄存器中的每个FIFO寄存器均连接。
针对第1段数据,需要分别从三个FIFO寄存器中分别读取A[1,0]、A[1,1]和A[1,2]。
第1次第二维度计算操作读取第1段数据的读取指令包括三个,针对第1段数据的第一个读取指令为:读取|第二内核|第一缓存bank|起始地址C[1,0]|数据长度L|其他选项:模板=ON(ON为开的意思)。模板ON的情况下,起始地址C[1,0]的意思是读取第一FIFO寄存器中位置0处寄存器上的数值,数据长度L表示连续读取L次,以便进行L次第二维度计算操作。如图2g所示,第一FIFO寄存器中位置0处寄存器上的数值为A[1,0],通过该读取指令可读取A[1,0]。如图2i所示,在进行第2次第二维度计算操作时通过该读取指令,读到的第一FIFO寄存器中位置0处寄存器上的数值为A[1,1]。
针对第1段数据的第二个读取指令为:读取|第二内核|第一缓存bank|起始地址C[2,1]|数据长度L|其他选项:模板=ON(ON为开的意思)。模板ON的情况下,起始地址C[2,1]的意思是读取第二FIFO寄存器中位置1处寄存器上的数值,数据长度L表示连续读取L次,以便进行L次第二维度计算操作。如图2g所示,第二FIFO寄存器中位置1处寄存器上的数值为A[1,1],通过该读取指令可读取A[1,1]。如图2i所示,在进行第2次第二维度计算操作时通过该读取指令,读到的第二FIFO寄存器中位置1处寄存器上的数值为A[1,2]。
针对第1段数据的第三个读取指令为:读取|第二内核|第一缓存bank|起始地址C[3,2]|数据长度L|其他选项:模板=ON(ON为开的意思)。模板ON的情况下,起始地址C[3,2]的意思是读取第三FIFO寄存器中位置2处寄存器上的数值,数据长度L表示连续读取L次,以便进行L次第二维度计算操作。如图2g所示,第三FIFO寄存器中位置2处寄存器上的数值为A[1,2],通过该读取指令可读取A[1,2]。如图2i所示,在进行第2次第二维度计算操作时通过该读取指令,读到的第三FIFO寄存器中位置2处寄存器上的数值为A[1,3]。
本申请实施例在进行第2次第二维度计算操作时,无需再生成新的读取指令,沿用第1次第二维度计算操作的读取指令即可,将第1次第二维度计算操作的读取指令顺序执行L次,即完成了L次第二维度计算操作。节省了读取指令的量。
另一方面,结合上述图2g和图2i可以看出,第1次第二维度计算操作和第2次第二维度计算操作之间,针对第1段数据,相邻两次第二维度计算操作中会存在重叠数据元素,分别为A[1,1]和A[1,2],因此,如图2i所示,在进行第2次第二维度计算操作时,仅仅从缓存bank123中将数据元素A[1,3]依次输入三个FIFO寄存器即可,无需再次将A[1,1]和A[1,2]重复取到FIFO寄存器中,实现了数据复用,进一步节省了数据读取时延。
基于相同构思,本申请实施例提供一种内存控制器300,用于执行上述方法中的任一个方案。
如图3所示,内存控制器300包括处理器301、收发器302、存储器303和通信接口304;其中,处理器301、收发器302、存储器303和通信接口304通过总线305相互连接。可选地,本申请实施例中提供的内存控制器300中存储器303可以包括图1中的系统内存。可选地,本申请实施例中提供的内存控制器300中通信接口304可以包括图1中的各个装置之间的接口,比如第一接口104和第二接口105等等。
总线305可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器303可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器303还可以包括上述种类的存储器的组合。
通信接口304可以为有线通信接入口,无线通信接口或其组合,其中,有线通信接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线通信接口可以为WLAN接口。
处理器301可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。处理器301还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
可选地,存储器303还可以用于存储程序指令,处理器301调用该存储器303中存储的程序指令,可以执行上述方案中所示实施例中的一个或多个步骤,或其中可选的实施方式,使得多核系统的内存控制器300实现上述方法中内存控制器的功能。
收发器302,用于接收预取模块发送的预取指令,预取指令中包含内核的标识;向内核发送反馈消息,反馈消息中携带预取数据;处理器301,用于根据预取指令,从系统内存中获取预取数据。
可选地,预取指令中还包含预取数据的数据长度。
可选地,处理器301,用于:将内存通道设置为忙碌状态;根据预取指令,从系统内存中获取预取数据;并在获取数据长度的预取数据后,将内存通道设置为空闲状态。
可选地,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识;缓存bank标识用于使内核将预取数据写入缓存bank标识指示的缓存bank。
基于相同构思,本申请实施例提供一种多核处理器,用于执行上述方法中的任一个方案。
如图4所示,多核处理器400包括预取模块和多个内核,每个内核包括处理器401、收发器402、存储器403和通信接口404,预取模块属于多个内核中一个内核中的处理器的模块;其中,处理器401、收发器402、存储器403和通信接口404通过总线405相互连接。可选地,本申请实施例中提供的多核处理器400中存储器403可以包括图1中的核内缓存。可选地,本申请实施例中提供的多核处理器400中通信接口404可以包括图1中的各个装置之间的接口,比如第一接口104和第二接口105等等。
总线405可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器403可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器403还可以包括上述种类的存储器的组合。
通信接口404可以为有线通信接入口,无线通信接口或其组合,其中,有线通信接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线通信接口可以为WLAN接口。
处理器401可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。处理器401还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
可选地,存储器403还可以用于存储程序指令,处理器401调用该存储器403中存储的程序指令,可以执行上述方案中所示实施例中的一个或多个步骤,或其中可选的实施方式,使得多核处理器400实现上述方法中内核的功能。
处理器401,将所述预取数据写入所述内核的核内缓存;所述收发器402,用于:向内存控制器发送预取指令,所述预取指令中包含内核的标识,接收来自所述内存控制器的反馈消息,所述反馈消息包含预取数据。向内存控制器发送预取指令可为多核处理器中某一个内核的处理器做的。
可选地,预取指令中还包含预取数据的数据长度。
可选地,预取指令中还包含缓存bank标识,反馈消息中还包含缓存bank标识,处理器401,用于:将预取数据写入缓存bank标识指示的缓存bank。
可选地,多核系统还包含P个先入先出FIFO寄存器,P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;处理器401,还用于:将连续P个数据元素分别写入P个FIFO寄存器;其中,P个FIFO寄存器用于使多核处理器通过并行读取P个FIFO寄存器中不同的数据位,从而获取P个数据元素,并根据P个数据元素进行运算操作。
应理解,以上图1b各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。本申请实施例中,接收模块151和发送模块153可以由收发器302实现,处理模块152可以由处理器301实现。如图3所示,内存控制器300可以包括处理器301、收发器302和存储器303。其中,存储器303可以用于存储处理器301执行方案时的代码,该代码可为内存控制器300出厂时预装的程序/代码。
应理解,以上图1c和图1d各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。本申请实施例中,接收模块163可以由收发器402实现,处理模块162可以由处理器401实现。如图4所示,多核处理器400可以包括处理器401、收发器402和存储器403。其中,存储器403可以用于存储处理器401执行方案时的代码,该代码可为多核处理器400出厂时预装的程序/代码。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现、当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。指令可以存储在计算机存储介质中,或者从一个计算机存储介质向另一个计算机存储介质传输,例如,指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带、磁光盘(MO)等)、光介质(例如,CD、DVD、BD、HVD等)、或者半导体介质(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(Solid State Disk,SSD))等。
本领域内的技术人员应明白,本申请实施例可提供为方法、系统、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (23)
1.一种多核系统,其特征在于,所述多核系统包括预取模块、内存控制器、系统内存和多个内核;其中:
所述预取模块用于:向内存控制器发送第一预取指令,所述第一预取指令中包含第一内核的标识;
所述内存控制器用于:根据所述第一预取指令,从所述系统内存中获取第一数据,并向所述第一内核发送第一反馈消息,所述第一反馈消息中携带所述第一数据;
所述第一内核用于:将所述第一数据写入所述第一内核的核内缓存;
所述多核系统还包含P个先入先出FIFO寄存器,所述P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;
若多核处理器需根据所述第一数据中的连续P个数据元素进行运算操作,则:
所述第一内核还用于:将所述P个数据元素分别写入所述P个FIFO寄存器;
所述多核处理器还用于:通过并行读取所述P个FIFO寄存器中不同的数据位,从而获取所述第一数据中的连续P个数据元素,并根据所述P个数据元素进行运算操作。
2.根据权利要求1所述的多核系统,其特征在于,所述第一预取指令中还包含所述第一数据的数据长度。
3.根据权利要求2所述的多核系统,其特征在于,所述内存控制器接收到所述第一预取指令后,还用于将内存通道设置为忙碌状态,并在获取所述数据长度的所述第一数据后,将所述内存通道设置为空闲状态。
4.根据权利要求1-3任一项所述的多核系统,其特征在于,所述第一预取指令中还包含缓存bank标识,所述第一反馈消息中还包含所述缓存bank标识;所述第一内核用于:
将所述第一数据写入所述缓存bank标识指示的缓存bank。
5.根据权利要求1-3任一项所述的多核系统,其特征在于,所述多核处理器用于根据所述第一数据进行计算操作;
所述多核处理器根据所述第一数据进行计算操作时,所述预取模块还用于向内存控制器发送第二预取指令,所述第二预取指令中包含第二内核的标识,所述第二预取指令用于将系统缓存中的第二数据预取至所述第二内核的核内缓存;
所述多核处理器用于进行N轮计算操作,在所述多核处理器的下一轮计算操作中需要使用所述第一数据和所述第二数据,其中N为大于1的整数。
6.一种多核系统的内存访问方法,其特征在于,所述多核系统包含预取模块和多个内核,所述方法包括:
预取模块向内存控制器发送预取指令,所述预取指令中包含内核的标识;
所述内核接收来自所述内存控制器的反馈消息,所述反馈消息包含预取数据;
所述内核将所述预取数据写入所述内核的核内缓存;
所述多核系统还包含P个先入先出FIFO寄存器,所述P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;
所述内核将所述预取数据写入所述内核的核内缓存之后,还包括:
所述内核将连续P个数据元素分别写入所述P个FIFO寄存器;
其中,所述P个FIFO寄存器用于使多核处理器通过并行读取所述P个FIFO寄存器中不同的数据位,从而获取所述P个数据元素,并根据所述P个数据元素进行运算操作。
7.根据权利要求6所述的方法,其特征在于,所述预取指令中还包含所述预取数据的数据长度。
8.根据权利要求6或7所述的方法,其特征在于,所述预取指令中还包含缓存bank标识,所述反馈消息中还包含所述缓存bank标识;
所述内核将所述预取数据写入所述内核的核内缓存,包括:
所述内核将所述预取数据写入所述缓存bank标识指示的缓存bank。
9.一种多核系统的内存访问方法,其特征在于,所述方法包括:
所述多核系统的内存控制器接收预取模块发送的预取指令,所述预取指令中包含内核的标识;
所述内存控制器根据所述预取指令,从系统内存中获取预取数据;
所述内存控制器向所述内核发送反馈消息,所述反馈消息中携带所述预取数据;所述预取数据用于写入所述内核的核内缓存;
所述多核系统还包含P个先入先出FIFO寄存器,所述P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;所述P个数据元素用于在所述预取数据写入所述内核的核内缓存后,分别写入所述P个FIFO寄存器;其中,所述P个FIFO寄存器用于使多核处理器通过并行读取所述P个FIFO寄存器中不同的数据位,从而获取所述P个数据元素,并根据所述P个数据元素进行运算操作。
10.根据权利要求9所述的方法,其特征在于,所述预取指令中还包含所述预取数据的数据长度。
11.根据权利要求10所述的方法,其特征在于,所述内存控制器根据所述预取指令,从所述系统内存中获取预取数据,包括:
所述内存控制器将内存通道设置为忙碌状态;
所述内存控制器根据所述预取指令,从所述系统内存中获取预取数据;并在获取所述数据长度的所述预取数据后,将所述内存通道设置为空闲状态。
12.根据权利要求9-11任一项所述的方法,其特征在于,所述预取指令中还包含缓存bank标识,所述反馈消息中还包含所述缓存bank标识;
所述缓存bank标识用于使所述内核将所述预取数据写入所述缓存bank标识指示的缓存bank。
13.一种多核处理器,其特征在于,包括预取模块和多个内核;其中:
预取模块,用于:向内存控制器发送预取指令,所述预取指令中包含内核的标识;
所述内核的接收模块,用于:接收来自所述内存控制器的反馈消息,所述反馈消息包含预取数据;
所述内核的处理模块,用于:将所述预取数据写入所述内核的核内缓存;
多核系统还包含P个先入先出FIFO寄存器,所述P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;
所述处理模块,还用于:
将连续P个数据元素分别写入P个FIFO寄存器;
其中,所述P个FIFO寄存器用于使多核处理器通过并行读取所述P个FIFO寄存器中不同的数据位,从而获取所述P个数据元素,并根据所述P个数据元素进行运算操作。
14.根据权利要求13所述的多核处理器,其特征在于,所述预取指令中还包含所述预取数据的数据长度。
15.根据权利要求13或14所述的多核处理器,其特征在于,所述预取指令中还包含缓存bank标识,所述反馈消息中还包含所述缓存bank标识;所述处理模块,用于:
将所述预取数据写入所述缓存bank标识指示的缓存bank。
16.一种内存控制器,其特征在于,包括:
接收模块,用于接收预取模块发送的预取指令,所述预取指令中包含内核的标识;
处理模块,用于根据所述预取指令,从系统内存中获取预取数据;
发送模块,用于向所述内核发送反馈消息,所述反馈消息中携带所述预取数据;所述预取数据用于写入所述内核的核内缓存;
多核系统还包含P个先入先出FIFO寄存器,所述P个FIFO寄存器中每个FIFO寄存器可以存储P个数据元素;所述P个数据元素用于在所述预取数据写入所述内核的核内缓存后,分别写入所述P个FIFO寄存器;其中,所述P个FIFO寄存器用于使多核处理器通过并行读取所述P个FIFO寄存器中不同的数据位,从而获取所述P个数据元素,并根据所述P个数据元素进行运算操作。
17.根据权利要求16所述的内存控制器,其特征在于,所述预取指令中还包含所述预取数据的数据长度。
18.根据权利要求17所述的内存控制器,其特征在于,所述处理模块,用于:
将内存通道设置为忙碌状态;
根据所述预取指令,从所述系统内存中获取所述预取数据;并在获取所述数据长度的所述预取数据后,将所述内存通道设置为空闲状态。
19.根据权利要求16-18任一项所述的内存控制器,其特征在于,所述预取指令中还包含缓存bank标识,所述反馈消息中还包含所述缓存bank标识;
所述缓存bank标识用于使所述内核将所述预取数据写入所述缓存bank标识指示的缓存bank。
20.一种多核处理器,其特征在于,所述多核处理器包括多个内核,其中每个内核包括处理器、收发器和存储器;
所述存储器用于存储指令,所述处理器用于执行所述存储器存储的指令,并控制所述收发器进行信号接收和信号发送,当所述处理器执行所述存储器存储的指令时,所述多核处理器用于执行如权利要求6至8任一权利要求所述的方法。
21.一种内存控制器,其特征在于,所述内存控制器包括处理器、收发器和存储器;
所述存储器用于存储指令,所述处理器用于执行所述存储器存储的指令,并控制所述收发器进行信号接收和信号发送,当所述处理器执行所述存储器存储的指令时,所述内存控制器用于执行如权利要求9至12任一权利要求所述的方法。
22.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令在被计算机调用时,使所述计算机执行如权利要求6至8任一权利要求所述的方法。
23.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令在被计算机调用时,使所述计算机执行如权利要求9至12任一权利要求所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2017/083523 WO2018205117A1 (zh) | 2017-05-08 | 2017-05-08 | 一种多核系统内存访问方法、相关装置、系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109219805A CN109219805A (zh) | 2019-01-15 |
CN109219805B true CN109219805B (zh) | 2023-11-10 |
Family
ID=64104310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780034087.6A Active CN109219805B (zh) | 2017-05-08 | 2017-05-08 | 一种多核系统内存访问方法、相关装置、系统及存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11294675B2 (zh) |
CN (1) | CN109219805B (zh) |
WO (1) | WO2018205117A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10860487B2 (en) * | 2019-04-17 | 2020-12-08 | Chengdu Haiguang Integrated Circuit Design Co. Ltd. | Multi-core processing device and method of transferring data between cores thereof |
CN111045732B (zh) * | 2019-12-05 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 数据处理方法、芯片、设备及存储介质 |
CN113703835B (zh) * | 2021-08-11 | 2024-03-19 | 深圳市德明利技术股份有限公司 | 一种基于多核处理器的高速数据流处理方法和系统 |
CN114237509B (zh) * | 2021-12-17 | 2024-03-26 | 西安紫光展锐科技有限公司 | 数据访问方法及装置 |
CN114490467B (zh) * | 2022-01-26 | 2024-03-19 | 中国电子科技集团公司第五十四研究所 | 一种多核网络处理器的报文处理dma系统及方法 |
CN114911724B (zh) * | 2022-05-12 | 2024-03-19 | 合肥乾芯科技有限公司 | 一种基于多bank的cache预取技术的访存结构 |
CN114928575B (zh) * | 2022-06-02 | 2023-08-11 | 江苏新质信息科技有限公司 | 基于fpga的多算法核数据包保序方法及装置 |
CN115080455B (zh) * | 2022-08-22 | 2022-11-01 | 华控清交信息科技(北京)有限公司 | 一种计算机芯片、计算机板卡、存储空间分配方法及装置 |
CN116028388B (zh) * | 2023-01-17 | 2023-12-12 | 摩尔线程智能科技(北京)有限责任公司 | 高速缓存方法、装置、电子设备、存储介质和程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102207916A (zh) * | 2011-05-30 | 2011-10-05 | 西安电子科技大学 | 一种基于指令预取的多核共享存储器控制设备 |
CN102446087A (zh) * | 2010-10-12 | 2012-05-09 | 无锡江南计算技术研究所 | 指令预取方法与预取装置 |
CN103514107A (zh) * | 2012-06-27 | 2014-01-15 | 上海芯豪微电子有限公司 | 高性能数据缓存系统和方法 |
CN104484286A (zh) * | 2014-12-16 | 2015-04-01 | 中国人民解放军国防科学技术大学 | 片上Cache网络中基于位置感知的数据预取方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0752644A3 (en) * | 1995-07-07 | 2001-08-22 | Sun Microsystems, Inc. | Memory management unit incorporating prefetch control |
JP3717212B2 (ja) * | 1995-10-27 | 2005-11-16 | 株式会社日立製作所 | 情報処理装置及び情報処理ユニット |
JP4744510B2 (ja) * | 2004-04-22 | 2011-08-10 | シリコン ハイブ ビー・ヴィー | データ値の多次元アレイへのパラレルなアクセスを提供するデータ処理装置 |
US7730263B2 (en) * | 2006-01-20 | 2010-06-01 | Cornell Research Foundation, Inc. | Future execution prefetching technique and architecture |
US20090198976A1 (en) * | 2008-02-06 | 2009-08-06 | Austel Vernon R | Method and structure for high-performance matrix multiplication in the presence of several architectural obstacles |
US8347301B2 (en) * | 2008-06-30 | 2013-01-01 | Intel Corporation | Device, system, and method of scheduling tasks of a multithreaded application |
CA2680601C (en) * | 2009-10-16 | 2010-11-02 | Ibm Canada Limited - Ibm Canada Limitee | Managing multiple speculative assist threads at differing cache levels |
US8341357B2 (en) * | 2010-03-16 | 2012-12-25 | Oracle America, Inc. | Pre-fetching for a sibling cache |
US8495307B2 (en) * | 2010-05-11 | 2013-07-23 | International Business Machines Corporation | Target memory hierarchy specification in a multi-core computer processing system |
US9336047B2 (en) * | 2014-06-30 | 2016-05-10 | International Business Machines Corporation | Prefetching of discontiguous storage locations in anticipation of transactional execution |
-
2017
- 2017-05-08 WO PCT/CN2017/083523 patent/WO2018205117A1/zh active Application Filing
- 2017-05-08 CN CN201780034087.6A patent/CN109219805B/zh active Active
-
2019
- 2019-11-08 US US16/677,816 patent/US11294675B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102446087A (zh) * | 2010-10-12 | 2012-05-09 | 无锡江南计算技术研究所 | 指令预取方法与预取装置 |
CN102207916A (zh) * | 2011-05-30 | 2011-10-05 | 西安电子科技大学 | 一种基于指令预取的多核共享存储器控制设备 |
CN103514107A (zh) * | 2012-06-27 | 2014-01-15 | 上海芯豪微电子有限公司 | 高性能数据缓存系统和方法 |
CN104484286A (zh) * | 2014-12-16 | 2015-04-01 | 中国人民解放军国防科学技术大学 | 片上Cache网络中基于位置感知的数据预取方法 |
Non-Patent Citations (2)
Title |
---|
Java虚拟机在Intel众核架构下的动态数据预取研究与优化;余炀等;《小型微型计算机系统》;20161115(第11期);全文 * |
龙芯GS464E处理器核架构设计;吴瑞阳等;《中国科学:信息科学》;20150420(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
WO2018205117A1 (zh) | 2018-11-15 |
CN109219805A (zh) | 2019-01-15 |
US11294675B2 (en) | 2022-04-05 |
US20200073665A1 (en) | 2020-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109219805B (zh) | 一种多核系统内存访问方法、相关装置、系统及存储介质 | |
KR101817397B1 (ko) | 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈 | |
CN110059020B (zh) | 扩展内存的访问方法、设备以及系统 | |
US10203878B2 (en) | Near memory accelerator | |
US7844752B2 (en) | Method, apparatus and program storage device for enabling multiple asynchronous direct memory access task executions | |
JP5431003B2 (ja) | リコンフィギュラブル回路及びリコンフィギュラブル回路システム | |
US20130232304A1 (en) | Accelerated interleaved memory data transfers in microprocessor-based systems, and related devices, methods, and computer-readable media | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
CN115098412B (zh) | 外设访问控制器、数据访问装置及对应方法、介质和芯片 | |
CN111651383B (zh) | 用于具有数据流管理器的处理器中的数据流的方法和装置 | |
US20120324195A1 (en) | Allocation of preset cache lines | |
CN110825435A (zh) | 用于处理数据的方法和装置 | |
US10817183B2 (en) | Information processing apparatus and information processing system | |
CN108701102A (zh) | 直接存储器访问控制器、数据读取方法和数据写入方法 | |
CN116685943A (zh) | 可编程原子单元中的自调度线程 | |
US11030714B2 (en) | Wide key hash table for a graphics processing unit | |
CN112256331B (zh) | 虚拟机指令解析加速方法、装置和计算机存储介质 | |
KR102238025B1 (ko) | 정보 처리 방법 및 처리 장치 | |
US20150212759A1 (en) | Storage device with multiple processing units and data processing method | |
CN117472840B (zh) | 多核系统以及用于多核系统的数据处理的方法 | |
WO2016070431A1 (zh) | 内存访问方法、装置和计算机设备 | |
WO2023115319A1 (zh) | 一种数据存储方法、存储装置及设备 | |
US9135157B2 (en) | Integrated circuit device, signal processing system and method for prefetching lines of data therefor | |
KR20150131946A (ko) | 트랜잭션을 갖는 전자 시스템 및 그것의 동작 방법 | |
KR101319287B1 (ko) | 파이프라인 구조를 갖는 프로세서 |
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 |