请教有关atomic****(****)函数的float版本的情况,谢谢!

因为模型所需,同一个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比较大小,只是异常,无穷和非数处理可能有点问题

负数好像也不行。