diff --git a/src/Function2D.cu b/src/Function2D.cu index cac7f79..a97628d 100644 --- a/src/Function2D.cu +++ b/src/Function2D.cu @@ -1194,7 +1194,7 @@ void Aurora::fftshift(CudaMatrix &aMatrix){ } else { int copySize = aMatrix.getDimSize(0) / 2 + 1; float *data = nullptr; - cudaMalloc((void **)&data, copySize * aMatrix.getValueType()); + cudaMalloc((void **)&data,copySize*sizeof(float)*aMatrix.getValueType()); memcpyColKernel<<>>( aMatrix.getData(), data, copySize * aMatrix.getValueType(), aMatrix.getDimSize(0) * aMatrix.getValueType(), @@ -1220,7 +1220,7 @@ void Aurora::ifftshift(CudaMatrix &aMatrix){ } else { int copySize = aMatrix.getDimSize(0) / 2 + 1; float *data = nullptr; - cudaMalloc((void **)&data, copySize * aMatrix.getValueType()); + cudaMalloc((void **)&data,copySize*sizeof(float)*aMatrix.getValueType()); memcpyColKernel<<>>( aMatrix.getData()+(copySize-1)* aMatrix.getValueType(), data, copySize * aMatrix.getValueType(), diff --git a/test/Function2D_Cuda_Test.cpp b/test/Function2D_Cuda_Test.cpp index c0329b7..a1af504 100644 --- a/test/Function2D_Cuda_Test.cpp +++ b/test/Function2D_Cuda_Test.cpp @@ -684,6 +684,28 @@ TEST_F(Function2D_Cuda_Test, fft) } } + { + float * data = new float[36]; + for (size_t i = 0; i < 18; i++) + { + data[i*2] = i%9+1; + data[i*2+1] = 1; + } + auto fm = Aurora::Matrix::fromRawData(data,9,2,1,Aurora::Complex); + auto fmD = fm.toDeviceMatrix(); + Aurora::fftshift(fm); + Aurora::fftshift(fmD); + for (size_t i = 0; i < fm.getDataSize()*2; i++) + { + EXPECT_FLOAT_AE(fm[i], fmD.getValue(i)); + } + Aurora::ifftshift(fm); + Aurora::ifftshift(fmD); + for (size_t i = 0; i < fm.getDataSize()*2; i++) + { + EXPECT_FLOAT_AE(fm[i], fmD.getValue(i)); + } + } { float * data = new float[250000]; for (size_t i = 0; i < 250000; i++) @@ -721,7 +743,7 @@ TEST_F(Function2D_Cuda_Test, fft) } Aurora::ifftshift(fm); Aurora::ifftshift(fmD); - for (size_t i = 0; i < fm.getDataSize(); i++) + for (size_t i = 0; i < fm.getDataSize()*2; i++) { EXPECT_FLOAT_AE(fm[i], fmD.getValue(i)); }