मैंने कुछ सी कोड लिखा है जिसे मैं MATLAB का उपयोग करके संकलित करने के बाद MATLAB फॉर्म कहता हूं। सी कोड के अंदर, मैं निम्नलिखित कोड का उपयोग कर एक हिस्सा गणना के के समय को मापने:MATLAB की टिक-टोक और सी की घड़ी विसंगति
clock_t begin, end;
double time_elapsed;
begin = clock();
/* do stuff... */
end = clock();
time_elapsed = (double) ((double) (end - begin)/(double) CLOCKS_PER_SEC);
बीता हुआ समय सेकंड में निष्पादन समय होना चाहिए।
मैं फिर MATLAB में time_elapsed
मान आउटपुट (यह ठीक से निर्यात किया गया है; मैंने चेक किया है)। फिर MATLAB-side मैं इस सी फ़ंक्शन को कॉल करता हूं (जब मैं इसे MEX का उपयोग करके संकलित करता हूं) और मैं tic
और toc
का उपयोग करके इसके निष्पादन समय को मापता हूं। एक पूर्ण बेतुकापन क्या होता है यह है कि जब मैं टिक और टीओसी का उपयोग कर गणना करता हूं तो 0.0011s (500 रनों पर औसत, सेंट देव 1.4e-4) है जबकि सी कोड द्वारा लौटाया गया समय 0.037 है (500 रनों पर औसत, सेंट देव 0.0016)।
- पूरे समारोह के लिए निष्पादन समय कोड का एक हिस्सा के लिए निष्पादन समय से कम है:
यहाँ एक दो बहुत ही अजीब तथ्यों देख सकते हैं। इसलिए, या तो MATLAB या सी के माप दृढ़ता से गलत हैं।
- सी कोड में मापा निष्पादन समय बहुत बिखरे हुए हैं और बहुत अधिक सेंट प्रदर्शित करते हैं। विचलन (टीआईसी-टोक के लिए केवल 13% की तुलना में 44% भिन्नता का सहानुभूति)।
इन टाइमर के साथ क्या चल रहा है?
घड़ी का संकल्प क्या है? हम कैसे जानते हैं कि 'start = clock();' घड़ी के ठीक पहले या बस ठीक से निष्पादित किया गया है? क्या यह परिणाम को प्रभावित करता है? शायद। –
@ बोपर्सन तो, आपका मतलब है कि 'घड़ी()' सबसे अधिक टिक टिक सकता है? –
मेरा मतलब है कि एक टिक परिणाम को प्रभावित करने के लिए काफी बड़ा हो सकता है। 18 एमएस की तरह –