因为模型所需,同一个warp的的thread需要 写 同一个地址空间,请教有关atomic****(****)函数的float版本的情况,谢谢!!!!
暂时也就是fermi系列之前CUDA中还不支持原子操作,不过可以使用现有的代替,
适用整数原子操作前先将浮点数“投射”成整数,计算完成后再转化回浮点数。
下面两个CUDA内置函数可以完成这个功能:
__float_as_int
__int_as_float
这两个函数可以再整数与浮点数之间进行无损转换,例如进行如下操作
float f32=23.1758f;
int i32=__float_as_int( f32 );
f32=__int_as_float( i32 );
则得到的f_i仍保持为原来的值
cyrosly牛叉:right: 不过,兄弟:你试过那个办法?能行不?还有就是转变之后的计算结果是否相等?
fermi支持原子浮点函数。
[
有一段时间非常不解美国那边的工程师是怎么不能让浮点做原子的。后来明白了,原来是伪的……
回yyfn,当然试过,我最早回答这个问题是很在很早前的CSDN CUDA论坛中,当时专门就测试过
多谢!那过几天闲下来后,也试试。呵呵
呵呵!能用就行!
[ 本帖最后由 yyfn风辰 于 2010-3-4 11:13 编辑 ]
非常之感谢!!!
若是我想用atomicMax()求两个float类型数据的最大的一个,可否用这种方法,比如我比较的是0.053 和0.054。。。??
经过测试,不行,呵呵
IEEE浮点设计的时候就考虑浮点能像整数一样直接比较大小
直接把操作数指针转成int应该就可以用atomicMAX/min比较大小,只是异常,无穷和非数处理可能有点问题
负数好像也不行。