2017-03-17 154 views
0

我想弄清楚,什么是CPU等同于CUDA类型转换内部函数__double2loint__double2hiint__hiloint2double内部函数相当于CUDA类型转换内部函数__double2loint,__double2hiint和__hiloint2double

我猜_mm_cvttsd_si32可能相当于__double2loint(是否正确?),但我没有找到__double2hiint和__hiloint2double的等价物。有可能在C中实现这种功能的快速版本?

+0

您可以使用'union'轻松地在标准C中编写这些函数。 – tera

+1

'_mm_cvttsd_si32'不是重新解释,它是一种转换。你可以重新解释'_mm_castsi128_ps'等,但正如你所提到的,你可以在C本身做到这一点。 – harold

+0

如何开始执行上面的任何CUDA类型的铸造内部函数? –

回答

2

您可以通过联合来表达这些操作。只要优化处于开启状态,这不会为现代编译器带来额外开销(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; 
}