2010-08-18 84 views
2

在CUDA中使用float而不是int更好吗?float vs int in cuda

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

+0

它们具有相同的大小,但不同的目的 – Anycorn 2010-08-18 05:46:05

回答

4

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

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

2

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

话虽如此,你可能会有更好的性能与float s,因为设备的设计尽可能快,它们通常用于控制和索引等,因此具有较低的性能。当然它比这更复杂 - 如果你什么也没有,但是整数硬件会闲置,这将是一种浪费。

+0

INTS周围* Y典型GTX卡慢10倍。典型GPU上的整数单位少得多。除非您有特定的理由,否则不要使用整数或双宽度浮点数。 – 2017-10-05 06:11:07

1

存储体冲突和聚合都与内存访问模式有关(无论线程内的线程是否都以统一的跨度读取/写入不同位置)。因此,这些问题与数据类型无关(float,int,double等)

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

0

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

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

  • 例如,而不是使用=>使用:X/Y => __fdividef(X,Y); SINF(X)=> __sinf(X)

,你会发现更多的方法,比如x + c。与一个函数执行..