Assembly “什么是”呢;集合式公式s32.b32“;装配

Assembly “什么是”呢;集合式公式s32.b32“;装配,assembly,cuda,instructions,Assembly,Cuda,Instructions,我试图从中读取一段CUDA代码,并遇到以下问题: __device__ __forceinline__ bool isNegativeZero(float a) { int ret; asm volatile("{ set.eq.s32.b32 %0, %1, %2;}\n" : "=r"(ret) : "f"(a), "r"(0x80000000)); return ret; } 我不确定汇编指令是什么,但从整个文件的上下文来看,该函数似乎不仅仅是检查浮点值是否为负

我试图从中读取一段CUDA代码,并遇到以下问题:

__device__ __forceinline__ bool isNegativeZero(float a) {
    int ret;
    asm volatile("{  set.eq.s32.b32 %0, %1, %2;}\n" : "=r"(ret) : "f"(a), "r"(0x80000000));
    return ret;
}
我不确定汇编指令是什么,但从整个文件的上下文来看,该函数似乎不仅仅是检查浮点值是否为负零

我非常希望能对该功能进行高层次的解释

我不确定装配说明是什么

说明来自于

表示“如果valx等于valy,则设置dest的值”。此处
valx
是函数的输入值,
valy
0x8000000
,而
dest
是函数
ret
的返回值。该函数的其余部分只是标准的gcc派生的内联汇编语法,也有文档记录

您可以自己检查
-0.0f
是否为IEEE 754二进制32表示形式中的
100000000000000000000000000000
0x8000000

因此,如果
a
为负0,则函数返回true,检查位相等性

。。。但是form[sic]是整个文件的上下文。该函数似乎不仅仅是检查浮点值是否为负零

希望现在很明显情况并非如此

我不确定装配说明是什么

说明来自于

表示“如果valx等于valy,则设置dest的值”。此处
valx
是函数的输入值,
valy
0x8000000
,而
dest
是函数
ret
的返回值。该函数的其余部分只是标准的gcc派生的内联汇编语法,也有文档记录

您可以自己检查
-0.0f
是否为IEEE 754二进制32表示形式中的
100000000000000000000000000000
0x8000000

因此,如果
a
为负0,则函数返回true,检查位相等性

。。。但是form[sic]是整个文件的上下文。该函数似乎不仅仅是检查浮点值是否为负零


希望现在很明显情况并非如此。

从GitHub的何处开始?这样可以更容易地找出这是什么体系结构,并在手册中为您查找该体系结构的说明。但在较高级别上,如果输入浮点按位等于IEEE FP
-0.0
(符号位设置,所有其他位清除),则它似乎将整数寄存器设置为非零。然后
return ret
int
布尔化为0或1,而不是0/非零。@PeterCordes谢谢peter!这段代码位于nv_wavener_persistent.cugithub上的何处?这样可以更容易地找出这是什么体系结构,并在手册中为您查找该体系结构的说明。但在较高级别上,如果输入浮点按位等于IEEE FP
-0.0
(符号位设置,所有其他位清除),则它似乎将整数寄存器设置为非零。然后
return ret
int
布尔化为0或1,而不是0/非零。@PeterCordes谢谢peter!这是来自,这段代码在nv_wavener_persistent.cu中
set.eq.s32.b32 dest, valx, valy