与CUDA类型转换内部函数uuu double2point、uuu double2hiint和uuu hiloint2double等效的内部函数

与CUDA类型转换内部函数uuu double2point、uuu double2hiint和uuu hiloint2double等效的内部函数,c,cuda,sse,intrinsics,avx,C,Cuda,Sse,Intrinsics,Avx,我试图弄清楚,什么是CUDA类型的铸造本质的CPU等价物,以及 我猜mm_cvttsd_si32可能等同于uuu2loint(正确吗?),但我没有找到uuu2hiint和uu2hiloint的等价物。是否可以在C语言中实现此类函数的快速版本?您可以通过联合来表示这些操作。只要启用优化(nvcc-O3…),现代编译器就不会产生额外的开销 您可以使用联合\u mm\u cvttsd\u si32在标准C中轻松编写这些函数不是重新解释,而是转换。您可以使用\u mm\u castsi128\u ps等

我试图弄清楚,什么是CUDA类型的铸造本质的CPU等价物,以及


我猜mm_cvttsd_si32可能等同于uuu2loint(正确吗?),但我没有找到uuu2hiint和uu2hiloint的等价物。是否可以在C语言中实现此类函数的快速版本?

您可以通过联合来表示这些操作。只要启用优化(
nvcc-O3…
),现代编译器就不会产生额外的开销


您可以使用
联合
\u mm\u cvttsd\u si32在标准C中轻松编写这些函数
不是重新解释,而是转换。您可以使用
\u mm\u castsi128\u ps
等重新解释,但如上所述,您可以在C中自己进行解释。如何开始实现上述任何CUDA类型的转换内部函数?标准C中的代码比使用内部函数的代码快吗?
double hiloint2double(int hi, int lo)
{
    union {
        double val;
        struct {
            int lo;
            int hi;
        };
    } u;
    u.hi = hi;
    u.lo = lo;
    return u.val;
}

int double2hiint(double val)
{
    union {
        double val;
        struct {
            int lo;
            int hi;
        };
    } u;
    u.val = val;
    return u.hi;
}

int double2loint(double val)
{
    union {
        double val;
        struct {
            int lo;
            int hi;
        };
    } u;
    u.val = val;
    return u.lo;
}