cufft1d c2c

编程入门 行业动态 更新时间:2024-10-08 08:25:40

cufft1d <a href=https://www.elefans.com/category/jswz/34/1703071.html style=c2c"/>

cufft1d c2c

#include"iostream"
#include"cuda_runtime_api.h"
#include"device_launch_parameters.h"
#include"cufft.h"

#include “sys/time.h”


///time
double what_time_is_it_now() {
struct timeval time;
if (gettimeofday(&time, NULL)) {
return 0;
}
return (double)time.tv_sec + (double)time.tv_usec * .000001;
}

int main()
{
const int Nt =10241024;
const int BATCH = 2;
double start, end;
//BATCH用于批量处理一批一维数据,当BATCH=2时
//则将0-1024,1024-2048作为两个一维信号做FFT处理变换
cufftComplex
host_in, * host_out, * device_in, * device_out;
//主机内存申请及初始化–主机锁页内存

cudaMallocHost((void**)&host_in, Nt * sizeof(cufftComplex));
cudaMallocHost((void**)&host_out, Nt * sizeof(cufftComplex));for (int i = 0; i < Nt; i++)
{host_in[i].x = i + 1;host_in[i].y = i *3;}
//设备内存申请
cudaMalloc((void**)&device_in, Nt * sizeof(cufftComplex));
cudaMalloc((void**)&device_out, Nt * sizeof(cufftComplex));
//数据传输--H2D
cudaMemcpy(device_in, host_in, Nt * sizeof(cufftComplex), cudaMemcpyHostToDevice);//创建cufft句柄
cufftHandle cufftForwrdHandle;
int j;
int k = 0;
int m;cudaDeviceSynchronize();
for (j = 2 * 1024; j <= 1024 * 1024; j *= 2) {cufftPlan1d(&cufftForwrdHandle,j, CUFFT_C2C, BATCH);//cufftPlan1d(&cufftInverseHandle, Nt, CUFFT_C2C, BATCH);if (j < 128 * 1024) {k = 5000;}else {k = 1000;}// start = what_time_is_it_now();for (m = 0; m < k; m++) {//执行fft正变换cufftExecC2C(cufftForwrdHandle, device_in, device_out, CUFFT_FORWARD);}cudaDeviceSynchronize();end = what_time_is_it_now();printf("%dk   ", j / 1024);printf("\t%f   ", (end - start));printf("\t%f   \n ", 1000 * (end - start) / k);

}

return 0;

}

更多推荐

cufft1d c2c

本文发布于:2023-06-19 16:06:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/787942.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:cufft1d   c2c

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!