2012-03-25 10 views
1

Q0:cuComplex.hとexp()

cuComplex.hはexp()をサポートしていますか?

Q1:

A = Bの*のEXPを作成する方法(私はCを*)、Aは、B、Cは、実数の同じサイズの配列でありますか?これは正しいですか?メイン

cuComplex A; 
float B; 
cuComplex c; 

カーネル:

c[idx] = (0, C[idx]); 

A[idx] = B[idx] * exp(c[idx]); 

Q2:

cuComplex私は元の行列、次いで2回より多くのメモリを割り当てる必要が手段2つのフロート番号を含んでいます。純粋な虚数を作る方法はありますか?

+0

「純粋な虚数をreateする方法はありますか?」平均? – talonmies

+0

ここには非常に多くのものがあります - cuComplex.hを見て、複雑な算術のためにその関数を使用してみてください。 –

+0

talonmies:sry、 "純粋な虚数を作成する"のように:a = i * 4、ここで私は虚数単位 – user1281071

答えて

7

cuComplex.hは、cuComplex(主にCUBLASおよびCUFFTライブラリ内で使用されるもの)で基本操作をいくつか提供していますが、指数関数はサポートされていません。

コンポーネント指向の算術を使用して指数関数を実装することができます。 cuComplexは、複素数の実数部をx成分に格納し、虚数部をy成分に格納します。所与の複素数z = X + I yを*指数は次のように計算することができる。

EXP(Z)= EXP(X)*(COS(Y)+ iが(Y)罪*)

これは、(未テスト)以下のCUDAコードにつながる:何

cuComplex my_complex_exp (cuComplex arg) 
{ 
    cuComplex res; 
    float s, c; 
    float e = expf(arg.x); 
    sincosf(arg.y, &s, &c); 
    res.x = c * e; 
    res.y = s * e; 
    return res; 
} 
+1

OPは 'float e = expf(cuCrealf(arg))'純粋に想像上の指数を取り扱っているからです。 + msgstr "" sincosf "は+1しますが、実際には" sinf "と" cosf "よりもずっと高速です。私のGT540Mでのそれらの_each_とほぼ同じくらい速い。 – leftaroundabout

関連する問題