2017-03-17 14 views
0

を鋳造私は組み込み関数__double2loint__double2hiint__hiloint2doubleキャストCUDAタイプのCPU同等物が何であるか、把握しようとしています。CUDAタイプと同等の組み込み関数は、組み込み関数の__double2loint、__double2hiintと__hiloint2double

_mm_cvttsd_si32は__double2lointと同等かもしれないと思いますが(それは正しいですか?)、__double2hiintと__hiloint2doubleに相当するものは見つかりませんでした。このような関数の高速版をC言語で実装することは可能ですか?

+0

標準のCでこれらの関数を簡単に 'union'を使って書くことができます。 – 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; 
} 
関連する問題