了解袖口分析 - 执行暂停?

时间:2016-05-23 21:16:27

标签: c++ cuda profiling fft

我目前正在寻找一个包含袖口调用的应用程序。我正在使用nvidia视觉分析器。目前mcpy操作和袖口执行之间存在差距,我真的不明白。由于某种原因,memcpy和cufft之间存在约0.75+秒的差距。在某些时候,“仪器”中有红线?我不确定这意味着什么。我怀疑这个区域是袖口的计划部分。我正在运行300个批次的300个袖口并使用cufftplanmany。我怀疑但不确定。如果有人可以启发我或指向我寻找有关该领域的更多信息,我会很高兴。

我附上了一张照片。Profiling fft 右边的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);

祝你好运

1 个答案:

答案 0 :(得分:0)

在主要的袖口呼叫之前进行初始袖口呼叫后,间隙移动了。因此,图像中看到的间隙最有可能来自袖口初始化时间。