1
我正在使用批次cuFFT進行實驗。但我認爲我沒有得到正確的結果。cuFFT R2C批量輸出大小與輸入大小不匹配
int NX = 16; // size of the array
int BATCH = 16; // # of batch
我在GPU上分配兩個數組:
float *src;
cufftComplex *dst;
cudaMalloc((void**)&src, sizeof(float)*NX*BATCH);
cudaMalloc((void**)&dst, sizeof(cufftComplex)*NX*BATCH);
我初始化源陣列用一個簡單的內核是這樣的:
__global__ void initFloatArray(float *data, const int size) {
const int i = (blockIdx.x * blockDim.x) + threadIdx.x;
if (i < size) {
data[i] = i % NX;
}
}
所以基本上,每個陣列有值從0到15.我得到這16次。
創建我的計劃是這樣的:
cufftPlanMany(&plan, 1, &NX, nullptr, 1, NX, nullptr, 1, NX, CUFFT_R2C, BATCH);
,然後我執行我的計劃:
cufftExecR2C(plan, src, dst);
最後,我DST的內容傳送回主機。但是,當我打印出來的價值觀,我得到這樣的:
BATCH 0:
<120, 0>.length = 120
<-8, 40.2187>.length = 41.0066
<-8, 19.3137>.length = 20.905
<-8, 11.9728>.length = 14.3996
<-8, 8>.length = 11.3137
<-8, 5.34543>.length = 9.62152
<-8, 3.31371>.length = 8.65914
<-8, 1.5913>.length = 8.15673
<-8, 0>.length = 8
<120, 0>.length = 120
<-8, 40.2187>.length = 41.0066
<-8, 19.3137>.length = 20.905
<-8, 11.9728>.length = 14.3996
<-8, 8>.length = 11.3137
<-8, 5.34543>.length = 9.62152
<-8, 3.31371>.length = 8.65914
BATCH 1:
<-8, 1.5913>.length = 8.15673
<-8, 0>.length = 8
<120, 0>.length = 120
<-8, 40.2187>.length = 41.0066
<-8, 19.3137>.length = 20.905
<-8, 11.9728>.length = 14.3996
...
我期待一個重複的輸出,但它是重複每9號,而不是每16像它應該。
我做錯了什麼?或者有什麼我不瞭解的。
只是更精確,它是floor(N/2)+1複數值。所以15,你會得到8個複合體。 – widgg