Cuda _u_ddiv_ru的语义

Cuda _u_ddiv_ru的语义,cuda,intrinsics,Cuda,Intrinsics,根据uu ddiv_ru的公式,我期望下面的代码结果是ceil(8/32)=1.0,而不是0.25 #include <iostream> using namespace std; __managed__ double x; __managed__ double y; __managed__ double r; __global__ void ceilDiv() { r = __ddiv_ru(x,y); } int main() { x = 8;

根据uu ddiv_ru的公式,我期望下面的代码结果是ceil(8/32)=1.0,而不是0.25

#include <iostream>

using namespace std;

__managed__ double x;
__managed__ double y;
__managed__ double r;

__global__ void ceilDiv()
{
    r = __ddiv_ru(x,y);
}

int  main()
{
    x = 8;
    y = 32;
    r = -1;

    ceilDiv<<<1,1>>>();
    cudaDeviceSynchronize();

    cout << "The ceil of " << x << "/" << y << " is " << r << endl;

    return 1;
}
#包括
使用名称空间std;
__管理双x;
__管理双y;
__管理的双r;
__全局无效ceilDiv()
{
r=(x,y);
}
int main()
{
x=8;
y=32;
r=-1;
ceilDiv();
cudaDeviceSynchronize();

cout你得到的结果是正确的

您正在使用的内部设备使用特定的IEEE 754-2008舍入模式为最后一位的单元(ULP)实现双精度除法有效位的。这控制当结果不能以所选格式准确表示时会发生什么。在这种情况下,您选择了向上舍入,这意味着在除法结果中生成的有效位的最后一位向上舍入(向上舍入)+∞). 在您的情况下,所有舍入模式都应该产生相同的结果,因为结果可以用IEEE 754 binary64格式精确表示(它是2的舍入幂)


在编写更多浮点代码之前,请阅读所有内容。

您获得的结果是正确的

您正在使用的内部设备使用特定的IEEE 754-2008舍入模式为最后一位的单元(ULP)实现双精度除法有效位的。这控制当结果不能以所选格式准确表示时会发生什么。在这种情况下,您选择了向上舍入,这意味着在除法结果中生成的有效位的最后一位向上舍入(向上舍入)+∞). 在您的情况下,所有舍入模式都应该产生相同的结果,因为结果可以用IEEE 754 binary64格式精确表示(它是2的舍入幂)

在编写更多的浮点代码之前,请阅读所有内容