相当于 CUDA 类型转换内在函数 __double2loint、__double2hiint 和 __hiloint2double 的内在函数

Intrinsics equivalent to the CUDA Type Casting Intrinsics __double2loint, __double2hiint and __hiloint2double

我想弄清楚,CUDA 类型转换内在函数 CPU 的等价物是什么 __double2loint, __double2hiint and __hiloint2double

我猜 _mm_cvttsd_si32 可能等同于 __double2loint(正确吗?),但我没有找到 __double2hiint 和 __hiloint2double 的等价物。可以在 C 中实现此类函数的快速版本吗?

您可以通过联合表达这些操作。只要优化开启 (nvcc -O3 ...).

,现代编译器就不会产生额外开销
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;
}