并行原子递增制造技术

技术编号:10685837 阅读:159 留言:0更新日期:2014-11-26 16:04
本发明专利技术的一些特定的示例性实施例提供了一种并行原子递增。一个vgather指令将存储器位置的值返回到多个处理单元。一个vgather_hit指令将命中的数目的函数返回到存储器位置。在一个实施例中,该函数是统一的。在另一实施例中,该函数是具有次序指定小于或等于收到返回值的处理单元的命中的数目。

【技术实现步骤摘要】
【专利摘要】本专利技术的一些特定的示例性实施例提供了一种并行原子递增。一个vgather指令将存储器位置的值返回到多个处理单元。一个vgather_hit指令将命中的数目的函数返回到存储器位置。在一个实施例中,该函数是统一的。在另一实施例中,该函数是具有次序指定小于或等于收到返回值的处理单元的命中的数目。【专利说明】并行原子递增
本说明书涉及并行处理的领域,并且更具体地涉及一种提供并行原子递增功能的微处理器。
技术介绍
并行处理,例如,由一个数字信号处理器(DSP)来执行以优化数字信号处理算法,在存储器访问操作中趋于密集。例如,一个DSP可以作为一个单指令,多数据(SIMD),或数据并行处理器。在SMD操作中,单指令被发送到一个数字信号处理器的多个处理单元,其中每个处理单元可以对不同的数据执行相同的操作。为了实现高数据吞吐量,具有SMD架构(或其它支持并行处理的处理器)的DSP的存储器组织支持多个、同步的数据访问。举一个例子,处理器架构可包括通过存储器互连网络架构互连到处理单元的多组存储器,以使得多于一个的数据操作对象可以在一个给定的循环过程中被加载到(被其访问)处理单 J Li ο 存储器互连网络架构通常包括为每一个各自的并行数据传输的互连网络。例如,如果为了执行一个操作,需要两个从存储器到处理单元的并行数据传输,存储器互连网络架构实现了一个互连网络将第一数据集从存储器传输到处理单元,以及另一个互连网络将第二数据集从存储器传输到处理单元。 【专利附图】【附图说明】 本专利技术可以结合附图并从下面的详细描述中得到很好的理解。需要强调的是,按照通常做法,各种特征不是按比例绘制,仅用于说明的目的。 图1是为提供一个并行原子递增指令的数字信号处理器的框图。 图2是一个数字信号处理器的处理单元的框图。 图3是表示一个微处理器执行并行原子递增指令的第一状态的框图。 图4是表示一个微处理器执行并行原子递增指令的另一个状态的框图。 图5是表示一个微处理器执行并行原子递增指令的又一个状态的框图。 图6是表示一个微处理器执行并行原子递增指令的再一个状态的框图。 图7是表示一个微处理器执行并行原子递增指令的再又一个状态的框图。 图8是表示一个微处理器执行并行原子递增指令的再又一个状态的框图。 图9是表示一个微处理器执行并行原子递增指令的再又一个状态的框图。 图10是用于提供并行原子递增指令的局部逻辑的方框图。
技术实现思路
在一个示例实施例中,公开了一种计算机可执行的方法,包括:接收多个对于一个存储器位置的同步读取请求;返回存储器位置的值和多个同步读取请求的函数的值;计算存储器位置的值和读取请求的数目的值的总和;将该总和写回到存储器位置。 在另一个示例性实施例中,公开了一种微处理器,包括多个被配置为同步访问存储器位置的处理单元,其中微处理器被配置为,当接收到多个对存储器位置的读取请求时,将包含在存储器位置的值和访问了存储器位置的处理单元的数目的函数的值返回到至少一个处理单元中。 在又一个示例性实施例中,公开了一种微处理器,其提供一个矢量命中指令,矢量命中指令被配置为在第一时分期间从多个处理单元接收多个指向存储器位置的读取请求;在第二时分期间返回到至少一个处理单元一个值,其为在第一时分期间为存储器位置提供了读取请求的处理单元的数目的函数。 【具体实施方式】 下面的描述提供了许多不同的实施例或示例,用于实施本专利技术的不同特征。部件和安排的具体实例描述如下,以简化本专利技术。当然,这些仅仅是示例,并且不旨在进行限制。进一步地,本专利技术可以在各种示例中重复附图标记和/或字母。这种重复是为了简化和清楚的目的,并不限于自身表明的所讨论的各种实施例和/或配置之间的关系。 原子递增通常是由一定种类的并行微处理器如图形处理单元(GPU)和数字信号处理器(DSP)提供的操作,并且在程序语言OpenCL中作为一个本地方法被提供。原子递增保证,如果多个线程对一个存储器位置执行相同的操作,结果是一致的。例如,假设名为“进程A”和“进程B”的两个线程都运行在一个数据集上来创建直方图,对一个确定的值都可以找到一个“命中点”,并访问计数值被存储的存储器位置,例如十六进制位置0x100。假设该位置0x100包含值” 0”,进程A会从0x100处读取值0,并将其加载到一个寄存器。在下一个时钟周期,进程A将该值递增到“ I ”,但进程B在进程A递增时可能也从0x100读取值“O”。进程A然后将“ I ”写到0x100,最终进程B将“ I ”写到0x00。 其结果是不正确的。因为两个线程的每一个对该值发现一个命中,正确的递增值应为“2”。所以一个原子递增操作被提供以保证如果两个线程访问存储器位置,正确的值“2”将被写入。原子递增函数的一般的原型可为以下形式: int atomic_inc (int*p) 原子递增接受一个指向一个存储器位置的指针,锁定所指向的位置,递增所指向的值,并返回旧的指向值。因此,在上例中,两个线程可以调用: old = atomic_inc (0x100); 当进程A调用atomicjnc,一个锁定被放置在存储器位置0x100。当进程B在锁定到位时试图读取位置0x100,将须等进程A完成了递增操作。进程A将该值递增到“1”,并收到返回的“0”(旧值)。方法B然后被允许访问该存储位置,将该值递增到“2”,并且接收“I”作为返回值。 一个依赖于锁定状态的原子操作会内在地造成其它的并行进程线性化。例如,进程A和进程B可运行在单个数据集的分离的块。这两个可以同时为一个特定的值定位命中,并为该值更新直方图输入。但是,因为处理A锁定了存储器位置,进程B将被强制等待,就好像递增是一个串行操作。 但是,原子递增操作的并行版本允许两个进程A和进程B正确地并行递增存储器位置。例如,一个单指令多数据(SMD)的微处理器可提供多个处理单元(PEs),每个工作在一个数据集的单独的块以形成一个直方图。如果三个PE设备在大致相同的时间定位同一个值,每一个都会同时通过一个特定的“vgather”指令对OxlOO发出一个读取请求。作为对vgather指令的响应,每个PE接收第一寄存器的旧值,和第二寄存器中访问了存储器位置的PE的数目。本领域技术人员也会认识到,该方法可以通过对任一值返回一个简单的、可逆的函数而被很容易的替换,例如一个常数或一个乘数的偏移。对本说明书的目的,对返回值的任何简单变换函数被当作返回值本身的完全等效。 因此,在执行“vgather”指令后,每个PE都知道旧值,并且知道有三个PE访问了该值。每个PE对该值递增三次,而不是对旧值递增一次。然后,这些PE的每一个对存储器位置发出一个写请求,正确的值被存储。 该指令的一个更广义的版本,还可以或可选提供,并且对一定的压缩操作更加有用。在这种情况下,PE由一个有序指定值确定优先级。例如,如果一个微处理器包含8个PE,它们将被编号为0-7。在这个“vgather”指令版本中,每一个处理器接收发出读去请求的PE的数目的函数,尤其是在本实施例中,具有指定值的PE的数目小于或等于发出请求的PE的数目。因此举例来说,在PE0、1和3在本文档来自技高网
...
并行原子递增

【技术保护点】
一种计算机可执行的方法,包括:接收多个对于一个存储器位置的同步读取请求;返回存储器位置的值和多个同步读取请求的函数的值;计算存储器位置的值和读取请求的数目的值的总和;将该总和写回到存储器位置。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:B·勒纳J·L·瑞德福德
申请(专利权)人:美国亚德诺半导体公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1