CN101398753A - 用于执行扫描运算的系统、方法及计算机程序产品 - Google Patents
用于执行扫描运算的系统、方法及计算机程序产品 Download PDFInfo
- Publication number
- CN101398753A CN101398753A CNA2008101458929A CN200810145892A CN101398753A CN 101398753 A CN101398753 A CN 101398753A CN A2008101458929 A CNA2008101458929 A CN A2008101458929A CN 200810145892 A CN200810145892 A CN 200810145892A CN 101398753 A CN101398753 A CN 101398753A
- Authority
- CN
- China
- Prior art keywords
- thread
- scan operation
- array
- predetermined number
- idx
- 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
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000004590 computer program Methods 0.000 title claims abstract description 9
- 238000012545 processing Methods 0.000 description 13
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 239000004065 semiconductor Substances 0.000 description 5
- 230000004888 barrier function Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000005036 potential barrier Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000001846 repelling effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000004087 circulation Effects 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90348—Query processing by searching ordered data, e.g. alpha-numerically ordered data
-
- 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
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- 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/46—Multiprogramming arrangements
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Multimedia (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Image Processing (AREA)
- Image Generation (AREA)
- Multi Processors (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种用于有效地执行扫描运算的系统、方法及计算机程序产品。在使用中,通过利用并行处理器架构来遍历元阵列。此并行处理器架构包含各自能够物理上并行执行预定数目的线程的多个处理器。出于效率目的,可执行所述处理器中的至少一者的所述预定数目的线程以执行涉及所述元的数目的扫描运算,所述元的数目是所述预定数目的线程的函数(例如,倍数等)。
Description
技术领域
本发明涉及并行处理器架构,且更明确地说涉及使用并行处理器架构执行计算算法。
背景技术
并行处理器架构通常用于执行不同计算算法的宽广阵列。通常使用所述架构来执行的算法的实例是扫描运算(例如,“all-prefix-sums”运算等)。一个此扫描运算定义于表1中。
表1
具体来说,假设阵列[a0,a1,…,an-1]及“I”是算子的单位元,那么返回表1的阵列。例如,如果算子是加法算子,那么对阵列[3 1 7 0 4 1 6 3]执行扫描运算将返回[0 3 4 11 11 15 16 22]依此类推。尽管以上实例中阐述为加法算子,但此算子可以是以两个运算数运算的二元结合算子。
为对具有大量元的阵列有效地执行此扫描运算,可以“树”样方式遍历所述元。例如,可将所述元视为“树叶”,可在第一层级处处理“树叶”以产生并临时存储包含第一元的和的第二层级元等。此后,可以类似方式处理所述第二层级元,且直到已达到根。
为适应使用并行处理器架构的此处理,将每一阵列元指派给处理器的特定线程。通常,存在有限数目的处理器,而处理器各自又具有有限数目的线程(线程的量通常远小于阵列元的数目)。此外,由于线程共享从一个层级到下一层级的数据,因此在移动到下一层级之前必须完全完成每一前面层级的处理,等等。
而,此在每一层级的处理时需要同步。换句话说,扫描运算必须等到线程的指派且在移动到下一层级之前完成对特定层级处的每一阵列元的处理。例如,假设1024个元正由能够处理1元/时钟循环的32个线程来运算,那么以上算法在移动到下一层级的处理之前必须等待32个时钟循环。在使用中,前述同步可能造成闲置线程及额外的等待时间。
发明内容
附图说明
图1显示根据本发明的一个实施例用于利用并行处理器架构有效地执行扫描运算的系统。
图2显示根据本发明的另一实施例用于对阵列执行“异或”扫描运算的方法。
图3图解说明根据本发明的另一实施例的实例性“异或”扫描运算。
图4显示根据本发明的再一实施例用于对较大的元阵列执行扫描运算的框架。
图5图解说明其中可实施各种先前实施例的各种架构及/或功能性的实例性系统。
具体实施方式
图1显示根据本发明的一个实施例用于利用并行处理器架构101有效地执行扫描运算的系统100。在本说明的上下文中,并行处理器架构可包含任一架构,只要其包含并行运算的两个或两个以上处理器102A-N。在一个实施例中,此并行处理器架构可采取以下形式:图形处理器[例如,图形处理单元(GPU)等]或中央处理器单元(CPU)或配备有图形处理能力的芯片组。然而,当然,本发明预期其中并行处理器架构还采取其它形式(例如,通用计算处理器等)的其它实施例。
如进一步所示,并行处理器架构的多个处理器各自能够物理上并行地执行预定数目的线程104。在一个实施例中,此对线程的物理执行是指能够同时物理上执行的线程的数目,此不同于以逻辑方式的执行(例如,使用时间分片技术等)。
作为选项,每一处理器的线程可以单指令多数据(SIMD)方式运算。换句话说,处理器的所有线程可同时对不同数据执行同一指令。在一个实施例中,可将以此方式运算的此一组线程称为“卷曲”。此外,预定数目的线程可称为对应处理器的“卷曲大小”。
在使用中,通过利用并行处理器架构来遍历元阵列。在本说明的上下文中,此阵列的元可包含能够经受扫描运算的任一组的值。例如,在一个实施例中,通常可由表达式[A,B,C…N]来表示所述阵列的值,其中所显示的值为数字值。当然,阐述此元阵列仅出于说明目的而无论如何不应被视为以任何方式加以限制。
在遍历阵列元期间,可执行扫描运算。在本说明的上下文中,扫描运算可指涉及所述阵列的当前元及至少一个先前元的任一运算(如果可用的话)。在一个实施例中,扫描运算可包含all-prefix-sums运算。将在描述图2中所图解说明的不同实施例期间阐述关于实例性all-prefix-sums运算的更多信息。当然,本发明预期其它扫描运算(例如,涉及更多或更少元及其它算子等),只要所述扫描运算满足以上定义。
出于效率目的,可执行至少一个处理器的预定数目的线程来执行涉及所述元的数目的扫描运算(例如,前述“卷曲大小”等),所述元的数目是预定数目的线程的函数。例如,在一个实施例中,可执行预定数目的线程以执行涉及所述元的数目是所述预定数目的倍数的扫描运算。在本说明的上下文中,线程的预定数目的前述倍数可包含任一整数(例如,1、2、3、4、5…N等)。在图1中所示实施例中,扫描运算可涉及等于线程的预定数目的元的数目(即,所述倍数等于1)。
在任何情况下,可给特定处理器的每一线程指派一元以用于执行相关扫描运算。为此,如果不能一起避免的话,那么也可减小与线程之间的同步相关联的处理。换句话说,作为以上设计的结果,可准确地给每一线程指派一个元以执行扫描运算,从而使得特定处理器的所有线程可同时终止。作为选项,可利用任选XOR运算或类似运算来遍历所述阵列的元,以提供额外的效率。
现在将关于各种任选架构及特征阐述更多说明性信息,按照用户的需要可以或可不利用所述各种任选架构及特征来实施前述框架。具体来说,将阐述至少一个额外实施例,其结合扫描运算使用“异或”来遍历元阵列。应极其注意,阐述以下信息仅出于说明目的,而不应被视为以任何方式加以限制。任一以下的特征可视需要并入,而并不排除所述的其它特征。
图2显示根据本发明的另一实施例用于对阵列P执行“异或”扫描运算的方法200。作为选项,本方法可在图1的功能性及架构的上下文中实施。例如,可通过并行处理器架构(例如图1中所示的并行处理器架构)中的特定处理器的线程跨越多个阵列元来实施本发明。然而,当然,可在所需的环境中实施所述方法(例如,在没有图1的设计准则的情况下等)。还应注意可在本说明期间应用前述定义。
如所示,所述方法通过将变量D设定为“1”初始化变量D而开始。参见运算202。当然,此初始化是任选的且如果存在的话,那么可以任一所需的方式来执行。接下来,所述方法在当回路203中继续直到变量D达到卷曲大小。参见决定204。
同样,此卷曲大小是指能够物理上并行运行于并行处理器架构的特定处理器上的预定数目的线程。此外,在当回路内同步可能未必是需要的。具体来说,通过将阵列元的数目限制为小于或等于卷曲大小,那么在线程中间未必需要同步。如早期所提及,此同步涉及其中扫描运算必须等待线程的指派的情况且在移动到下一层级之前完成对每一阵列元的处理等。为此,本锁定步骤设计可避免其中第一线程尚未完成写入到存储器中后续线程需要读取或写入的共享部分的情况等。
如不久将变得明了,变量D针对当回路203的每一迭代增加一倍。通过以此方式将变量D增加到两倍,便可将所述阵列处理为二元树。在此上下文中,变量D与此树的层级相关。
在使用当期间,变量D保持小于卷曲大小,条件分支继续进行,如运算206-208中所示。具体来说,首先确定涉及变量D及线程-局部变量idx的逐位“与”运算是否大于“0”。参见决定206。此线程-局部变量idx是指多个活动线程中间特定线程的全局索引。在一个实施例中,idx可包含在使用期间被指派给线程的局部变量。此线程-局部变量可通过硬件来指派且可进一步在寄存器中追踪/存储。
表2 图解说明针对D及idx的不同值的决定206的结果。
表2
D=1:(idx AND D)>0,when idx=1,3,5,7etc.
D=2:(idx AND D)>0,when idx=2,3,6,7etc.
D=4:(idx AND D)>0,when idx=4,5,6,7,12,13,14,15etc.
D=8:(idx AND D)>0,when idx=8,9,10,11,12,13,14,15,24,25etc.
如果逐位“与”运算每一决定206大于“0”,那么更新阵列P的特定元。具体来说,仅通过所述树的最低层级处的对应线程(如以上表2中所阐述)来更新奇数元。
在每一决定206逐位“与”运算大于“0”时,基于以下表达式#1更新阵列P的特定元P[idx]。
表达式#1
P[idx]+=P[(idx OR(D-1))XOR D]
此阵列元P[idx]的值显示为涉及变量idx及(D-1)的值的逐位“或”运算以及此结果与变量D的值的逐位“异或”两者的函数。
表3 图解说明针对idx及D的各种值求和为P[idx]的各种元的概要。
表3
针对以下值被求和为P[idx]的元:
idx= D=1 D=2 D=4 D=8 D=16
0 - - - - -
10 - - - - -
2 - 1 - - -
3 2 1 - - -
4 - - 3 - -
5 4 - 3 - -
6 - 5 3 - -
7 6 5 3 - -
8 - - - 7 -
9 8 - - 7 -
10 - 9 - 7 -
11 10 9 - 7 -
12 - - 11 7 -
13 12 - 11 7 -
14 - 13 11 7 -
15 14 13 11 7 -
16 - - - - 15
针对以下值被求和为P[idx]的元:
idx= D=1 D=2 D=4 D=8 D=16
17 16 - - - 15
18 - 17 - - 15
19 18 17 - - 15
20 - - 19 - 15
21 20 - 19 - 15
22 - 21 19 - 15
23 22 21 19 - 15
24 - - - 23 15
25 24 - - 23 15
26 - 25 - 23 15
27 26 25 - 23 15
28 - - 27 23 15
29 28 - 27 23 15
30 - 29 27 23 15
31 30 29 27 23 15
etc.
将在涉及图3中所示的8-元阵列的不同实施例上下文中阐述另一运算实例的图解。
在运算208之后,变量D增加一倍。参见运算210。此后,运算在当回路中继续直到变量D不再小于卷曲大小。同样参见决定204。在一个实施例中,当回路的结束可导致本方法的终止。在此实施例中,结果可采取相容“异或”扫描的形式。
在另一实施例中,所述方法可视需要以运算212继续进行,其中如下所述实施表达式#2。
表达式#2
P[idx]=P[idx]-oval,
where oval=P[idx]
应注意表达式“卵形=P[idx]”是在回路开始之前在运算202中执行。否则,P[idx]将具有在回路中计算的新值,从而导致不正确的结果(例如,全部为零)。
在使用中,表达式#2的计算可用于将相容“异或”(inclusive XOR)结果转换为相斥“异或”(exclusive XOR)结果。相斥扫描可指其中所述结果的每一元j是输入阵列中所有元(但不包含元j)加起来的和的扫描。另一方面,在相容扫描中,对所有元(包含元j)求和。如运算212中所述,可通过将所得阵列向右移位一个元并插入单位元而从相容扫描来产生相斥扫描。应注意相斥扫描可指其中所述结果的每一元j是输入阵列中所有元(但不包含j)加起来的和的扫描。另一方面,相容扫描是其中对所有元(包含j)求和的扫描。
在使用中,前述方法可在多个线程上并行执行,且每一卷曲内的所有线程计算等于卷曲大小的数目的元的扫描。使用逐位“异或”运算,所述方法通过遍历呈树形式的阵列来建造扫描运算的结果。在所述树的每一层级D处,所述方法计算2D与每一线程索引的较低D位的“异或”,以计算所述线程读取的地址。实践中,由于卷曲大小对于给定机器是固定的,因此以上方法中的当回路被展开。
表4中阐述可用于实施前述方法的实例性伪代码。当然,阐述此伪代码仅出于说明目的且无论如何不应被视为以任何方式加以限制。
表4
warpscan(array P)
{
Thread-local variables:idx,oval,
idx=this thread’s global index amongall active threads
oval=P[idx]
D=1
while(D<warp_size)
if((idx AND D)>0)then
P[idx]+=P[(idx OR(D-1))XOR D]
endif
D=D*2
endwhile
if(this is an exclusive scan)
P[idx]-=oval
}
在一个实施例中,可利用任何所需的编程框架来实施本方法。在一个实施例中,可将驱动器用于利用图形处理器来提供一般计算能力来实施此技术。可结合英伟达(NVIDIA)公司提供的CUDATM框架来提供此驱动器的实例。表5图解说明用于支持此实施方案的实例性代码。同样,应极其注意阐述此实施方案仅出于说明目的,而无论如何不应被视为以任何方式加以限制。
表5
__device__warpscan(float* ptr,bool isExclusive)
{
int idx=threadIdx.x;
float oval=ptr[idx];
if(idx&1) ptr[idx]+=ptr[(idx| (1-1)) ^1];
if(idx&2) ptr[idx]+=ptr[(idx| (2-1)) ^2];
if(idx&4) ptr[idx]+=ptr[(idx| (4-1)) ^4];
if(idx&8) ptr[idx]+=ptr[(idx| (8-1)) ^8];
if(idx&16) ptr[idx]+=ptr[(idx|(16-1))^16];
if(isExclusive)
ptr[idx]-=oval;
}
图3显示根据本发明的另一实施例的实例性“异或”扫描运算300。作为选项,本扫描可表示图2的方法的实例性运算。例如,图解说明涉及八个元的元阵列302的多个通过。
具体来说,第一通过304显示为涉及元1、3、5、7等的更新。所述元的选择可由图2的决定206来规定。参见(例如)上文表2,在D=1时。此外,此替换的值是使用多个“异或”运算305求出,且可根据图2的运算208来计算。注意,例如,表达式#1。
运算以所示方式继续第二通过306及第三通过308。如进一步图解说明,第三通过的最终元310包含所述元阵列的所有元的和。
如图3中所图解说明,出于效率目的,“异或”运算提供在单个方向(例如,向下等)上的阵列的遍历。在本说明的上下文中,此单个方向遍历可指避免在相反反向上的遍历(此将需要额外的处理)的任何遍历。在图3的实施例的特定上下文中,此相反方向上的遍历将涉及阵列的向上搜索。当然,在一些实施例中,预期使用多方向遍历。
应注意阐述“异或”运算的使用仅出于说明目的。预期将其它算子(例如,减算子等)用于提供类似于表3中所阐述的功能性的其它实施例。在一些实施例中,可使用任何适合的遍历方案。
图4显示根据本发明的再一实施例的用于对较大元阵列执行扫描运算的框架400。作为选项,本框架可使用图1-3的功能性及特征来实施。然而,本框架当然可在任何所需的环境中实施。同样,可在本说明期间应用前述定义。
在本实施例中,可提供对于以先前图中所阐述的方式进行处理太大的元阵列402。具体来说,特定处理器的线程不足以适应所述阵列的元数目。在此情况下,可将所述阵列的值划分成多个块404。例如,此块的大小可包含等于能够通过特定处理器物理上并行运行(例如,卷曲等)的线程数目的数目的元。
为此,可给每一块指派卷曲。通过此设计,可给所述卷曲的每一线程分配对应块的特定元。此外,多个处理器可各自处理相关联块的元以用于执行扫描运算。例如,参见图2。
可接着将每一块的扫描的结果存储于辅助阵列406中,以供在完成扫描运算中使用。具体来说,可将每一块的最后元存储于此辅助阵列中。进一步来说,可接着扫描此辅助阵列的元以用于产生扫描结果的额外阵列408。可接着将此扫描结果加到原始经扫描块404。明确来说,在项406/408表示相容扫描的情况下,可以所示的方式将扫描结果i加到原始经扫描块i+1的每一元。为此,提供经扫描元的最终阵列。尽管未显示,但在项406/408表示相斥扫描的情况下,可将扫描结果i加到原始经扫描块i的每一元。当然,尽管本实例涉及加法算子,但在各种实施例中此算子可包含但未必限定于乘法、最大、最小、逐位“与”/“或”等。
因此,单卷曲“异或”扫描运算可扩展到较大阵列。总之,可通过将扫描子阵列Ai的结果的最后元加到扫描子阵列Aj的结果的每一元,从许多非重叠阵列部分(例如,A的子阵列的前置和)来计算大阵列A的前置和。因此可利用此特性设计可使用B个线程扫描B个元的算法,其中B是卷曲大小的倍数。
在一个特定使用实例中,每一线程i可从装置存储器加载一个元且将其存储于共享存储器中的阵列P的位置i中。接着,可通过所有线程在阵列P上运行以上算法。此产生现在含有warp_size元的B/warp_size子阵列的P,每一子阵列含有所述输入的对应元的前置和。通过其对应卷曲w将这些子阵列扫描的每一者的最后元拷贝到另一共享阵列Q(仅具有B/warp_size)元的元w。接着扫描此阵列。最后,来自卷曲w=取最小(i/warp_size)的每一线程i将阵列Q的元w加到阵列P的元i。阵列P因此含有输入阵列的完整前置扫描。
同样,由于块大小经设定而包含等于卷曲大小的数目的元(即,能够通过特定处理器物理上并行运行的线程的数目),在块的扫描内未必需要同步。然而,尽管鉴于此设计可减小同步,但可在各种点利用某一同步。例如,可在对阵列的不同部分(例如,块等)执行扫描运算的线程中间执行同步。
表6阐述可用于实施图4的前述框架的实例性伪代码。如所示,在各种势垒点处提供同步。当然,阐述此伪代码仅出于说明目的且无论如何不应被视为以任何方式加以限制。
表6
scan(array P)
{
Thread-local variables:idx,ival,oval
idx=this thread’s global index among all active threads
ival=P[idx]
BARRIER
warpscan(P)
oval=P[idx]
BARRIER
if(idx is the last thread in a warp)then
endif
BARRIER
if(idx<warp_size)then
p[idx]=warpscan(p)
endif
BARRIER
P[idx]=oval
}
应注意在一个实施例中,前述“卷曲扫描”函数可通过许多卷曲在表6的伪代码中同时运行,而非仅通过一个卷曲。
在以上伪代码中,术语“势垒”是指在任一线程可在往前继续进行之前所有线程应达到的势垒同步点。在各种实施例中,此可用于避免读取后写入(WAR)及写入后读取(RAW)数据危险。
类似于先前实施例,本技术可利用任何所需的编程框架来实施。在一个可能的实施例中,可通过驱动器结合前述CUDATM框架来提供前述功能性。表7图解说明用于支持此实施方案的实例性代码。
表7
__global__void scan(float*g_odata,float*g_idata)
{
extern__shared__float p[];
int idx=threadIdx.x;
float ival=g_idata[idx];
p[idx]=ival;
__syncthreads();
float oval=warpscan(p);
__syncthreads();
if((idx & 31)==31)p[idx>>5]=oval+ival;
__syncthreads();
if(idx<32)p[idx]=warpscan(p);
__syncthreads();
oval+=p[idx>>5];
g_odata[idx]=oval;
}
应注意前述扫描运算可并行用于各种应用,包含但不先于分类(例如,基数分类等)、词汇分析、串比较、多项式求值、流紧缩、构造直方图及数据结构(例如,图形、树、经求和的区域表等)。当然,所述应用阐述为实例,而且预期其它实例。
图5图解说明可实施各种先前实施例的各种架构及/或功能性的实例性系统500。如所示,提供包含连接到通信总线502的至少一个主机处理器501的系统500。所述系统也包含主存储器504。控制逻辑(软件)及数据存储于可采取随机存取存储器(RAM)形式的主存储器中。
所述系统也包含图形处理器506及显示器508,即计算机监视器。在一个实施例中,所述图形处理器可包含多个着色器模块、光栅化模块等。每一前述模块甚至可设置于单个半导体平台上以形成图形处理单元(GPU)。
在本说明中,单个半导体平台可指单独整体式基于半导体的集成电路或芯片。应注意,术语“单个半导体平台”还可指具有增强连接性的多芯片模块,其模拟芯片上运算且对使用常规中央处理单元(CPU)及总线实施方案做出显著改进。当然,也可按照用户的需要,单独地或者以半导体平台的各种组合形式设置各种模块。
所述系统还可包含辅助存储装置510。所述辅助存储装置包含(例如)硬盘驱动机及/或可拆卸存储装置驱动机(其表示软盘驱动机、磁带驱动机、光盘驱动机等)。可拆卸存储装置驱动机以众所周知的方式从可拆卸存储单元读取及/或向可拆卸存储单元写入。
计算机程序或计算机控制逻辑算法可存储在主存储器及/或辅助存储装置中。在执行时,所述计算机程序启用系统以执行各种功能。存储器、存储装置及/或任何其它存储装置均是计算机可读媒体的可能实例。
在一个实施例中,各种先前图的架构及/或功能性可在以下上下文中实施:主机处理器、图形处理器、能够具有主机处理器及图形处理器两者的能力的至少一部分的集成电路(未显示)、芯片组(即,经设计以作为用于执行相关功能的单元而工作及出售的集成电路群组等)及/或用于所述事情的任何其它集成电路。此外,在一个可能的实施例中,各种先前图的所述与扫描有关的功能性可在驱动器512的控制下在任一前述集成电路中加以实施。
进一步来说,各种先前图的架构及/或功能性可在以下上下文中实施:通用计算机系统、电路板系统、专用于娱乐目的的游戏控制台系统、专用系统及/或任何其它所需的系统。例如,所述系统可采取以下形式:桌上型计算机、膝上型计算机及/或任何其它类型的逻辑。进一步来说,所述系统可采取各种其它装置的心事,包含但不限于个人数字助理(PDA)装置,移动电话装置、电视机等。
此外,尽管未显示,但所述系统可出于通信目的而耦合到网络[例如,电信网络、局域网络(LAN)、无线网络、例如因特网的广域网络(WAN)、对等网络、电缆网络等)。
尽管上文已描述了各种实施例,但应了解,所述实施例仅以实例的方式而非限制的方式呈现。因此,优选实施例的广度及范围不应受限于任何上述实例性实施例,而应仅根据以下权利要求书及其等效内容来界定。
Claims (20)
1、一种方法,其包括:
通过利用包含多个处理器的并行处理器架构来遍历元阵列,所述多个处理器各自能够物理上并行地执行预定数目的线程;及
执行所述处理器中的至少一者的所述预定数目的线程,以执行涉及所述元的数目的扫描运算,所述元的数目是所述预定数目的线程的函数。
2、如权利要求1所述的方法,其中所述线程各自对不同数据执行单个指令。
3、如权利要求1所述的方法,其中所述并行处理器架构包含图形处理器。
4、如权利要求1所述的方法,其中所述扫描运算包含all-prefix-sums运算。
5、如权利要求1所述的方法,其中在单个方向上遍历所述元阵列。
6、如权利要求1所述的方法,其中利用“异或”运算来遍历所述元阵列。
7、如权利要求1所述的方法,其中所述函数包含倍数。
8、如权利要求7所述的方法,其中所述倍数为1。
9、如权利要求7所述的方法,其中所述倍数至少为2。
10、如权利要求9所述的方法,其中对所述阵列的多个部分执行所述扫描运算,所述多个部分各自包含等于所述预定数目的元数目。
11、如权利要求10所述的方法,其中所述阵列的所述部分不重叠。
12、如权利要求10所述的方法,其中在对所述部分中的第一者执行所述扫描运算的所述线程与对所述部分中的第二者执行所述扫描运算的所述线程中间执行同步。
13、如权利要求10所述的方法,其中存储对所述阵列的所述部分执行的所述扫描运算的结果。
14、如权利要求13所述的方法,其中使用对所述阵列的所述部分执行的所述扫描运算的所述结果来完成所述扫描运算。
15、一种体现于计算机可读媒体上的计算机程序产品,其包括:
用于通过利用包含多个处理器的并行处理器架构来遍历元阵列的计算机代码,所述多个处理器各自能够物理上并行执行预定数目的线程;及
用于执行所述处理器中的至少一者的所述预定数目的线程以执行涉及所述元的数目的扫描运算的计算机代码,所述元的数目是所述预定数目的线程的函数。
16、如权利要求15所述的计算机程序产品,其中所述计算机代码是能够利用图形处理器提供一般计算能力的驱动器的组件。
17、如权利要求15所述的计算机程序产品,且其进一步包括用于在单个方向上遍历所述元阵列的计算机代码。
18、如权利要求15所述的计算机程序产品,且其进一步包括用于利用“异或”运算来遍历所述元阵列的计算机代码。
19、一种系统,其包括:
并行处理器架构,其包含各自能够物理上并行执行预定数目的线程的多个处理器;及
驱动器,其与所述并行处理器架构连通以用于执行所述处理器中的至少一者的所述预定数目的线程以执行涉及阵列元的数目的扫描运算,所述阵列元的数目是所述预定数目的线程的函数。
20、如权利要求19所述的系统,其中所述并行处理器架构经由总线耦合到存储器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/862,938 | 2007-09-27 | ||
US11/862,938 US8996846B2 (en) | 2007-09-27 | 2007-09-27 | System, method and computer program product for performing a scan operation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101398753A true CN101398753A (zh) | 2009-04-01 |
Family
ID=40384526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008101458929A Pending CN101398753A (zh) | 2007-09-27 | 2008-08-18 | 用于执行扫描运算的系统、方法及计算机程序产品 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8996846B2 (zh) |
JP (1) | JP2009116854A (zh) |
KR (1) | KR100997024B1 (zh) |
CN (1) | CN101398753A (zh) |
DE (1) | DE102008031998A1 (zh) |
TW (1) | TW200923831A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135949A (zh) * | 2011-03-01 | 2011-07-27 | 浪潮(北京)电子信息产业有限公司 | 基于图形处理器的计算网络系统、方法及装置 |
CN103718156A (zh) * | 2011-07-29 | 2014-04-09 | 英特尔公司 | Cpu/gpu同步机制 |
CN104813279A (zh) * | 2012-12-28 | 2015-07-29 | 英特尔公司 | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 |
CN105453028A (zh) * | 2013-08-14 | 2016-03-30 | 高通股份有限公司 | 向量积累方法及设备 |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE479470T1 (de) * | 2006-07-12 | 2010-09-15 | Procter & Gamble | Auf gelnetzwerk-emulgatoren basierende verdickersysteme für haarfärbe und haaraufhellungszusammensetzungen |
US8414910B2 (en) | 2006-11-20 | 2013-04-09 | Lutonix, Inc. | Drug releasing coatings for medical devices |
US11836506B2 (en) | 2007-04-11 | 2023-12-05 | Apple Inc. | Parallel runtime execution on multiple processors |
US8276164B2 (en) | 2007-05-03 | 2012-09-25 | Apple Inc. | Data parallel computing on multiple processors |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
EP3413198A1 (en) | 2007-04-11 | 2018-12-12 | Apple Inc. | Data parallel computing on multiple processors |
US8996846B2 (en) | 2007-09-27 | 2015-03-31 | Nvidia Corporation | System, method and computer program product for performing a scan operation |
US8264484B1 (en) | 2007-10-29 | 2012-09-11 | Nvidia Corporation | System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume |
US8284188B1 (en) | 2007-10-29 | 2012-10-09 | Nvidia Corporation | Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects |
US8065288B1 (en) | 2007-11-09 | 2011-11-22 | Nvidia Corporation | System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture |
US8661226B2 (en) * | 2007-11-15 | 2014-02-25 | Nvidia Corporation | System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture |
US8243083B1 (en) | 2007-12-04 | 2012-08-14 | Nvidia Corporation | System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner |
US8773422B1 (en) | 2007-12-04 | 2014-07-08 | Nvidia Corporation | System, method, and computer program product for grouping linearly ordered primitives |
US8515052B2 (en) * | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
US8289324B1 (en) | 2007-12-17 | 2012-10-16 | Nvidia Corporation | System, method, and computer program product for spatial hierarchy traversal |
US8502819B1 (en) | 2007-12-17 | 2013-08-06 | Nvidia Corporation | System and method for performing ray tracing node traversal in image rendering |
US8225325B2 (en) | 2008-06-06 | 2012-07-17 | Apple Inc. | Multi-dimensional thread grouping for multiple processors |
US8286198B2 (en) * | 2008-06-06 | 2012-10-09 | Apple Inc. | Application programming interfaces for data parallel computing on multiple processors |
US9335997B2 (en) | 2008-08-15 | 2016-05-10 | Apple Inc. | Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture |
US8527742B2 (en) * | 2008-08-15 | 2013-09-03 | Apple Inc. | Processing vectors using wrapping add and subtract instructions in the macroscalar architecture |
US8131979B2 (en) * | 2008-08-15 | 2012-03-06 | Apple Inc. | Check-hazard instructions for processing vectors |
US8560815B2 (en) * | 2008-08-15 | 2013-10-15 | Apple Inc. | Processing vectors using wrapping boolean instructions in the macroscalar architecture |
US9335980B2 (en) | 2008-08-15 | 2016-05-10 | Apple Inc. | Processing vectors using wrapping propagate instructions in the macroscalar architecture |
US8583904B2 (en) * | 2008-08-15 | 2013-11-12 | Apple Inc. | Processing vectors using wrapping negation instructions in the macroscalar architecture |
US9342304B2 (en) | 2008-08-15 | 2016-05-17 | Apple Inc. | Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture |
US8321492B1 (en) | 2008-12-11 | 2012-11-27 | Nvidia Corporation | System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm |
GB2486485B (en) | 2010-12-16 | 2012-12-19 | Imagination Tech Ltd | Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution |
US8966461B2 (en) * | 2011-09-29 | 2015-02-24 | Advanced Micro Devices, Inc. | Vector width-aware synchronization-elision for vector processors |
CN104025025B (zh) | 2011-12-28 | 2018-08-28 | 英特尔公司 | 用于对打包数据元素执行增量编码的系统、装置和方法 |
US9557998B2 (en) * | 2011-12-28 | 2017-01-31 | Intel Corporation | Systems, apparatuses, and methods for performing delta decoding on packed data elements |
US9389860B2 (en) | 2012-04-02 | 2016-07-12 | Apple Inc. | Prediction optimizations for Macroscalar vector partitioning loops |
US9348589B2 (en) | 2013-03-19 | 2016-05-24 | Apple Inc. | Enhanced predicate registers having predicates corresponding to element widths |
US9817663B2 (en) | 2013-03-19 | 2017-11-14 | Apple Inc. | Enhanced Macroscalar predicate operations |
US9355061B2 (en) | 2014-01-28 | 2016-05-31 | Arm Limited | Data processing apparatus and method for performing scan operations |
US20230111125A1 (en) * | 2021-10-08 | 2023-04-13 | Nvidia Corporation | Application programming interface for scan operations |
Family Cites Families (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4131947A (en) | 1976-08-06 | 1978-12-26 | Armstrong Philip N | Random access digital sorter |
US4628483A (en) | 1982-06-03 | 1986-12-09 | Nelson Raymond J | One level sorting network |
US4855937A (en) | 1984-08-08 | 1989-08-08 | General Electric Company | Data block processing for fast image generation |
WO1988004077A1 (en) * | 1986-11-24 | 1988-06-02 | Thinking Machines Corporation | Pipelining technique and pipelined processes |
US5193207A (en) | 1990-05-31 | 1993-03-09 | Hughes Aircraft Company | Link sorted memory |
US5274718A (en) | 1991-09-30 | 1993-12-28 | At&T Bell Laboratories | Image representation using tree-like structures |
US5361385A (en) | 1992-08-26 | 1994-11-01 | Reuven Bakalash | Parallel computing system for volumetric modeling, data processing and visualization |
JP3202074B2 (ja) | 1992-10-21 | 2001-08-27 | 富士通株式会社 | 並列ソート方式 |
JPH06223198A (ja) | 1993-01-26 | 1994-08-12 | Hitachi Ltd | 光線追跡による画像生成装置及び方法 |
US5650862A (en) | 1994-07-25 | 1997-07-22 | Canon Kabushiki Kaisha | Image signal processing apparatus with improved pixel parallel/line parallel conversion |
US5793379A (en) | 1995-04-03 | 1998-08-11 | Nvidia Corporation | Method and apparatus for scaling images having a plurality of scan lines of pixel data |
JP3728858B2 (ja) | 1996-12-20 | 2005-12-21 | ソニー株式会社 | 演算装置の演算方法、記憶媒体及び演算装置 |
US6065005A (en) | 1997-12-17 | 2000-05-16 | International Business Machines Corporation | Data sorting |
US6262345B1 (en) | 1998-07-10 | 2001-07-17 | E. I. Du Pont De Nemours & Company | Plant protein kinases |
WO2000004494A1 (en) | 1998-07-17 | 2000-01-27 | Intergraph Corporation | Graphics processing system with multiple strip breakers |
WO2000011603A2 (en) | 1998-08-20 | 2000-03-02 | Apple Computer, Inc. | Graphics processor with pipeline state storage and retrieval |
US6549907B1 (en) | 1999-04-22 | 2003-04-15 | Microsoft Corporation | Multi-dimensional database and data cube compression for aggregate query support on numeric dimensions |
US6489955B1 (en) | 1999-06-07 | 2002-12-03 | Intel Corporation | Ray intersection reduction using directionally classified target lists |
SG93211A1 (en) | 1999-07-28 | 2002-12-17 | Univ Singapore | Method and apparatus for generating atomic parts of graphic representation through skeletonization for interactive visualization applications |
US6556200B1 (en) | 1999-09-01 | 2003-04-29 | Mitsubishi Electric Research Laboratories, Inc. | Temporal and spatial coherent ray tracing for rendering scenes with sampled and geometry data |
US6738518B1 (en) | 2000-05-12 | 2004-05-18 | Xerox Corporation | Document image decoding using text line column-based heuristic scoring |
US7495664B2 (en) | 2000-06-19 | 2009-02-24 | Mental Images Gmbh | Instant ray tracing |
US6633882B1 (en) | 2000-06-29 | 2003-10-14 | Microsoft Corporation | Multi-dimensional database record compression utilizing optimized cluster models |
US6895115B2 (en) | 2001-04-23 | 2005-05-17 | The United States Of America As Represented By The United States National Aeronautics And Space Administration | Method for implementation of recursive hierarchical segmentation on parallel computers |
US7580927B1 (en) | 2001-05-29 | 2009-08-25 | Oracle International Corporation | Quadtree center tile/boundary tile optimization |
US6879980B1 (en) | 2001-06-29 | 2005-04-12 | Oracle International Corporation | Nearest neighbor query processing in a linear quadtree spatial index |
US7024414B2 (en) | 2001-08-06 | 2006-04-04 | Sensage, Inc. | Storage of row-column data |
CN1315040C (zh) | 2002-01-08 | 2007-05-09 | 北京南思达科技发展有限公司 | 一种逻辑可重组电路 |
US6948009B2 (en) * | 2002-06-04 | 2005-09-20 | International Business Machines Corporation | Method, system, and article of manufacture for increasing processor utilization |
US6943796B2 (en) | 2002-07-22 | 2005-09-13 | Sun Microsystems, Inc. | Method of maintaining continuity of sample jitter pattern across clustered graphics accelerators |
US7194125B2 (en) | 2002-12-13 | 2007-03-20 | Mitsubishi Electric Research Laboratories, Inc. | System and method for interactively rendering objects with surface light fields and view-dependent opacity |
US7146486B1 (en) | 2003-01-29 | 2006-12-05 | S3 Graphics Co., Ltd. | SIMD processor with scalar arithmetic logic units |
US20050177564A1 (en) | 2003-03-13 | 2005-08-11 | Fujitsu Limited | Server, method, computer product, and terminal device for searching item data |
US7403944B2 (en) | 2003-04-21 | 2008-07-22 | Gerald Budd | Reduced comparison coordinate-value sorting process |
JP3757286B2 (ja) * | 2003-07-09 | 2006-03-22 | 独立行政法人情報通信研究機構 | 光パケットのバッファリング装置とそのバッファリング方法 |
US7418585B2 (en) | 2003-08-28 | 2008-08-26 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US20050144602A1 (en) | 2003-12-12 | 2005-06-30 | Tin-Fook Ngai | Methods and apparatus to compile programs to use speculative parallel threads |
DE102004007835A1 (de) | 2004-02-17 | 2005-09-15 | Universität des Saarlandes | Vorrichtung zur Darstellung von dynamischen komplexen Szenen |
US7616782B2 (en) | 2004-05-07 | 2009-11-10 | Intelliview Technologies Inc. | Mesh based frame processing and applications |
US7348975B2 (en) | 2004-12-28 | 2008-03-25 | Intel Corporation | Applications of interval arithmetic for reduction of number of computations in ray tracing problems |
US7254697B2 (en) | 2005-02-11 | 2007-08-07 | International Business Machines Corporation | Method and apparatus for dynamic modification of microprocessor instruction group at dispatch |
EP1783604A3 (en) | 2005-11-07 | 2007-10-03 | Slawomir Adam Janczewski | Object-oriented, parallel language, method of programming and multi-processor computer |
US7728841B1 (en) | 2005-12-19 | 2010-06-01 | Nvidia Corporation | Coherent shader output for multiple targets |
CN101371263A (zh) | 2006-01-10 | 2009-02-18 | 光明测量公司 | 用于在并行处理系统中处理多媒体数据的算法步骤的方法和装置 |
US7903125B1 (en) | 2006-02-07 | 2011-03-08 | Adobe Systems Incorporated | Compact clustered 2-D layout |
US7933940B2 (en) | 2006-04-20 | 2011-04-26 | International Business Machines Corporation | Cyclic segmented prefix circuits for mesh networks |
US20070264023A1 (en) | 2006-04-26 | 2007-11-15 | Virgin Islands Microsystems, Inc. | Free space interchip communications |
US8261270B2 (en) | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US7885988B2 (en) | 2006-08-24 | 2011-02-08 | Dell Products L.P. | Methods and apparatus for reducing storage size |
EP3413198A1 (en) | 2007-04-11 | 2018-12-12 | Apple Inc. | Data parallel computing on multiple processors |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8081181B2 (en) * | 2007-06-20 | 2011-12-20 | Microsoft Corporation | Prefix sum pass to linearize A-buffer storage |
US8996846B2 (en) | 2007-09-27 | 2015-03-31 | Nvidia Corporation | System, method and computer program product for performing a scan operation |
US8072460B2 (en) | 2007-10-17 | 2011-12-06 | Nvidia Corporation | System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture |
US8284188B1 (en) | 2007-10-29 | 2012-10-09 | Nvidia Corporation | Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects |
US8264484B1 (en) | 2007-10-29 | 2012-09-11 | Nvidia Corporation | System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume |
US8065288B1 (en) | 2007-11-09 | 2011-11-22 | Nvidia Corporation | System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture |
US8661226B2 (en) | 2007-11-15 | 2014-02-25 | Nvidia Corporation | System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture |
US8243083B1 (en) | 2007-12-04 | 2012-08-14 | Nvidia Corporation | System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner |
US8773422B1 (en) | 2007-12-04 | 2014-07-08 | Nvidia Corporation | System, method, and computer program product for grouping linearly ordered primitives |
US20100076941A1 (en) | 2008-09-09 | 2010-03-25 | Microsoft Corporation | Matrix-based scans on parallel processors |
US8321492B1 (en) | 2008-12-11 | 2012-11-27 | Nvidia Corporation | System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm |
US8661266B2 (en) | 2010-04-21 | 2014-02-25 | Cavium, Inc. | System and method for secure device key storage |
-
2007
- 2007-09-27 US US11/862,938 patent/US8996846B2/en active Active
-
2008
- 2008-07-07 JP JP2008177112A patent/JP2009116854A/ja not_active Withdrawn
- 2008-07-07 DE DE102008031998A patent/DE102008031998A1/de not_active Ceased
- 2008-08-18 CN CNA2008101458929A patent/CN101398753A/zh active Pending
- 2008-09-26 TW TW097136994A patent/TW200923831A/zh unknown
- 2008-09-26 KR KR1020080094936A patent/KR100997024B1/ko active IP Right Grant
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135949A (zh) * | 2011-03-01 | 2011-07-27 | 浪潮(北京)电子信息产业有限公司 | 基于图形处理器的计算网络系统、方法及装置 |
CN102135949B (zh) * | 2011-03-01 | 2013-06-19 | 浪潮(北京)电子信息产业有限公司 | 基于图形处理器的计算网络系统、方法及装置 |
CN103718156A (zh) * | 2011-07-29 | 2014-04-09 | 英特尔公司 | Cpu/gpu同步机制 |
US9633407B2 (en) | 2011-07-29 | 2017-04-25 | Intel Corporation | CPU/GPU synchronization mechanism |
US9892481B2 (en) | 2011-07-29 | 2018-02-13 | Intel Corporation | CPU/GPU synchronization mechanism |
CN103718156B (zh) * | 2011-07-29 | 2018-05-01 | 英特尔公司 | Cpu/gpu同步机制 |
CN104813279A (zh) * | 2012-12-28 | 2015-07-29 | 英特尔公司 | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 |
US9921832B2 (en) | 2012-12-28 | 2018-03-20 | Intel Corporation | Instruction to reduce elements in a vector register with strided access pattern |
CN104813279B (zh) * | 2012-12-28 | 2018-12-18 | 英特尔公司 | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 |
CN105453028A (zh) * | 2013-08-14 | 2016-03-30 | 高通股份有限公司 | 向量积累方法及设备 |
CN105453028B (zh) * | 2013-08-14 | 2019-04-09 | 高通股份有限公司 | 向量积累方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
US8996846B2 (en) | 2015-03-31 |
KR100997024B1 (ko) | 2010-11-25 |
KR20090033139A (ko) | 2009-04-01 |
JP2009116854A (ja) | 2009-05-28 |
DE102008031998A1 (de) | 2009-04-02 |
US20090089542A1 (en) | 2009-04-02 |
TW200923831A (en) | 2009-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101398753A (zh) | 用于执行扫描运算的系统、方法及计算机程序产品 | |
JP6977239B2 (ja) | 行列乗算器 | |
Hegde et al. | CaffePresso: An optimized library for deep learning on embedded accelerator-based platforms | |
Meloni et al. | NEURAghe: Exploiting CPU-FPGA synergies for efficient and flexible CNN inference acceleration on Zynq SoCs | |
CN106940815B (zh) | 一种可编程卷积神经网络协处理器ip核 | |
Humphrey et al. | CULA: hybrid GPU accelerated linear algebra routines | |
JP4235987B2 (ja) | ビデオフレームレンダリングエンジン | |
US8990827B2 (en) | Optimizing data warehousing applications for GPUs using dynamic stream scheduling and dispatch of fused and split kernels | |
Gong et al. | Save: Sparsity-aware vector engine for accelerating dnn training and inference on cpus | |
Hadri et al. | Tile QR factorization with parallel panel processing for multicore architectures | |
Wynters | Parallel processing on NVIDIA graphics processing units using CUDA | |
D'Amore et al. | Towards a parallel component in a GPU–CUDA environment: a case study with the L-BFGS Harwell routine | |
Kuchen et al. | The integration of task and data parallel skeletons | |
Wu et al. | Optimizing dynamic programming on graphics processing units via adaptive thread-level parallelism | |
Hegde et al. | CaffePresso: Accelerating convolutional networks on embedded SoCs | |
Haidar et al. | Optimization for performance and energy for batched matrix computations on GPUs | |
Qiao et al. | Parallelizing and optimizing neural Encoder–Decoder models without padding on multi-core architecture | |
Lobeiras et al. | Designing efficient index-digit algorithms for CUDA GPU architectures | |
Munekawa et al. | Accelerating Smith-Waterman algorithm for biological database search on CUDA-compatible GPUs | |
Lobeiras et al. | Influence of memory access patterns to small-scale FFT performance | |
Jiang et al. | GLARE: Accelerating Sparse DNN Inference Kernels with Global Memory Access Reduction | |
Charlton et al. | Two-dimensional batch linear programming on the GPU | |
Hopfer et al. | Solving the ghost–gluon system of Yang–Mills theory on GPUs | |
Myllykoski et al. | On solving separable block tridiagonal linear systems using a GPU implementation of radix-4 PSCR method | |
Saybasili et al. | Highly parallel multi-dimentional fast fourier transform on fine-and coarse-grained many-core approaches |
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 |
Open date: 20090401 |