exp()是否支持cuComplex.h?
Q1:
如何寫A = B * EXP(I * 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倍以上的存儲器然後原始矩陣。有什麼辦法可以創建純虛數?
exp()是否支持cuComplex.h?
Q1:
如何寫A = B * EXP(I * 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倍以上的存儲器然後原始矩陣。有什麼辦法可以創建純虛數?
cuComplex.h只提供cuComplex上的一些基本操作(主要是在CUBLAS和CUFFT庫中使用的那些操作),不支持指數函數。
您可以使用組件式算法自己實現指數。 cuComplex在x分量中存儲複數的實部,在y分量中存儲虛部。給定複數z = X + I * Y,指數可以被計算爲:
EXP(Z)= EXP(X)*(COS(Y)+ I * SIN(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;
}
請注意,OP不需要'float e = expf(cuCrealf(arg))'因爲他們正在處理純粹的虛構指數。 +1'sincosf',它的確可以比'sinf'和'cosf'快一倍;幾乎和我的GT540M一樣快。 – leftaroundabout 2012-03-25 20:53:05
「是否有任何方法可以恢復純虛數?」意思? – talonmies 2012-03-25 15:27:37
這裏有很多錯誤 - 嘗試查看cuComplex.h並使用那裏的函數進行復雜的算術運算。 – 2012-03-25 15:32:50
talonmies:sry,「創建純虛數」,如:a = i * 4,其中我虛構單元 – user1281071 2012-03-25 15:44:12