NVIDIA CUDA统一计算设备架构编程手册 (五)

2009-6-18 作者: icuda 来源: icuda

关键字: NVIDIA CUDA GPU 手册 

  指令性能

  要处理一个warp的线程的指令,多处理器必须:

  读取warp的每个线程的指令操作数,

  执行指令,

  写入warp的每个线程的结果。

  因此,有效的指令吞吐量取决于名义指令吞吐量以及内存延迟和带宽。它通过下列方式最大化:

  最小化具有低吞吐量的指令的使用(参见5.1.1),

  最大化每种内存的可用内存带宽(参见5.1.2),

  允许线程调度器尽可能地将内存事务与数学计算重叠,这需要:

  由线程执行的程序具有高的算术密度,也就是说,每个内存操作具有高的算术操作数;

  每个多处理器具有许多活动线程,详见5.2。

  5.1.1  指令吞吐量

  5.1.1.1   算术指令

  要执行warp的一个指令,多处理需要:

  4个时钟周期,用于浮点加、浮点乘、浮点乘-加、整数加、位操作、比较、求最小、求最大、类型转换指令;

  16个时钟周期,用于倒数、倒数平方根、__log(x)(参见表B-2)。

  32位整数乘法使用16个时钟周期,但__mul24和__umul24(参见附录B)提供了4个时钟周期的有符号和无符号24位整数乘法。但是,在将来的架构中,__[u]mul24将比32位整数乘法慢,所以我们建议提供两个内核由应用程序相应地调用,其中一个使用__[u]mul24,另一个使用一般的32位整数乘法。

  整数除法和模数操作特别昂贵,如果可能的话应该尽可能地避免,或者尽量替换为位操作:如果n是2的幂,则(i/n)等于(i>>log2(n)),(i%n)等于(i&(n-1));如果n是文本,则编译器将执行这些转换。

  其他函数使用更多时钟周期,因为它们实现为多个指令的组合。

  浮点平方根实现为倒数平方根与求倒,而非倒数平方根与乘法,所以它对于0和无穷大获得正确的结果。因此,它对于warp使用32个时钟周期。

  浮点除法使用36个时钟周期,但__fdividef(x, y)提供了更快的版本,即20个时钟周期(参见附录B)。

  __sin(x)、__cos(x)、__exp(x)使用32个时钟周期。

  有时候,编译器必须插入转换指令,从而引入附加的执行周期。这种情况包括:

  操作在其操作数通常需要转换为int的char或short上的函数,

  用作单精度浮点计算输入的双精度浮点常量(不使用任何类型后缀定义),

  用作表B-1中定义的数学函数的双精度版本的输入参数的单精度浮点变量。

  最后两种情况可以通过下列方式避免:

  单精度浮点常量,使用f后缀定义,比如3.141592653589793f、1.0f、0.5f,

  数学函数的单精度版本,也使用f后缀定义,比如sinf()、logf()、expf()。

  对于单精度代码,我们强烈建议使用浮点类型和单精度数学函数。当在不支持原生双精度的设备(比如计算能力1.x的设备)上编译时,双精度类型默认降级为浮点数,双精度数学函数映射为其单精度对应值。但是,如果将来这些设备将支持双精度,则这些函数将映射为双精度实现。

  5.1.1.2   控制流指令

  任何流控制指令(if, switch, do, for, while)通过导致同一warp的线程分散,也就是说,按照不同的执行路径执行,可以显著影响有效的指令吞吐量。如果这种情况发生,则不同的执行路径必须序列化,增加此warp执行的指令总数。当所有不同的执行路径都已完成时,线程将集中到同一执行路径。

  当控制流取决于线程ID时,要获得最佳性能,就应该写入控制条件,以便最小化分散的warp数。这可能是因为warp在块中的分布是确定性的,参见3.2。一个小示例是当控制条件仅取决于(threadIdx / WSIZE),其中WSIZE是warp大小。在这种情况下,没有任何warp会分散,因为控制条件与warp已完美对齐。

  有时,编译器可以通过使用分支预测展开循环或可以优化if 或switch语句,详细说明如下。在这些情况下, warp绝不会分散。程序员也可以使用#pragma unroll指令控制循环展开(参见4.2.5.2)。

  当使用分支预测时,其执行取决于控制条件的指令没有一个将跳过。相反,每个指令都与基于控制条件设置为真或假的每线程条件代码或谓词相关,虽然其中每个指令都会调度执行,但只有具有真谓词的指令将实际执行。具有假谓词的指令不写入结果,而且不求地址或读取操作数。

  仅当由分支条件控制的指令数小于或等于特定临界值时,编译器才将分支指令替换为谓词指令;如果编译器确定条件可能生成许多分散的warp,则此临界值是7,否则是4。




<<首页 <上一页  1  2  3  4  5  6  7  下一页>  末页>>  
责任编辑:熊东旭