我目前正在寻找一个包含袖口调用的应用程序。我正在使用nvidia视觉分析器。目前mcpy操作和袖口执行之间存在差距,我真的不明白。由于某种原因,memcpy和cufft之间存在约0.75+秒的差距。在某些时候,“仪器”中有红线?我不确定这意味着什么。我怀疑这个区域是袖口的计划部分。我正在运行300个批次的300个袖口并使用cufftplanmany。我怀疑但不确定。如果有人可以启发我或指向我寻找有关该领域的更多信息,我会很高兴。
我附上了一张照片。 右边的blut部分是cufft执行,左边的棕色是memcpy和malloc。我也想知道为什么它在整个过程中只是说cudafree在顶部。
编辑:这是代码。第一部分是memcpy和malloc,第二部分是规划和fft执行
int TotalSearchSize = TempSearchArea*loadsize;
int mem_size = sizeof(Complex)* TotalSearchSize;
cufftComplex *d_signal;
checkCudaErrors(cudaMalloc((void **)&d_signal, mem_size));
checkCudaErrors(cudaMemcpy(d_signal, imageNew, mem_size, cudaMemcpyHostToDevice));
cufftComplex *d_signal_result;
checkCudaErrors(cudaMalloc((void **)&d_signal_result, mem_size));
cufftComplex *d_filter_kernel;
checkCudaErrors(cudaMalloc((void **)&d_filter_kernel, mem_size));
checkCudaErrors(cudaMemcpy(d_filter_kernel, tempNew, mem_size, cudaMemcpyHostToDevice));
int rankSize = 2;
int rank[2];
rank[0] = TempSearchSizeY; rank[1] = TempSearchSizeX;
cufftHandle plan;
cufftPlanMany(&plan, rankSize, rank, NULL, 1, 0, NULL, 1, 0, CUFFT_C2C, loadsize);
printf("Transforming signal cufftExecR2C\n");
cufftExecC2C(plan, (cufftComplex *)d_signal, (cufftComplex *)d_signal, CUFFT_FORWARD);
cufftExecC2C(plan, (cufftComplex *)d_filter_kernel, (cufftComplex *)d_filter_kernel, CUFFT_FORWARD);
祝你好运
答案 0 :(得分:0)
在主要的袖口呼叫之前进行初始袖口呼叫后,间隙移动了。因此,图像中看到的间隙最有可能来自袖口初始化时间。