在CUDA中使用float
代替int
会更好吗?
float
减少银行冲突并确保合并吗? (或者与此无关?)
答案 0 :(得分:5)
读取共享内存时的库冲突都与读取的数据量有关。因此,由于int
和float
的大小相同(至少我认为它们在所有CUDA平台上),因此没有区别。
合并通常是指全局内存访问 - 同样,这与读取的字节数有关,而不是数据类型。
答案 1 :(得分:2)
int
和float
都是四个字节,因此在合并全局内存访问方面它们没有任何区别(如果你以相同的方式访问它们)或共享内存访问的银行冲突。
话说回来,float
可能会有更好的性能,因为设备的设计目的是尽快处理它们,int
通常用于控制和索引等,因此有性能较低。当然它真的比那复杂 - 如果除了花车之外什么都没有,那么整数硬件就会闲置,这将是一种浪费。
答案 2 :(得分:1)
银行冲突和合并都是关于内存访问模式的(warp中的线程是否都是读取/写入具有统一步幅的不同位置)。因此,这些问题与数据类型(float,int,double等)无关
请注意,数据类型确实会对计算性能产生影响。单精度浮点数比双精度浮点数快.GPU中强大的FPU通常意味着在固定点进行计算是不必要的,甚至可能是有害的。
答案 3 :(得分:0)
查看“CUDA开发人员指南”的“数学函数”部分。使用设备运行时功能(内部功能)可以为各种类型提供更好的性能。您可以在较短的时钟周期内在一次操作中执行多个操作。
对于SectionC.1的某些功能,设备运行时组件中存在一个不太准确但速度较快的版本;它有相同的名字 前缀为__(例如__sinf(x))..编译器有一个选项 (-use_fast_math)强制Table中的每个函数编译为其内在对应物...选择性地替换数学函数 通过调用内部函数调用只有在它受到值得的情况下调用 性能提升和改变的属性,如减少 可以容忍准确性和不同的特殊情况处理。
你可能会发现更多的方法,比如用一个函数执行x + c * y ..