CN101876948A - 在本地存储器中支持数据的不连续访问的方法和设备 - Google Patents
在本地存储器中支持数据的不连续访问的方法和设备 Download PDFInfo
- Publication number
- CN101876948A CN101876948A CN2009101369718A CN200910136971A CN101876948A CN 101876948 A CN101876948 A CN 101876948A CN 2009101369718 A CN2009101369718 A CN 2009101369718A CN 200910136971 A CN200910136971 A CN 200910136971A CN 101876948 A CN101876948 A CN 101876948A
- Authority
- CN
- China
- Prior art keywords
- data segment
- section
- target data
- local storage
- useful data
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种在本地存储器中支持数据的不连续访问的方法,其包括:从外部存储器向所述本地存储器传送至少一个目标数据段,其中,所述至少一个目标数据段的每一个包括所要访问的有用数据段和无用数据段;以及在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段,以使所述有用数据段在所述本地存储器中是连续存储的。采用本发明方法,能够将对外部存储器中有用数据段的不连续访问转化为对本地存储器中有用数据段的连续访问,从而减少了存储有用数据段所需的本地存储器空间,实现高效的数据访问。本发明还公开了一种在本地存储器中支持数据的不连续访问的设备。
Description
技术领域
本发明涉及多核处理器中的本地存储器,具体地,涉及在本地存储器中支持数据的不连续访问(discontinuous references)的方法和设备。
背景技术
通常,在具备多个处理器的多核处理器中,除了多个处理器共享的主存储器外,每个处理器还可以具有各自的本地存储器。一般地,本地存储器的尺寸较小,并且没有硬件缓存控制器,因此,本地存储器可用作软件控制的缓存或者直接缓冲器。主存储器与本地存储器之间的数据传送采用直接存储器存取(DMA)。
当前,在应用程序中经常出现数据的不连续访问的情形,所谓不连续访问是指将要访问的数据在主存储器中是不连续地存储的。例如,在下面的例子中,数组a是双精度浮点型数组,其中每个元素的数据长度为8字节,被访问的数组a的元素是a[0]、a[13]、a[26]...,因此,对数组a的访问是不连续的。
例子:
double a [MAX]
for(k=0;k<NP;++k)
{ for(j=0;j<n_ffts;j+=2)
{ real[k]=a[13*j+k];
imag[k]=a[13*j+k+13];
}
}
对于数据的不连续访问,可以通过将本地存储器用作软件控制的缓存来实现。在该方法中,对本地存储器中存储的数据建立索引表,例如,基于数据在主存储器中的地址。然后,当需要访问某个数据时,首先,根据该数据的地址查找索引表,如果在索引表中找到,则从本地存储器中获取该数据;如果在索引表中没有找到,则通过DMA将该数据从主存储器传送到本地存储器。该方法存在以下缺点:1)由于包含索引表查找,因此,需要增加关于索引表查找的代码,这将减少可用的本地存储器空间;2)由于未在索引表中找到所访问数据的地址,因此,需要通过DMA从主存储器传输数据,产生额外的时间开销,同时由于查找索引表而不命中的几率很大,因此,时间开销也很大。
对于数据的不连续访问,还可以通过将本地存储器用作直接缓冲器来实现。在该方法中,首先通过DMA将主存储器中的所有数据传送到本地存储器中,然后,在本地存储器中进行数据访问,并在访问结束后,通过DMA将数据传送回主存储器。由于本地存储器的空间有限,采用该方法,可能不能容纳所有的将被访问的有用数据,并且浪费了大量的空间。
另外,可以使用多个DMA指令来实现数据的不连续访问。在该方法中,通过多个DMA指令将多个将要访问的数据段从主存储器传送到本地存储器中,其中,每个DMA指令对应一个数据段,然后,将这些数据段放在一起。该方法虽然降低了所需的本地存储器的空间,但是带来了多个DMA指令的时间开销。
为了加速多个DMA传送,可以使用硬件DMA列表,即在一个DMA列表中包含多个DMA条目,这样,只需执行一次DMA列表,就可以实现多个DMA传送。在DMA列表中,需要规定与各个将要访问的有用数据段相对应的条目,其规定所传送的有用数据段的起始地址和数据长度。考虑到硬件的复杂性,DMA列表中的每个条目必须是对齐的,即,每个条目所规定的数据段的起始地址和数据长度是对齐的。假设每个条目是16字节对齐的,那么每个数据段的起始地址是16的整数倍,并且数据段的数据长度也是16的整数倍。然而,有用数据段的起始地址和数据长度可能不是对齐的,因此,需要对每个条目进行对齐操作,以使根据该条目所传送的目标数据段是包括该有用数据段的最小尺寸的对齐的目标数据段。因此,该方法需要在编译应用程序时获得准确的对齐信息,并且当目标数据段从主存储器传送到本地存储器后,其中的有用数据段在本地存储器中的地址变得复杂,这样,应用程序的代码中访问数据的地址表达式,例如数组元素的下标,也变得复杂,从而阻碍其它进一步的编译优化。
综上所述,需要一种新的实现数据的不连续访问的方法,其既能够不浪费本地存储器的空间,也可以提高数据的访问效率。
发明内容
本发明正是基于上述技术问题而提出的,其目的在于提供一种在本地存储器中支持数据的不连续访问的方法及设备,以充分利用本地存储器的空间,并提高访问效率。
根据本发明的一个方面,提供了一种在本地存储器中支持数据的不连续访问的方法,包括:从外部存储器向所述本地存储器传送至少一个目标数据段,其中,所述至少一个目标数据段的每一个包括所要访问的有用数据段和无用数据段;以及在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段,以使所述有用数据段在所述本地存储器中是连续存储的。
根据本发明的另一个方面,提供了一种在本地存储器中支持数据的不连续访问的设备。
附图说明
图1是根据本发明的一个实施例的在本地存储器中支持数据的不连续访问的方法的流程图;
图2是传送多个目标数据段的步骤的流程图;
图3是不连续访问的访问模式中各参数的示意图;
图4是生成直接存储器存取列表的步骤的流程图;
图5是根据一个实施例的重排本地存储器中的多个目标数据段中的有用数据段的步骤的流程图;
图6是采用图5所示的流程对本地存储器中的多个目标数据段中的有用数据段进行重排的示意图;
图7是根据另一个实施例的重排本地存储器中的多个目标数据段中的有用数据段的步骤的流程图;
图8是根据本发明的一个实施例的在本地存储器中对数据进行不连续访问后进行处理的流程图;
图9是根据本发明的一个实施例的在本地存储器中支持数据的不连续访问的设备的示意性方框图。
图10示意性示出了可以实现根据本发明的实施例的计算设备的结构方框图。
具体实施方式
相信通过以下结合附图对本发明的具体实施例的详细描述,本发明的上述和其它目的、特征和优点将会更加明显。
图1是根据本发明的一个实施例的在本地存储器中支持数据的不连续访问的方法的流程图。下面结合附图,详细说明本实施例。
在本实施例以及随后的实施例中,本地存储器是多核处理器中某个处理器所具有的本地存储器,外部存储器是多核处理器中的主存储器。当然,本领域的普通技术人员可以理解,外部存储器并不限于此,只要能够与本地存储器之间通过DMA传送数据即可。以下,为了便于理解,将主存储器用作外部存储器。
如图1所示,在步骤S101,利用DMA列表,从主存储器向本地存储器传送多个目标数据段,其中,每一个目标数据段都至少包括所要访问的有用数据段。
一般地,在多核处理器中,每个处理器各自执行所分配的任务。当处理器在执行应用程序的过程中访问主存储器中的数据时,通常通过DMA传送来将所要访问的数据传送到本地存储器中用于进一步的处理。在本实施例中,将“所要访问的数据”称为“有用数据段”,其它数据则称为“无用数据段”。在本实施例中,使用DMA列表进行数据的传送。
在步骤S110,在本地存储器中重排多个目标数据段中的有用数据段,以使这些有用数据段在本地存储器中是连续存储的。
图2示出了传送多个目标数据段的步骤S101的一种实现方法的流程图。如图2所示,在步骤S201,分析不连续访问的访问(access)模式,该步骤可在对应用程序进行编译时执行。
当编译该应用程序时,如果发现在该应用程序中存在对数据的不连续访问,则进一步分析该不连续访问的访问模式。图3示出了不连续访问的访问模式中各参数的示意图,其中,填充了颜色的方框表示有用数据段,无颜色的方框表示无用数据段。可以看出,有用数据段在主存储器中的存储是不连续的。在本实施例中,确定有用数据段所属的数据结构在主存储器中的起始地址,即图3中的start_address。在上述的例子中,由于有用数据段是数组a的元素,因此,需确定数组a在主存储器中的起始地址,即数组元素a[0]的地址,假设a[0]的地址为0。如果第一个有用数据段不是该数据结构的第一个元素,则确定该有用数据段的地址与该数据结构的起始地址之间的偏移,即图3中的offset。在上述的例子中,偏移offset为k*8字节。进一步地,确定有用数据段的数据长度,即图3中的data_length。在上述的例子中,数据长度data_length为8字节。确定两个相邻的有用数据段的第一个数据元素之间的间隔,即图3中的step。在上述的例子中,间隔step等于13*8字节。进一步地,计算该数据结构中包括全部有用数据段的部分的总尺寸,即图3中的size。在上述的例子中,总尺寸size等于(n_ffts*13+k+13)*8字节。
本领域技术人员容易理解,还可以采用其他合适的参数来表示不连续访问的访问模式。在获得了不连续访问的访问模式后,在步骤S210,基于在步骤S201中分析得到的访问模式,生成DMA列表,其中该DMA列表的每个条目与一个有用数据段相对应,并且各个条目之间是对齐的。
在生成DMA列表后,在步骤S220,执行所生成的DMA列表,以从主存储器中传送多个目标数据段到本地存储器中,其中每个目标数据段都包含有用数据段和零个或N个无用数据段(N是自然数)。在上述的例子中,在本地存储器中依次存储了a[0]、a[1]、a[12]、a[13]、a[26]、a[27]、a[38]、a[39]、...,其中a[0]、a[13]、a[26]、a[39]、...是有用数据段,而a[1]、a[12]、a[27]、a[38]、...是无用数据段。
图4示出了生成DMA列表的步骤S210的流程图。如图4所示,在步骤S401,根据所分析的访问模式,计算每一个有用数据段在外部存储器中的起始地址。对于上述的例子,各个有用数据段的地址分别是0、104、208、312、...。然后,在步骤S405,将所计算的每一个有用数据段的起始地址和数据长度对应地填写到DMA列表的每个条目中,以生成DMA列表的条目。对于上述的例子,DMA列表中的各个条目分别是DMA[0,8]、DMA[104,8]、DMA[208,8]、DMA[312、8]、...。如前所述,DMA列表要求各个条目之间是对齐的,也就是说,各个条目所限定的起始地址和数据长度之间是对齐的。因此,在步骤S410,根据对齐要求,对在步骤S405中生成的每个条目进行对齐,以使该条目所限定的目标数据段包含所对应的有用数据段。假设每个条目是16字节对齐的,那么,各个条目中所限定的起始地址应是16的整数倍,并且数据长度也是16的整数倍。对于上述的例子,对齐后的各个条目分别是DMA[0,16]、DMA[96,16]、DMA[208,16]、DMA[304,16]、...。通过以上步骤的处理,能够生成DMA列表。所生成的DMA列表可以被存放在本地存储器中的一个先进先出(FIFO)缓冲器中。
图5示出了根据一个实施例的重排步骤S110的流程图。如图5所示,在该实施例中,首先在步骤S501,顺序地提取多个目标数据段中的无用数据段,并在步骤S505,将剩下的多个目标数据段中的有用数据段移动到一起,然后,在步骤S510,将所提取的无用数据段移动到所有的有用数据段之后。经过上述步骤地处理,所有的有用数据段被连续地存储在本地存储器中,并且位于相应的存储区域的前面。
进一步地,还可以记录每一个无用数据段在移动前和移动后在本地存储器中的地址,以用于恢复目标数据段。
下面通过图6说明重排多个(例如10个)目标数据段中的有用数据段的过程。图6(a)示出了10个目标数据段被传送到本地存储器后在本地存储器中的布局,其中,深色方框表示有用数据段,浅色方框表示无用数据段,方框中的数字相同表示这些方框属于同一个目标数据段。此时,有用数据段被不连续地存储在本地存储器中。在具体的实现中,在本地存储器中为重排分配一个缓冲器,例如128字节。从第一个目标数据段开始,依次提取各目标数据段中的无用数据段,并放入所分配的缓冲器中,直到该缓冲器被存满。应当注意,为了方便目标数据段的恢复,优选地,属于一个目标数据段的无用数据段被同时提取。当然,本领域的普通技术人员可以理解,只要每个无用数据段被完整地提取即可。如图6(b)所示,目标数据段1-6的无用数据段被提取并放入缓冲器中,并且将目标数据段1-6的有用数据段移动到一起。然后,将目标数据段7-10向前移动到目标数据段1-6的有用数据段之后,并将缓冲器中的目标数据段1-6的无用数据段放在目标数据段7-10之后,如图6(c)所示。接着,提取目标数据段7-10的无用数据段,将其放入缓冲器中,并将目标数据段7-10的有用数据段移动到一起,并位于目标数据段1-6的有用数据段之后,如图6(d)所示。最后,将缓冲器中的目标数据段7-10的无用数据段放在目标数据段7-10的有用数据段之后,如图6(e)所示。当然,也可以先将目标数据段1-6的无用数据段移动到目标数据段7-10的有用数据段之后,然后再将目标数据段7-10的无用数据段放在最后。
通过对多个目标数据段中的有用数据段的重排,有用数据段被连续地存储在本地存储器中,从而将对有用数据段的不连续访问转换为连续访问。
图6中每个目标数据段只包括一个有用数据段。本领域技术人员容易理解,每个目标数据段还可以包括两个以上的有用数据段。在这种情况下,即使针对一个目标数据段,对有用数据段进行重排也是有意义的。当然,重排的过程与图6所示的类似。
图7示出了根据一个实施例的重排步骤S110的流程图。如图7所示,在重排多个目标数据段中的有用数据段时,先将多个目标数据段备份在本地存储器中分配的另一个缓冲器中(步骤S701),然后除去原来的多个目标数据段中的无用数据段(步骤S705),并将有用数据段移动到一起(步骤S710)。
图8示出了在本地存储器中对数据进行不连续访问后进行处理的流程图。在一些情况下,可能对有用数据段进行了修改,并需要将修改后的有用数据段写回主存储器。如果不需要将修改后的有用数据段写回主存储器,只需要丢弃该数据段即可。
在步骤S820,目标数据段的恢复过程是目标数据段的重排过程的逆过程,因此,恢复的方法与重排的方法相对应。
在一个实施例中,如果重排采用图5所示的流程,则当对目标数据段进行恢复时,首先从先进先出缓冲器中取出DMA列表,然后,计算出每一个目标数据段中的无用数据段在重排前在本地存储器中的地址,并将各个无用数据段根据所计算的地址移动到对应的目标数据段中。
在另一个实施例中,如果在图5的流程中还记录了每一个无用数据段在移动前和移动后的地址,则在恢复目标数据段时,根据所记录的地址,将各个无用数据段移动到对应的目标数据段中。
在再一个实施例中,如果重排采用图7所示的流程,则在恢复目标数据段时,直接使用备份的目标数据段。
在恢复了各个目标数据段之后,在步骤S830,利用DMA列表,将被恢复的多个目标数据段从本地存储器传送到主存储器中。
对于上述的例子,在采用了本实施例的在本地存储器中支持数据的不连续访问的方法后,对主存储器中数组a的不连续访问可以转换为对本地存储器中数组buf的连续访问,如下面的代码所示:
for(k=0;k<NP;++k)
{ double*buf;
buffer_alloc(&buf,n_ffts*8);
DMA_copyin(&buf,&a[0],(n_ffts*13+k+13)*8,8,13*8,k*8);
DMA_wait();
for(j=0;j<n_ffts;j+=2)
{ real[k]=buf[j ];
imag[k]=buf[j+1];
}
DMA_copyout(&buf,&a[0],(n_ffts*13+k+13)*8,8,13*8,k*8);
buffer_delete(&buf);
}
其中,DMA_copyin()执行从主存储器向本地存储器传送目标数据段的步骤S101,DMA_wait()执行重排目标数据段中的有用数据段的步骤S110,DMA_copyout()执行恢复目标数据段的步骤S120和从本地存储器向主存储器传送目标数据段的步骤S130。
本实施例仅对使用一个DMA列表的情况进行了说明,如果有多个DMA列表,则本实施例的方法也适用,其中,当一个DMA列表的数据传送结束后,可以进行下一个DMA列表的数据传送,而无需等待重排操作结束。对于使用多个DMA列表的情况,在此省略相应的说明。
通过以上描述可以看出,本实施例的在本地存储器中支持数据的不连续访问的方法通过利用DMA列表向本地存储器传送多个包含有用数据段的目标数据段,并重排有用数据段以使其在本地存储器中连续地存储,能够将对主存储器中有用数据段的不连续访问转化为对本地存储器中有用数据段的连续访问,从而减少了存储有用数据段所需的本地存储器空间,实现高效的数据访问。当然,本发明也不限于应用于DMA访问方式。本发明可以应用于任何这样的场合:从第一存储器向第二存储器传送数据,但是无法仅传送要在第二存储器中访问的数据段即有用数据段,而只能传送即包括有用数据段又包括无用数据段的目标数据段,从而导致在第二存储器中有用数据段的排列不连续。
在同一个发明构思下,图9是根据本发明的一个实施例的在本地存储器中支持数据的不连续访问的设备的方框图。下面结合附图,对本实施例进行详细的说明,其中对于与前面的实施例相同的部分,适当省略其说明。
如图9所示,本实施例的在本地存储器中支持数据的不连续访问的设备900包括:数据传送模块901,其利用DMA列表,从主存储器向本地存储器传送多个目标数据段,其中,每一个目标数据段都包括将要访问的有用数据段和无用数据段;以及重排模块902,其在本地存储器中重排多个目标数据段中的有用数据段,以使这些有用数据段在本地存储器中是连续存储的。
在本实施例中,多核处理器中主存储器与本地存储器之间的数据传送通过DMA列表实现。在数据传送模块901中,在对应用程序进行编译时,如果发现其中有对数据的不连续访问,则由分析单元9011分析该不连续访问的访问模式。具体地,在分析单元9011中,起始地址确定单元确定有用数据段所属的数据结构在主存储器中的起始地址,偏移确定单元确定第一个有用数据段的地址与该数据结构的起始地址之间的偏移,长度确定单元确定有用数据段的数据长度,间隔确定单元确定两个相邻的有用数据段的第一个数据元素之间的间隔,计算单元计算数据结构中包括全部有用数据段的部分的总尺寸。
通过分析单元9011分析得到的访问模式被提供给DMA列表生成单元9012,由DMA列表生成单元9012生成DMA列表,其中,DMA列表的每个条目与一个有用数据段相对应,并且各个条目是对齐的。在DMA列表生成单元9012中,首先,起始地址计算单元根据访问模式中的参数,计算每一个有用数据段在主存储器中的起始地址,再由条目生成单元将每一个有用数据段的起始地址和数据长度对应地填写到每个条目中,然后对齐单元根据对齐要求,对每个条目进行对齐,以使该条目所限定的目标数据段包括对应的有用数据段。所生成的DMA列表被存储在本地存储器的一个先进先出(FIFO)缓冲器中。
由DMA列表生成单元9012生成的DMA列表被提供给执行单元9013以执行该DMA列表,从而将多个目标数据段从主存储器传送到本地存储器中,其中,每个目标数据段都包括有用数据段和无用数据段。
当多个目标数据段从主存储器传送到本地存储器后,由重排模块902对多个目标数据段中的有用数据段进行重排,以使这些有用数据段在本地存储器中是连续存储的。根据一个实施例,在重排模块902中,提取单元9021顺序地提取多个目标数据段中的无用数据段,然后,第一移动单元9022将有用数据段移动到一起,并将所提取的无用数据段移动到所有的有用数据段之后。
在另一个实施例中,重排模块902还可以包括记录单元,其记录每一个无用数据段在移动前和移动后在本地存储器中的地址。
在再一个实施例中,重排模块902包括:备份单元,其备份多个目标数据段,例如在本地存储器的另一个缓冲器中;除去单元,其除去多个目标数据段中的无用数据段;以及第二移动单元,其将有用数据段移动到一起。
通过重排模块902,有用数据段被重新排列成在本地存储器中连续地存储,从而将对主存储器中有用数据段的不连续访问转换为对本地存储器中有用数据段的连续访问。
进一步地,本实施例的在本地存储器中支持数据的不连续访问的设备900还包括:恢复模块903,其在在对所述有用数据段的访问结束后,恢复多个目标数据段。当多个目标数据段被恢复后,数据传送模块901利用DMA列表,将被恢复的多个目标数据段从本地存储器传送到主存储器中。
如前所述,目标数据段的恢复过程是目标数据段的重排过程的逆过程。因此,如果重排模块902采用图9中的结构,则在恢复模块903中,地址计算单元根据从先进先出缓冲器中取回的DMA列表,计算每一个目标数据段中的无用数据段在重排前在本地存储器中的地址,然后,第三移动单元将每一个无用数据段按照所计算的地址移动到对应的目标数据段中。
本领域的普通技术人员能够理解,在这种情况下,虽然在重排模块902和恢复模块903中分别包含第一移动单元和第三移动单元,但也可以共用一个移动单元。
在另一个实施例中,如果重排模块902还包括记录单元,则恢复模块903包括第四移动单元,其根据重排模块902的记录单元所记录的每一个无用数据段在移动前和移动后的地址,将每一个无用数据段移动到对应的目标数据段中。
本领域的普通技术人员能够理解,在这种情况下,虽然在重排模块902和恢复模块903中分别包含第一移动单元和第四移动单元,但也可以共用一个移动单元。
在再一个实施例中,当恢复目标数据段时,恢复模块903直接从重排模块902的备份单元中取回原始的目标数据段。
应当指出,本实施例的在本地存储器中支持数据的不连续访问的设备900在操作上可以实现图1、图2、图4和图5所示的在本地存储器中支持数据的不连续访问的方法。
图10示意性示出了可以实现根据本发明的实施例的计算设备的结构方框图。
图10中所示的计算机系统包括CPU(中央处理单元)1001、RAM(随机存取存储器)1002、ROM(只读存储器)1003、系统总线1004,硬盘控制器1005、键盘控制器1006、串行接口控制器1007、并行接口控制器1008、显示器控制器1009、硬盘1010、键盘1011、串行外部设备1012、并行外部设备1013和显示器1014。在这些部件中,与系统总线1004相连的有CPU 1001、RAM 1002、ROM 1003、硬盘控制器1005、键盘控制器1006,串行接口控制器1007,并行接口控制器1008和显示器控制器1009。硬盘1010与硬盘控制器1005相连,键盘1011与键盘控制器1006相连,串行外部设备1012与串行接口控制器1007相连,并行外部设备1013与并行接口控制器1008相连,以及显示器1014与显示器控制器1009相连。
图10中每个部件的功能在本技术领域内都是众所周知的,并且图10所示的结构也是常规的。这种结构不仅用于个人计算机,而且用于手持设备,如Palm PC、PDA(个人数据助理)、移动电话等等。在不同的应用中,例如用于实现包含有根据本发明的客户端模块的用户终端或者包含有根据本发明的网络应用服务器的服务器主机时,可以向图10中所示的结构添加某些部件,或者图10中的某些部件可以被省略。图10中所示的整个系统由通常作为软件存储在硬盘1010中、或者存储在EPROM或者其它非易失性存储器中的计算机可读指令控制。软件也可从网络(图中未示出)下载。或者存储在硬盘1010中,或者从网络下载的软件可被加载到RAM1002中,并由CPU 1001执行,以便完成由软件确定的功能。
尽管图10中描述的计算机系统能够支持根据本发明的提供的技术方案,但是该计算机系统只是计算机系统的一个例子。本领域的熟练技术人员可以理解,许多其它计算机系统设计也能实现本发明的实施例。
本发明还可以实现为例如由图10所示计算机系统所使用的计算机程序产品,其可以包含有用于实现根据本发明的在本地存储器中支持数据的不连续访问的方法的代码。在使用之前,可以把代码存储在其它计算机系统的存储器中,例如,存储在硬盘或诸如光盘或软盘的可移动的存储器中,或者经由因特网或其它计算机网络进行下载。
所公开的本发明的方法可以在软件、硬件、或软件和硬件的结合中实现。硬件部分可以利用专用逻辑来实现。例如,上述实施例中的在本地存储器中支持数据的不连续访问的设备及其各个组成部分可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器、个人计算机(PC)或大型机来执行。
以上虽然通过示例性的实施例详细描述了本发明的在本地存储器中支持数据的不连续访问的方法和设备,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅由所附的权利要求限定。
Claims (9)
1.一种在本地存储器中支持数据的不连续访问的方法,包括:
从外部存储器向所述本地存储器传送至少一个目标数据段,其中,所述目标数据段的每一个至少包括所要访问的有用数据段;以及
在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段,以使所述有用数据段在所述本地存储器中是连续存储的。
2.根据权利要求1所述的方法,其中,所述从外部存储器向所述本地存储器传送至少一个目标数据段的步骤包括:
分析所述不连续访问的访问模式;
基于所述访问模式生成直接存储器存取列表,其中所述直接存储器存取列表的每个条目与至少一个所述有用数据段相对应,并且各个条目之间是对齐的;以及
根据所述直接存储器存取列表,从所述外部存储器中传送所述至少一个目标数据段到所述本地存储器中。
3.根据权利要求2所述的方法,其中,所述生成直接存储器存取列表的步骤包括:
计算每一个所述有用数据段在所述外部存储器中的起始地址;
确定所述有用数据段的数据长度;
将每一个所述有用数据段的起始地址和数据长度填写到直接存储器存取列表的对应条目中;以及
根据对齐要求,对所述每个条目进行对齐,以使该条目所限定的目标数据段包含所对应的有用数据段。
4.根据权利要求1至3任意一项所述的方法,其中,所述在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段的步骤包括:
顺序地提取所述至少一个目标数据段中除所述有用数据段外的无用数据段;
将所述有用数据段移动到一起;以及
将所提取的所述无用数据段移动到所述有用数据段之后。
5.根据权利要求1至3任意一项所述的方法,其中,所述在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段的步骤包括:
备份所述至少一个目标数据段;
除去所述至少一个目标数据段中除所述有用数据段外的无用数据段;以及
将所述有用数据段移动到一起。
6.根据权利要求1至5任意一项所述的方法,还包括:
在对所述有用数据段的访问结束后,恢复所述至少一个目标数据段;以及
从所述本地存储器向所述外部存储器传送被恢复的至少一个目标数据段。
7.根据权利要求6所述的方法,其中,所述恢复所述至少一个目标数据段的步骤包括:
计算每一个所述目标数据段中除所述有用数据段外的无用数据段在重排前在所述本地存储器中的地址;以及
将每一个所述无用数据段根据所计算的地址移动到对应的所述目标数据段中。
8.根据权利要求6所述的方法,其中,所述在所述本地存储器中重排所述至少一个目标数据段中的所述有用数据段的步骤还包括:
记录每一个除所述有用数据段外的无用数据段在移动前和移动后在所述本地存储器中的地址;
所述恢复所述至少一个目标数据段的步骤包括:
根据所记录的每一个所述目标数据段中除所述有用数据段外的无用数据段在移动前和移动后的地址,将每一个所述无用数据段移动到对应的目标数据段中。
9.一种在本地存储器中支持数据的不连续访问的设备,包括用于执行根据权利要求1至8所述方法的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101369718A CN101876948A (zh) | 2009-04-30 | 2009-04-30 | 在本地存储器中支持数据的不连续访问的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101369718A CN101876948A (zh) | 2009-04-30 | 2009-04-30 | 在本地存储器中支持数据的不连续访问的方法和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101876948A true CN101876948A (zh) | 2010-11-03 |
Family
ID=43019507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101369718A Pending CN101876948A (zh) | 2009-04-30 | 2009-04-30 | 在本地存储器中支持数据的不连续访问的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101876948A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012019388A1 (zh) * | 2010-08-12 | 2012-02-16 | 中兴通讯股份有限公司 | 文件的下载方法、系统及装置 |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
CN110795372A (zh) * | 2018-08-03 | 2020-02-14 | 扬智科技股份有限公司 | 数据处理装置及直接存储器访问方法 |
-
2009
- 2009-04-30 CN CN2009101369718A patent/CN101876948A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012019388A1 (zh) * | 2010-08-12 | 2012-02-16 | 中兴通讯股份有限公司 | 文件的下载方法、系统及装置 |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
US10049061B2 (en) | 2012-11-12 | 2018-08-14 | International Business Machines Corporation | Active memory device gather, scatter, and filter |
CN110795372A (zh) * | 2018-08-03 | 2020-02-14 | 扬智科技股份有限公司 | 数据处理装置及直接存储器访问方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10929174B2 (en) | Atomic object reads for in-memory rack-scale computing | |
CN107346351B (zh) | 用于基于源代码中定义的硬件要求来设计fpga的方法和系统 | |
Benkrid et al. | High performance biological pairwise sequence alignment: FPGA versus GPU versus cell BE versus GPP | |
Sukhwani et al. | Database analytics acceleration using FPGAs | |
Da Silva et al. | Performance Modeling for FPGAs: Extending the Roofline Model with High‐Level Synthesis Tools | |
US10452744B2 (en) | Memory management for sparse matrix multiplication | |
Cong et al. | An optimal microarchitecture for stencil computation acceleration based on non-uniform partitioning of data reuse buffers | |
CN108205433B (zh) | 用来加速稀疏矩阵乘密集向量以及稀疏向量乘密集向量乘法的存储器到存储器指令 | |
KR101768181B1 (ko) | 최적화된 브라우저 렌더링 프로세스 | |
CN104915322A (zh) | 一种卷积神经网络硬件加速方法及其axi总线ip核 | |
Tumeo et al. | Aho-Corasick string matching on shared and distributed-memory parallel architectures | |
Lee et al. | ActiveSort: Efficient external sorting using active SSDs in the MapReduce framework | |
Kung | Systolic communication | |
Zhang et al. | Performance analysis and optimization for SpMV based on aligned storage formats on an ARM processor | |
CN108369547A (zh) | 持久性主存储器中的日志的尾部 | |
CN102789377B (zh) | 处理指令分组信息的方法和装置 | |
CN101876948A (zh) | 在本地存储器中支持数据的不连续访问的方法和设备 | |
Polig et al. | Giving text analytics a boost | |
US10275230B2 (en) | Cache aware self-referential structure peeling | |
Que et al. | Remarn: a reconfigurable multi-threaded multi-core accelerator for recurrent neural networks | |
Haque et al. | Susesim: a fast simulation strategy to find optimal l1 cache configuration for embedded systems | |
CN103577604B (zh) | 一种用于Hadoop分布式环境的图像索引结构 | |
CN102736988A (zh) | 存储器管理装置、存储器管理方法和控制程序 | |
Kachris et al. | A MapReduce scratchpad memory for multi-core cloud computing applications | |
CN114510332A (zh) | 一种利用线程处理大文件的方法、处理装置及计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20101103 |