2012-05-14 9 views
16

मैं जीपीयू के समय के आंतरिक कर्नेल को मापना चाहता हूं, एनवीआईडीआईए कुडा में इसे कैसे मापें? उदा।NVIDIA CUDA में आंतरिक कर्नेल समय को मापने के लिए कैसे?

__global__ void kernelSample() 
{ 
    some code here 
    get start time 
    some code here 
    get stop time 
    some code here 
} 
+0

अमीन, (कुछ साल पहले) आपने एक उत्तर स्वीकार किया जो उपयोगी जानकारी है लेकिन आपके वास्तविक प्रश्न का उत्तर नहीं देता है। क्या आप शायद उत्तर को प्रतिबिंबित करने के लिए प्रश्न को स्वीकार नहीं कर रहे हैं या संपादित कर रहे हैं? – einpoklum

उत्तर

5

इसे आज़माएं, यह मिलीसेकंड में 2 घटनाओं के बीच का समय मापता है।

__global__ void kernelSample(int *runtime) 
{ 
    // .... 
    clock_t start_time = clock(); 
    //some code here 
    clock_t stop_time = clock(); 
    // .... 

    runtime[tidx] = (int)(stop_time - start_time); 
} 

कौन से दो कॉल के बीच घड़ी चक्रों की संख्या देता है:

cudaEvent_t start, stop; 
    float elapsedTime; 

    cudaEventCreate(&start); 
    cudaEventRecord(start,0); 

//Do kernel activity here 

cudaEventCreate(&stop); 
cudaEventRecord(stop,0); 
cudaEventSynchronize(stop); 

cudaEventElapsedTime(&elapsedTime, start,stop); 
printf("Elapsed time : %f ms\n" ,elapsedTime); 
+19

उस कोड को कर्नेल के अंदर उपयोग नहीं किया जा सकता है, जो सवाल पूछ रहा है। – talonmies

+0

@talonmies: तो, यह उत्तर प्रश्न का उत्तर नहीं देता है लेकिन स्वीकार किया जाता है। क्या करे? सवाल शायद संपादित करें? – einpoklum

+0

एकाधिक gpus पर openmp धागे में कर्नेल चलाना और यह कोड मुझे 0 एमएस परिणाम – newbieee

33

आप कुछ इस तरह कर सकते हैं। हालांकि थोड़ा सावधान रहें, टाइमर कुछ सेकंड के बाद बह जाएगा, इसलिए आपको यह सुनिश्चित करना चाहिए कि लगातार कॉल के बीच कोड की अवधि काफी कम हो। आपको यह भी पता होना चाहिए कि कंपाइलर और असेंबलर निर्देश पुन: ऑर्डरिंग करते हैं ताकि आप यह जांचना चाहें कि घड़ी कॉल एक दूसरे के आगे SASS आउटपुट में एक दूसरे के बगल में डालने को हवा नहीं देते हैं (चेक करने के लिए cudaobjdump का उपयोग करें)।

+0

देता है मैं परीक्षण करता हूं और ठीक से काम नहीं करता हूं। घड़ी() होस्ट फ़ंक्शन है, डिवाइस फ़ंक्शन नहीं। – Amin

+5

'घड़ी()' ** ** एक डिवाइस फ़ंक्शन है और यह वास्तव में काम करता है। 'घड़ी()' और 'clock64()' के विवरण के लिए CUDA प्रोग्रामिंग मार्गदर्शिका के अनुभाग बी 10 देखें। यदि यह "ठीक से काम नहीं करता है" तो आप कुछ गलत कर रहे हैं या आउटपुट का मतलब क्या समझते हैं। – talonmies

+0

आउटपुट घड़ी चक्र है। सेकंड में कैसे परिवर्तित करें? – Amin

संबंधित मुद्दे