在cuda中漂浮与int

时间:2010-08-18 05:41:48

标签: cuda

在CUDA中使用float代替int会更好吗?

float减少银行冲突并确保合并吗? (或者与此无关?)

4 个答案:

答案 0 :(得分:5)

读取共享内存时的库冲突都与读取的数据量有关。因此,由于intfloat的大小相同(至少我认为它们在所有CUDA平台上),因此没有区别。

合并通常是指全局内存访问 - 同样,这与读取的字节数有关,而不是数据类型。

答案 1 :(得分:2)

intfloat都是四个字节,因此在合并全局内存访问方面它们没有任何区别(如果你以相同的方式访问它们)或共享内存访问的银行冲突。

话说回来,float可能会有更好的性能,因为设备的设计目的是尽快处理它们,int通常用于控制和索引等,因此有性能较低。当然它真的比那复杂 - 如果除了花车之外什么都没有,那么整数硬件就会闲置,这将是一种浪费。

答案 2 :(得分:1)

银行冲突和合并都是关于内存访问模式的(warp中的线程是否都是读取/写入具有统一步幅的不同位置)。因此,这些问题与数据类型(float,int,double等)无关

请注意,数据类型确实会对计算性能产生影响。单精度浮点数比双精度浮点数快.GPU中强大的FPU通常意味着在固定点进行计算是不必要的,甚至可能是有害的。

答案 3 :(得分:0)

查看“CUDA开发人员指南”的“数学函数”部分。使用设备运行时功能(内部功能)可以为各种类型提供更好的性能。您可以在较短的时钟周期内在一次操作中执行多个操作。

  

对于SectionC.1的某些功能,设备运行时组件中存在一个不太准确但速度较快的版本;它有相同的名字   前缀为__(例如__sinf(x))..编译器有一个选项   (-use_fast_math)强制Table中的每个函数编译为其内在对应物...选择性地替换数学函数   通过调用内部函数调用只有在它受到值得的情况下调用   性能提升和改变的属性,如减少   可以容忍准确性和不同的特殊情况处理。

  • 例如,而不是使用=>使用:x / y => __fdividef(x,y); sinf(x)=> __sinf(x)的

你可能会发现更多的方法,比如用一个函数执行x + c * y ..