2];
// створення планаplan = new cufftHandle ();. cufftPlan1d (plan, inputData.length, cufftType.CUFFT_R2C, 1);
// виконання БПФtimeStart = new Date (). getTime ();. cufftExecR2C (plan, inputData, fftResults);. out.println ("Час перетворення:" + (new Date (). getTime () - timeStart)/1000.0 + "сек");
// знищення плана.cufftDestroy (plan);
return cudaComplexToDouble (fftResults);
}
/**
* Виконує ШПФ масиву значень за допомогою CUDA, здійснюючи
* операції з даними в пам'яті відеокарти
*
* @ param inputData - масив вхідних значень
* @ return масив з результатами БПФ
*/static double [] jcudaTransformDeviceMemory (float [] inputData) {[] fftResults = new float [inputData.length + 2];
// покажчик на устройствоdeviceDataIn = new Pointer ();
// виділення пам'яті на відеокарті для вхідних даних
JCuda.cudaMalloc (deviceDataIn, inputData.length * 4);
// копіювання вхідних даних у пам'ять відеокарти
JCuda.cudaMemcpy (deviceDataIn, Pointer.to (inputData), inputData.length * 4,. cudaMemcpyHostToDevice);
Pointer deviceDataOut = new Pointer ();
// виділення пам'яті на відеокарті для результатів перетворення
JCuda.cudaMalloc (deviceDataOut, fftResults.length * 4);
// створення планаplan = new cufftHandle ();. cufftPlan1d (plan, inputData.length, cufftType.CUFFT_R2C, 1);
/*
* plan - покажчик на план
* inputDataSize - кількість вхідних значень; якщо вхідні дані є * речовими, то цей параметр дорівнює довжині вхідного масиву, а якщо * вхідні дані це масив комплексних чисел, то значення параметра дорівнює * половині довжини вхідного масиву, тому що одне комплексне число представлено * двома елементами масиву
* cufftType.CUFFT_R2C - тип перетворення
* 1 - кількість подібних перетворень
*/
// виконання БПФtimeStart = new Date (). getTime ();. cufftExecR2C (plan, deviceDataIn, deviceDataOut);. out.println ("Час перетворення:" + (new Date (). getTime () - timeStart)/1000. + "сек")
// копіювання результатів з пам'яті відеокарти в оперативну пам'ять
JCuda.cudaMemcpy (Pointer.to (fftResults), deviceDataOut, fftResults.length * 4,. cudaMemcpyDeviceToHost);
// звільнення
}
/**
* Виконує ШПФ масиву значень за допомогою Apache Commons Math
*
* @ param inputData - масив вхідних значень
* @ return масив з результатами БПФ
*/static double [] commonsTransform (double [] inputData) {fft = new FastFourierTransformer (); timeStart = new Date (). getTime (); [] cmx = fft.transform (inputData) ;. out.println ("Час перетворення:" + (new Date (). getTime () - timeStart)/1000. + "сек"); [] fftReults = new double [inpu...