CN102591843B - 多核处理器的核间通信方法 - Google Patents
多核处理器的核间通信方法 Download PDFInfo
- Publication number
- CN102591843B CN102591843B CN201110452294.8A CN201110452294A CN102591843B CN 102591843 B CN102591843 B CN 102591843B CN 201110452294 A CN201110452294 A CN 201110452294A CN 102591843 B CN102591843 B CN 102591843B
- Authority
- CN
- China
- Prior art keywords
- queue
- consumer
- producer
- team
- 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.)
- Expired - Fee Related
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种多核处理器的核间通信方法,所述方法中运行在不同个处理核上的生产者和消费者之间通过单生产者/单消费者模式的无锁先进先出队列来进行通信,其特征在于所述方法还包括在核间通信前生产者端在生产数据前执行提前探测操作步骤来判断队列中即将被执行入队操作的一批位置是否为空;仅当一批位置为空时,生产者才开始进行入队操作的步骤;和/或消费者端在消费数据前执行提前探测操作步骤来判断队列中即将被执行出队操作的一批位置是否已被执行过入队操作;仅当一批位置已被执行入队操作,消费者才开始出队操作的步骤。该方法使多核处理器的核间通信有较大性能提升且性能稳定;仅依赖于软件实现对硬件无特殊要求,结构简单占用资源少;不依赖于任何互斥操作及原子操作移植性强。
Description
技术领域
本发明涉及一种无锁先进先出队列(lock-free FIFO),并特别地涉及一种简单,高效,易于实现的单生产者/单消费者模式无锁先进先出队列(single-producer-single-consumer lock-free FIFO)的方法和装置,该无锁先进先出队列被构造为用来在共享存储器环境下提供简单,高效,易于实现的通信方法。
背景技术
单生产者/单消费者模式的先进先出队列是计算机科学中一种重要的数据结构,特别地,单生产者/单消费者模式的无锁先进先出队列一直被用来构造快速,高效的通信机制。如无特殊说明,本专利申请文件提及的无锁先进先出队列均指单生产者/单消费者模式的无锁先进先出队列。例如,随着处理器指令集并行化空间的日益减少,再加上对能耗关注程度的增加,单处理器的发展速度正在逐步减慢,这最终导致多核处理器系统时代的到来。为充分发掘多核处理器系统的性能,运行在多核系统上的工作任务需要采用适当的并行化方法并行化。基本的并行化方法包括:任务级并行(TaskParallelism),数据级并行(Data Parallelism),流水线并行(PipelineParallelism)。下面以流水线并行的方法为例子来说明无锁先进先出队列在软件并行化领域的重要性。
以下结合图1对流水线并行化方法进行描述。假设工作A在并行化的过程中被分割为依次相连的三个部分,分别为工作1,工作2,工作3,通过适当的绑定映射,可以让工作1运行在处理核1上,工作2运行在处理核2上,工作3运行在处理核3上。当一个任务到来时,运行在处理核1上的工作1首先对该任务进行处理,然后将该任务通过一条先进先出队列传递给工作2,运行在处理核2上的工作2对该任务进行处理,然后将该任务通过一条先进先出队列传递给工作3,处理核3完成对该任务的处理。处理核3的工作完成后,该任务被全部完成。
参照图1所描述的,在流水线并行方法中,处理核之间通过单生产者/单消费者模式先进先出队列依次相连,一方面,该些队列将多个处理核有效地组织在了一起,充分利用了硬件资源,另外一方面,在流水线并行方法中,单生产者/单消费者模式先进先出队列处于数据处理的关键路径上,该队列的性能直接影响到流水线并行化方法的性能,从而影响应用软件运行在多核体系结构上的性能。
下面结合图2所示传统无锁先进先出队列示例来阐述传统无锁先进先出队列的方法:该些无锁先进先出队列通常是驻留在共享存储器中的一块内存区域。多个处理核或设备共享该内存区域,特别地,生产者2生产数据,并将该些数据依次放入到共享内存区域3,消费者1依次将共享内存区域中的数据取出,从而达到通讯的目的。
对传统的单生产者/单消费者模式队列的操作可通过以下代码进行描述:
在该无锁先进先出队列的例子中,生产者2运行在第一个处理核上,产生新数据,使用enqueue函数进行入队列操作;消费者1运行在第二个处理核上,消耗数据,使用dequeue函数进行出队列操作;buffer为共享内存区域3。在广泛使用的多核处理器系统中(例如X86架构),由于该些处理器支持顺序一致性访存协议(sequential consistency),以上代码进行描述的单生产者/单消费者模式队列可以在不加锁定的情况下安全地被生产者及消费者并发访问。由于不需要锁定操作,该些先进先出无锁队列在性能上优于传统的基于锁定的先进先出队列。
具体地,传统先进先出无锁队列的工作方式如下:生产者首先判断队列是否已满,如果队列未满,那么生产者做入队操作,将数据写入队列中,然后,生产者指向队列的下一元素位置,作为一个例子,可以使用伪代码:head=(head+1)%size,其中size为队列的大小,使用取模运算来确定队列头部的值。消费者首先判断队列是否为空,如果队列不空,那么消费者做出队操作,将数据从队列中读出,然后,消费者指向队列的下一元素位置,作为一个例子,可以使用伪代码:tail=(tail+1)%size。
下面结合图3阐述广泛使用的多核处理器的系统结构的特点并指出传统无锁先进先出队列中存在的重要缺陷。如图3所示,多核处理器系统中,多个处理核通过同一条系统总线共享一个物理储存器,在处理核与物理储存器间是多层次的处理核缓存(cache)。处理核缓存的引入,一方面减少了处理核对数据的平均访问时间和处理核对存储器带宽的需求;另外一方面,由于同一数据可能同时存在于多个处理核缓存中,多核处理器系统需要运行缓存一致性协议(cache coherence protocols)来维护多个数据副本的一致性。
处理核缓存的最小单位定义为缓存块(cache line),处理核缓存以缓存块为单位与存储器进行数据交换。因此,假设某多核处理器系统缓存块大小为64字节(byte),处理核对该缓存块64字节内任意字节的读或写操作均可能引起系统对该缓存块运行缓存一致性协议。例如,以图3为例,系统中有两个变量A和B,变量A被处理核301修改,变量B被处理核302修改,理想的状况下处理核301及302不会相互干扰,处理核301的硬件缓存中存有变量A的备份,处理核302的硬件缓存中存有变量B的备份。但若A和B处在同一个缓存块内,在处理核301修改变量A的同时,由于变量B处在同一个缓存块内,变量B在处理核302的缓存中的备份需要被无效,之后,当处理核302需要修改变量B时,由于变量B已被无效,处理核302需要从存储器中重新将变量B载入缓存中。这种现象称为假共享缓存缺失,假共享缓存缺失的发生会极大地降低系统性能。
在实现本发明的过程中,发明人发现传统无锁先进先出队列存在以下主要缺陷:
当生产者生产数据的速度快于消费者消费数据的速度时,生产者追上消费者时并等待可用存储单元;当消费者消费数据的速度快于生产者生产数据的速度时,消费者追上生产者并等待可用数据,两种情况下生产者和消费者都同时操作同一缓存块(cache line)内的数据,为维护多个处理核缓存中数据的一致性,系统运行缓存一致性协议,造成伪共享缓存缺失。
下面以图4为例来具体说明传统先进先出队列中的这种缺陷。图4描述了当消费者1消费数据的速度快于生产者2生产数据的速度时,消费者1追上生产者的一种情况,队列3中标记为阴影的位置表示已被生产者2写入数据。在该种情况下,当生产者2生产一个数据a并放入队列3中时,该数据所在的缓存块在消费者1一端的硬件缓存中的备份将被无效。在该种情况下,消费者1每读取一个数据都需要从存储器中将相应的缓存块装入硬件缓存中,发生伪共享缺失。实验表明,当先进先出队列发生伪共享缺失时,其性能会发生数十倍至百倍的性能损失。
基于前述的原因,需要一种适应多核处理器系统结构特点的无锁先进先出队列来支持核间通信。具体地,该队列必须能够消除伪共享缓存缺失从而减少多核处理器系统中缓存一致性协议的开销以达到高效的数据传输的目的。本发明因此而来。
发明内容
本发明所要解决的技术问题是:克服在支持共享缓存的系统中,传统无锁先进先出队列存在伪共享缺失,缓存一致性协议开销过大的缺点,提供一种仅依赖于软件实现的、适应于多核处理器系统特点的无锁先进先出队列,以提高多核处理器操作队列的效率。
为了解决现有技术中的这些问题,本发明提供的技术方案是:
一种多核处理器的核间通信方法,所述方法中运行在不同个处理核上的生产者和消费者之间通过单生产者/单消费者模式的无锁先进先出队列来进行通信,其特征在于所述方法还包括在核间通信前生产者端在生产数据前执行提前探测操作步骤来判断队列中即将被执行入队操作的一批位置是否为空;仅当一批位置为空时,生产者才开始进行入队操作的步骤;和/或消费者端在消费数据前执行提前探测操作步骤来判断队列中即将被执行出队操作的一批位置是否已被执行过入队操作;仅当一批位置已被执行入队操作,消费者才开始出队操作的步骤。
优选的,所述生产者或消费者为运行在不同处理核上的处理实体,所述处理实体选自单个的进程、任务或线程。
优选的,所述处理核为任一种共享存储多核处理器系统中的一个处理单元。
优选的,所述的生产者一端的提前探测操作为生产者判断其所在位置之后的第N个位置是否可以被执行入队操作;所述的消费者一端的提前探测操作为消费者判断其所在位置之后的第N个位置是否已被生产者执行过入队操作并可以被执行出队操作N为大于等于1的自然数。
优选的,所述位置为将队列在共享存储器中对应的内存块依据队列中放置的元素的大小进行分割,并递增地从0开始为每一个划分后的元素块标记的编号;所述提前探测操作的距离大于处理器缓存块(cache line)的大小并为处理器缓存块(cache line)的正整数倍。
优选的,所述方法还包括生产者一端或消费者一端进行实施调整提前探测操作的距离来减少数据因缓存在队列中引起的时延的步骤。
优选的,所述方法调整提前探测操作距离的方法是在生产者在每次探测失败后将探测距离减少并再次执行探测操作,消费者在每次探测失败后将探测距离减少并再次执行探测操作的步骤,所述探测距离减少后需要确定当前的探测距离大于零。
优选的,所述方法中入队操作步骤包括将数据写入队列中入队操作位置的标记所指定的位置;以及将指定生产者入队操作位置的标记指向队列中的下一位置的步骤。
优选的,所述方法中出队操作步骤包括使用队列中出队操作位置的标记所制定的位置的数据;以及将指定消费者出队操作位置的标记指向队列中的下一位置的步骤。
优选的,所述方法中队列中的下一位置指队列中当前元素块的下一元素块,当当前元素块到达队列尾时,下一位置指队列中的第一个元素块。
本发明提供的单生产者/单消费者无锁先进先出队列,生产者一端在生产数据前执行提前探测操作来判断队列中即将被执行入队操作的一批位置是否为空,仅当一批位置为空,生产者才开始入队操作,消费者一端在消费数据前执行提前探测操作来判断队列中即将被执行出队操作的一批位置是否已被执行过入队操作,仅当一批位置已被执行入队操作,消费者才开始出队操作,在极端情况下,生产者一端或消费者一端自动实施探测距离调整来减少数据因缓存在队列中引起的时延。
优选的,所述的生产者及消费者分别指运行在两个处理核上的处理实体,通过队列进行通信。优选的,所述的处理核是任一种共享存储多核处理器系统中的一个处理单元。优选的,所述的处理实体包括一个进程或任务。优选的,所述的处理实体还包括一个进中的线程。
优选的,所述的生产者一端的提前探测是指生产者判断其所在位置之后的第N个位置是否可以被执行入队操作,所述的消费者一端的提前探测是指消费者判断其所在位置之后的第N个位置是否已被生产者执行过入队操作并可以被执行出队操作。
优选的,所述的位置为将队列在共享存储器中对应的内存块依据队列中放置的元素的大小进行分割,并递增地从0开始为每一个划分后的元素块标记的编号。优选的,所述的提前探测的距离大于处理器缓存块(cache line)的大小并为处理器缓存块(cache line)的正整数倍。
优选的,所述的入队操作步骤包括:将数据写入队列中入队操作位置的标记所指定的位置;以及将指定生产者入队操作位置的标记指向队列中的下一位置。优选的,所述的出队操作步骤包括:使用队列中出队操作位置的标记所制定的位置的数据;以及将指定消费者出队操作位置的标记指向队列中的下一位置。
优选的,所述的下一位置指队列中当前元素块的下一元素块,当当前元素块到达队列尾时,下一位置指队列中的第一个元素块。
优选的,所述的极端情况指在某一时间段内生产者入队操作的速率很低,或者在某一时间段内消费者出队操作的速率很低。优选的,所述的缓存在队列中引起的时延是指某一数据从被生产者执行入队操作至其被消费者执行出队操作之间的时间差。优选的,所述的动态探测距离调整是为了减少极端情况下提前探测带来的数据缓存在队列中引起的时延。
优选的,所述的动态探测距离调整是指在生产者在每次探测失败后将探测距离减少并再次执行探测操作,消费者在每次探测失败后将探测距离减少并再次执行探测操作。优选的,所述的探测距离减少是指将探测距离减少一定数量并保证探测距离大于零。
本发明为解决上述技术问题所采用的技术方案是:所述提供一种适用于多核处理器系统的无锁先进先出队列,该队列生产者一端在生产数据前执行提前探测操作来判断队列中即将被执行入队操作的一批位置是否为空,仅当一批位置为空,生产者才开始入队操作,消费者一端在消费数据前执行提前探测操作来判断队列中即将被执行出队操作的一批位置是否已被执行过入队操作,仅当一批位置已被执行入队操作,消费者才开始出队操作。本发明提供了自动调节探测距离的方法来解决提前探测可能带来的数据延迟等问题。
本发明的有益效果是:通过提前探测,本发明一方面有效地避免了生产者及消费者发生追尾的情况,从而杜绝了伪共享缓存缺失(cache thrashing)的发生,另外一方面有效地为硬件上的预取(hardware prefetching)提供了可能性,从而极大地减少了对共享存储器的读写操作次数,极大地减少了多核处理器系统的缓存一致性协议开销。因此本发明在多核处理器系统中性能有极大提升。本发明提供的自动调节探测距离的方法有效地减少了提前探测带来的数据延迟问题,仅在极端情况下被执行,不影响本方面的有益效果。本发明结构简单占用资源少,不依赖于特殊的硬件及任何同步操作或原子操作,不依赖于软件或硬件定时器,具有极高的可移植性。
相对于现有技术中的方案,本发明的优点是:
本发明公开了一种简单,高效,易于实现的单生产者/单消费者模式无锁先进先出队列(lock-free FIFO)的方法和装置。其在生产者一端或消费者一端执行提前探测操作,在极端情况下,生产者一端或消费者一端自动实施探测距离调整来减少数据因缓存在队列中引起的时延。本发明一方面杜绝了伪共享缓存缺失(cache thrashing)的发生,另外一方面有效地为硬件上的预取(hardware prefetching)创造了条件。本发明公开的无锁先进先出队列的性能有较大提升且性能稳定;仅依赖于软件实现对硬件无特殊要求,结构简单占用资源少;不依赖于任何互斥操作及原子操作移植性强。
附图说明
下面结合附图及实施例对本发明作进一步描述:
图1描述流水线并行化方法,以及本实施例在并行化方法中的作用;
图2为传统先进先出队列的结构示意图;
图3描述多核处理器体系结构的结构特征;
图4描述传统先进先出无锁队列执行时生产者和消费者发生追尾现象,进而导致伪共享缺失发生的一个实例例;
图5描述根据本发明的一个方面,无锁队列生产者一端执行提前探测的一个实施例;
图6描述根据本发明的一个方面,为防止提前探测带来的数据延迟等问题,无锁队列生产者一端自动调节探测距离的一个实施例。
图中各附图标记的含义如下:
1 消费者; 2 生产者;
3 无锁先进先出队列; 301 处理核1;
302 处理核2; 401 传统队列探测;
501 第一次提前探测; 502 第二次提前探测;
503 第三次提前探测; 504 第四次提前探测;
505 第五次提前探测。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例
根据本发明的一个方面,图5描述了本发明的一个在消费者1一端执行提前探测的实施例。对比图4中传统无锁先进先出队列中消费者1每次只探测当前所在位置401来判断是否已有可消费的数据,该实施例的特别之处在于:消费者1通过探测当前位置之后的第N个位置501来判断当前位置之后的N个位置是否已包含可用数据。如果位置501已包含可用数据,根据先进先出队列的固有特征不难得出,消费者1当前所在位置到位置501之间的N个位置均已包含可用数据。
具体来说,该实施例中消费者1消费数据的步骤与传统先进先出队列中消费者消费数据的步骤相比较,特别之处在于:一方面,消费者1在为判断队列中是否已包含可用数据而执行的探测操作中其探测距离为N,另外一方面,如果探测成功则消费者1一端在接下来的N次消费操作中不再需要执行探测操作,如果探测失败则消费者1将等待并重复探测操作。
具体来说,该实施例中消费者1消费数据的步骤具体如下:程序初始,消费者1探测当前位置之后的第N个位置。如果当前位置之后的第N个位置已包含可用数据,则消费者开始消费数据,并在接下来的N次消费操作中不再进行探测操作;如果当前位置之后的第N个位置不包含可用数据,则消费者等待一段时间后再重复探测操作,消费者直至探测成功才开始消费操作。
具体来说,消费者的探测操作是指消费者一端判断队列中的某个特定位置是否已经包含由生产者放入的数据,生产者的探测操作是指生产者一端判断队列中的某个特定位置中的数据是否已经被消费者消费并且该位置已经合适生产者写入。
具体来说,在一些实施例中,生产者和消费者的判断操作可依赖于队列3中的元素是否包含特殊元素,例如,图5中队列3中所有元素均初始化为NULL,消费者探测到NULL则可判断该位置可以被进行入队操作,例如位置501,并将数据写入该位置;当消费者探测到位置501中的内容不为NULL时则可判断该位置可以被消费,消费者将位置501中的数据进行出队操作并重新写入NULL。在另外一些实施例中,生产者和消费者的判断可操作依赖于全局变量head或者tail,具体地,生产者1通过修改全局变量head来记录自己的当前位置,消费者2通过修改全局变量tail来记录自己的当前位置,在该些实施例中,生产者1通过读取全局变量tail来获取消费者2的位置并进行判断操作,消费者2通过读取全局变量head来获取生产者1的位置并进行判断操作。
进一步来看,本发明通过在消费者端和生产者端引入提前探测,有效地避免了生产者和消费者之间发生追尾,避免了伪共享缺失的发生,从而极大地提高了无锁先进先出队列的性能。具体地,在本实施例中,以图5为例,通过在消费者1一端引入提前探测机制,消费者1被强制与生产者2隔开了至少N个元素,具体地,如果消费者1与生产者2之间的距离小于N,则消费者1一端的提前探测操作失败,消费者1停止消费操作,在等待一段时间后再重复探测操作,消费者1直至探测成功才进行消费操作,从而避免了因速度过快而与生产者2发生追尾。
就本发明较佳的实施方式来看,提前探测距离应大于一条硬件缓存块(cache line)的大小,并为一条硬件缓存块大小的整数倍。
在该实施例中,由于提前探测的引入,可能引起数据传输的延迟。具体地,以图6为例,生产者2产生了两个数据,消费者1恰好执行提前探测操作,由于探测距离为N,消费者1一端的探测操作501失败,消费者1在等待一段时间后重复探测501的操作,从而避免了消费者1追上生产者2并发生伪共享缺失的情形。
容易看出,在该种情况下,如果生产者2数据到达频率较低,消费者1一端的提前探测操作将引入较大的时延。以图6为例,仅当生产者2写入N-2个数据之后,消费者1一端的提前探测操作501才能获得成功,队列3中的数据才能开始被消费者1进行消费。
针对提前探测可能引入数据时延的问题,本发明提供了一种动态调整探测距离来减少数据时延并保持本发明有益效果的方法。具体地,消费者及生产者在执行探测操作失败时将探测距离递减并再次执行探测操作,直至探测成功或探测距离减少为1。
具体来说,探测距离递减是指将探测距离N减少并保证N大于零。就本发明的较佳实施例来看,探测距离递减可采用下列伪代码执行:N=N>>1,即在每次探测失败后将探测距离减少为上一次探测距离的一半且保证探测距离大于零。以图6为例,在实施探测距离递减的方法之后,消费者1一端在执行探测501失败后,将探测距离减半并执行探测502,在执行探测503,504失败之后,消费者1将探测距离N减少为2并执行探测505,探测操作505成功,消费者1开始消费队列3中的数据。
具体地,以图6为例,探测距离递减的特别之处在于:不实施探测距离递减的实施例中仅当队列3中已被生产者写入至少N个元素,消费者才开始消费数据;在实施探测距离递减的实施例中,在生产者2一端数据到达缓慢的极端情况下,消费者1可主动地减少探测距离,减少数据从被生产者2入队到被消费者1出队之间的时延。
需要注意的是,本发明中探测距离递减的功能,仅仅是为了处理极端情况,在实际中其发生的频率很低,因此由探测距离递减带来的不能完全避免伪共享缺失发生的事实并不会影响到本发明带来的有益效果。
结合本发明一较佳的在生产者一端和消费者一端执行提前探测并仅在消费者一端执行探测距离递减的实施方式来看,该先进先出无锁队列的行为可用以下代码描述:
在本发明中,生产者及消费者分别指运行系统中的处理实体,生产者及消费者通过本发明的一个实施例进行通信。在某种情况下,该些处理实体为进程或者任务,并且本发明的实施例被用来在不同进程或者任务间进行通信;在另外一种情况下,该处理实体为一个进程的线程,并且本发明的实施例被用来在一个进程的不同线程间进行通信。在生产者及消费者通信的过程中,队列中传递的元素的类型,包括但不局限于,数据本身,消息;对占用较大内存空间的元素,通过在队列中传递该类元素在共享存储器中的地址的指针达到通信的目的,尽量减少队列中的通信量。队列、入队以及出队操作可以被用于许多情形,包括,但并不局限于,进程间通信和进程内线程内通信。
在本发明的一个实施例中,在队列上入队/出队元素前,该队列被初始化。例如,char queue[size]被用来初始化该队列。队列的大小是缓存块(cacheline)大小的正整数倍并足够大以使该队列不会频繁达到满的状态,例如,size的大小设定为1024。为使队列queue中紧邻的元素尽可能缓存到处理核缓存的同一缓存块中,在初始化该队列时,强制指定队列在共享存储器中的起始位置,例如,该实施例中,队列使用属性__attribute__((aligned(64)))。
实验结果表明,该实施例比传统无锁先进先出队列性能提高5倍以上,且在多种多核系统及多种测试用例中,稳定性有极大的提升,本发明提出的无锁先进先出队列在实现中不需要依赖定时器等额外装置,易于实现及实施。
上面详细地描述了结合系统硬件缓存的特点提高无锁先进先出队列的效率的方法。通过分析多核处理器系统结构的特殊性及传统无锁先进先出队列引起系统额外开销的原因,本发明引入基于处理核缓存优化的提前探测技术,使操作队列的效率得到提高。通过自动调节探测距离,生产者及消费者可避免数据延迟加大等极端情况的发生。
但上面描述的仅仅是例子。在不脱离本发明精神的情况下可以有许多不同变化。例如,尽管上面提供了一种多核处理系统环境,但是其他的环境也可以从本发明中获得益处。例如,尽管在图3中选用了通过同一条系统总线共享一个物理储存器的例子,许多具有硬件缓存的环境也能从本发明中得到益处,这包括但不限于,共享二级处理器缓存(share L2 cache)多核处理器系统,通过DMA方式与CPU共享存储器的外部设备,以NUMA(NonUniform Memory Access Architecture)结构实现的计算机系统等。
本发明中,一些实施例可仅在生产者一端实施提前探测,另外一些实施例中可仅在消费者一端实施提前探测,另外一些实施例中可同时在生产者一端和消费者一端实施提前探测。尽管该实施例中,仅在消费者一端实施探测距离动态调整,在不脱离本发明精神的情况下,生产者一端也可以实施探测距离动态调整。
本发明所描述的队列不仅仅可用于通信。另外,尽管该实施例中char类型数据被放置在队列中,在其他的实施例中,任何数据类型或者消息以及其他附加消息可被设置在队列中。因此,尽管该实施例的队列中每个元素大小为1个单位,在其他的实施例中,队列中的每个元素大小不局限于此。
此外,尽管在本实施例中,缓存块的大小被假设为64字节,私有缓存区大小为缓存块大小的1倍,size的大小设定为1024,队列在共享存储器中的起始位置64字节对齐,队列以数据是否为空(NULL)来标识该数据是否有效。在不违背本发明精神的情况下,实际操作中,它们的值可以更改。
这里描述的附图仅仅是一些例子。在不脱离本发明精神的情况下,这里所述的图可以有不同的变化。本发明可以在软件、固件、硬件或者其结合中实现。本发明可以包括在具有计算机可用介质的物品中。该介质在其中具有例如计算机可读程序代码装置或者逻辑(例如指令,代码,命令等)来提供和使用本发明的能力。该制造物品可作为计算机系统的一部分或者单独出售。
上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
Claims (7)
1.一种多核处理器的核间通信方法,所述方法中运行在不同个处理核上的生产者和消费者之间通过单生产者/单消费者模式的无锁先进先出队列来进行通信,其特征在于所述方法还包括在核间通信前生产者端在生产数据前执行提前探测操作步骤来判断队列中即将被执行入队操作的一批位置是否为空,仅当一批位置为空时,生产者才开始进行入队操作的步骤;或者还包括在核间通信前消费者端在消费数据前执行提前探测操作步骤来判断队列中即将被执行出队操作的一批位置是否已被执行过入队操作,仅当一批位置已被执行入队操作,消费者才开始出队操作的步骤;其中生产者一端或消费者一端通过实施调整提前探测操作的距离来减少数据因缓存在队列中引起的时延;
所述的生产者一端的提前探测操作为生产者判断其所在位置之后的第N个位置是否可以被执行入队操作;所述的消费者一端的提前探测操作为消费者判断其所在位置之后的第N个位置是否已被生产者执行过入队操作并可以被执行出队操作;N为大于等于1的自然数;
调整提前探测操作距离的方法是在生产者在每次探测失败后将探测距离减少并再次执行探测操作,消费者在每次探测失败后将探测距离减少并再次执行探测操作的步骤,所述探测距离减少后需要确定当前的探测距离大于零。
2.根据权利要求1所述的方法,其特征在于所述生产者或消费者为运行在不同处理核上的处理实体,所述处理实体选自单个的进程、任务或线程。
3.根据权利要求2所述的方法,其特征在于所述处理核为任一种共享存储多核处理器系统中的一个处理单元。
4.根据权利要求1所述的方法,其特征在于所述位置为将队列在共享存储器中对应的内存块依据队列中放置的元素的大小进行分割,并递增地从0开始为每一个划分后的元素块标记的编号;所述提前探测操作的距离大于处理器缓存块(cache line)的大小并为处理器缓存块(cache line)的大小的正整数倍。
5.根据权利要求1所述的方法,其特征在于所述方法中入队操作步骤包括将数据写入队列中入队操作位置的标记所指定的位置;以及将指定生产者入队操作位置的标记指向队列中的下一位置的步骤。
6.根据权利要求1所述的方法,其特征在于所述方法中出队操作步骤包括使用队列中出队操作位置的标记所指定的位置的数据;以及将指定消费者出队操作位置的标记指向队列中的下一位置的步骤。
7.根据权利要求5或6所述的方法,其特征在于所述方法中队列中的下一位置指队列中当前元素块的下一元素块,当当前元素块到达队列尾时,下一位置指队列中的第一个元素块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110452294.8A CN102591843B (zh) | 2011-12-30 | 2011-12-30 | 多核处理器的核间通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110452294.8A CN102591843B (zh) | 2011-12-30 | 2011-12-30 | 多核处理器的核间通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591843A CN102591843A (zh) | 2012-07-18 |
CN102591843B true CN102591843B (zh) | 2014-07-16 |
Family
ID=46480516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110452294.8A Expired - Fee Related CN102591843B (zh) | 2011-12-30 | 2011-12-30 | 多核处理器的核间通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102591843B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281495B (zh) * | 2014-10-13 | 2017-04-26 | 湖南农业大学 | 多核处理器共享高速缓存任务调度方法 |
US20170289242A1 (en) * | 2016-03-31 | 2017-10-05 | David Keppel | Technologies for dynamic work queue management |
CN106533977B (zh) * | 2016-11-02 | 2019-05-17 | 南京邮电大学 | 一种云数据中心的数据处理方法 |
CN107220069B (zh) * | 2017-07-03 | 2020-06-05 | 中国科学院计算技术研究所 | 一种针对非易失性内存的Shuffle方法 |
CN107562685B (zh) * | 2017-09-12 | 2020-06-09 | 南京国电南自电网自动化有限公司 | 一种基于延时补偿的多核处理器核心间数据交互的方法 |
CN108009429B (zh) * | 2017-12-11 | 2021-09-03 | 北京奇虎科技有限公司 | 一种补丁函数生成方法及装置 |
CN110046049A (zh) * | 2018-01-15 | 2019-07-23 | 迈普通信技术股份有限公司 | 队列管理方法、装置及数据通信设备 |
CN108345561B (zh) * | 2018-01-30 | 2021-08-10 | 南京邮电大学 | 一种队列通信控制方法 |
CN108509186B (zh) * | 2018-02-28 | 2021-06-15 | 南京邮电大学 | 一种队列cas原子操作控制方法 |
CN109753479B (zh) * | 2018-12-28 | 2021-05-25 | 杭州迪普科技股份有限公司 | 一种数据下发方法及装置、设备、介质 |
CN110362530B (zh) * | 2019-07-17 | 2023-02-03 | 电子科技大学 | 一种基于并行流水线架构的数据链盲信号处理方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853149A (zh) * | 2009-03-31 | 2010-10-06 | 张力 | 多核系统中单生产者/单消费者队列的处理方法及装置 |
-
2011
- 2011-12-30 CN CN201110452294.8A patent/CN102591843B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853149A (zh) * | 2009-03-31 | 2010-10-06 | 张力 | 多核系统中单生产者/单消费者队列的处理方法及装置 |
Non-Patent Citations (3)
Title |
---|
Distributed Processing (IPDPS), 2010 IEEE International Symposium on》.2010,第4页左栏倒数第1-3行,右栏倒数第1-4行,第5页左栏第1-11行,右栏第6-7行. * |
Lee P.P.C |
Lee,P.P.C,etal..A lock-free, cache-efficient multi-core synchronization mechanism for line-rate network traffic monitoring.《Parallel & * |
Also Published As
Publication number | Publication date |
---|---|
CN102591843A (zh) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102591843B (zh) | 多核处理器的核间通信方法 | |
US10877766B2 (en) | Embedded scheduling of hardware resources for hardware acceleration | |
US9733831B2 (en) | Generation-based memory synchronization in a multiprocessor system with weakly consistent memory accesses | |
US8140828B2 (en) | Handling transaction buffer overflow in multiprocessor by re-executing after waiting for peer processors to complete pending transactions and bypassing the buffer | |
US8180972B2 (en) | Reducing remote reads of memory in a hybrid computing environment by maintaining remote memory values locally | |
Hunt et al. | Characterizing the performance and energy efficiency of lock-free data structures | |
CN101853149A (zh) | 多核系统中单生产者/单消费者队列的处理方法及装置 | |
CN102693162A (zh) | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 | |
US10031697B2 (en) | Random-access disjoint concurrent sparse writes to heterogeneous buffers | |
US9244734B2 (en) | Mechanism of supporting sub-communicator collectives with o(64) counters as opposed to one counter for each sub-communicator | |
US8473683B2 (en) | Ordering of guarded and unguarded stores for no-sync I/O | |
CN111209123A (zh) | 一种本地存储io协议栈数据交互方法和装置 | |
CN103019655A (zh) | 面向多核微处理器的内存拷贝加速方法及装置 | |
CN106802824A (zh) | 一种基于Disruptor的数据收发方法 | |
TW201543357A (zh) | 基於同時多執行緒(smt)的中央處理單元以及用於檢測指令的資料相關性的裝置 | |
JP7450728B2 (ja) | 協調ワークスティーリングスケジューラ | |
Zhou et al. | LPVM: a step towards multithread PVM | |
Gough et al. | Kernel scalability—expanding the horizon beyond fine grain locks | |
US8756604B2 (en) | Async wrapper handling execution of asynchronous operations for synchronous and asynchronous routines | |
CN112783511B (zh) | 一种栅元少群参数计算模块程序的优化方法、系统、终端 | |
CN114371920A (zh) | 一种基于图形处理器加速优化的网络功能虚拟化系统 | |
WO2016041150A1 (zh) | 并行访问方法及系统 | |
US20190042332A1 (en) | Hardware locking primitive system for hardware and methods for generating same | |
CN105183668A (zh) | 缓存刷新方法及装置 | |
Meng et al. | RING: NUMA-aware message-batching runtime for data-intensive applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140716 Termination date: 20191230 |
|
CF01 | Termination of patent right due to non-payment of annual fee |