2016-05-23 15 views
-1

Ich bin derzeit auf der Suche nach Profiling eine Anwendung, die Manschette Anrufe enthält. Ich benutze den nvidia Visual Profiler. Derzeit gibt es eine Lücke zwischen der mcpy-Operation und der Ausführung der Manschette, die ich nicht wirklich verstehe. Aus irgendeinem Grund gibt es eine Lücke von ungefähr 0,75+ Sekunden zwischen Memcpy und Cufft. An einigen Stellen gibt es rote Linien von "Instrumentierung"? Ich bin mir nicht sicher, was das bedeutet. Ich vermute, dass dieser Bereich der Planungsteil der Manschette ist. Ich führe 2d Manschette von 300 Chargen und mit camtttplanmany. Ich habe meinen Verdacht, bin mir aber nicht sicher. Wenn jemand mich aufklären oder auf eine Quelle verweisen kann, um mehr Informationen über dieses Gebiet zu finden, würde ich mich freuen.Verständnis der Manschettenprofilierung - Ausführungspause?

Ich habe ein Bild von, wie es aussieht. Profiling fft Der blut Teil auf der rechten Seite ist die Manschette Ausführung, braun auf der linken Seite ist memcpy und malloc. Ich frage mich auch, warum es während des gesamten Prozesses nur Cudafree an der Spitze sagt.

Edit: Hier ist der Code. Der erste Teil ist die Memcpy der und malloc ist und der zweite Teil ist die Planung und Ausführung 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); 

Mit freundlichen Grüßen

+3

es ist wahrscheinlich Initialisierungszeit für die Manschettenbibliothek. Es ist ziemlich schwer zu sagen, wenn Sie den entsprechenden Code nicht anzeigen. –

+0

Okay, ich werde diesen Teil des Codes bearbeiten. – LukaK

+1

Sind das die ersten Aufrufe in Ihrem Code? Oder haben Sie andere CUFFT- und CUDA-Operationen vor diesen? –

Antwort

0

Nachdem einen anfänglichen cufft Anruf vor dem Haupt cufft Anruf, bewegte die Lücke. Daher kommt die Lücke, die in dem Bild gesehen wird, höchstwahrscheinlich von der Initialisierungszeit der Manschette her.