【发布时间】:2012-08-31 04:44:35
【问题描述】:
在 CUDA 中使用 float 而不是 int 更好吗?
float 是否会减少银行冲突并确保合并? (或与此无关?)
【问题讨论】:
-
它们的大小相同,但用途不同
标签: cuda
在 CUDA 中使用 float 而不是 int 更好吗?
float 是否会减少银行冲突并确保合并? (或与此无关?)
【问题讨论】:
标签: cuda
读取共享内存时的银行冲突都与读取的数据量有关。因此,由于int 和float 的大小相同(至少我认为它们在所有CUDA 平台上都存在),所以没有区别。
合并通常是指全局内存访问——同样,这与读取的字节数有关,而不是数据类型。
【讨论】:
int 和 float 都是四个字节,因此在合并全局内存访问或银行冲突时使用它们没有任何区别(如果您以相同的方式访问它们)共享内存访问。
话虽如此,floats 的性能可能更好,因为这些设备旨在尽可能快地处理它们,ints 通常用于控制和索引等,因此性能较低。当然,它确实比这更复杂 - 如果你只有浮点数,那么整数硬件将处于空闲状态,这将是一种浪费。
【讨论】:
Bank 冲突和合并都与内存访问模式有关(warp 中的线程是否都以统一的步幅读/写到不同的位置)。因此,这些问题与数据类型(float、int、double 等)无关
请注意,数据类型确实对计算性能有影响。单精度浮点比双精度等更快。GPU 中强大的 FPU 通常意味着在定点进行计算是不必要的,甚至可能是有害的。
【讨论】:
查看 CUDA 开发人员指南的“数学函数”部分。使用设备运行时函数(内在函数)可以为各种类型提供更好的性能。您可以在更少的时钟周期内在一个操作中执行多个操作。
对于SectionC.1的部分功能,设备运行时组件中存在精度较低但速度较快的版本;它具有相同的名称 以 __ 为前缀(如 __sinf(x)).. 编译器有一个选项 (-use_fast_math)强制表中的每个函数编译为其内在对应物......选择性地替换数学函数 仅在需要调用内部函数时才调用内部函数 性能增益以及更改属性的位置,例如减少 可以容忍准确性和不同的特殊情况处理。
你可能会发现更多的方法,比如 x+c*y 是用一个函数执行的..
【讨论】: