मैं सी में कुछ बहुत ही कम संचालन के लिए कुछ माइक्रो-बेंचमार्किंग कोड लिख रहा हूं। उदाहरण के लिए, एक चीज जिसे मैं माप रहा हूं वह है कि पास किए गए तर्कों की संख्या के आधार पर खाली फ़ंक्शन को कॉल करने के लिए कितने चक्र की आवश्यकता है।इंटेल कोर 2 डुओ की निर्देश पाइपलाइन निकालें?
वर्तमान में, मैं सीपीयू की चक्र गणना प्राप्त करने के लिए प्रत्येक ऑपरेशन से पहले और बाद में आरडीटीएससी निर्देश का उपयोग कर रहा हूं। हालांकि, मुझे चिंता है कि पहले आरडीटीएससी से पहले जारी किए गए निर्देश वास्तविक मापों को धीमा कर सकते हैं जिन्हें मैं माप रहा हूं। मैं भी चिंतित हूं कि दूसरे आरडीटीएससी जारी होने से पहले पूरा ऑपरेशन पूरा नहीं हो सकता है।
क्या किसी को x86 निर्देश के बारे में पता है जो किसी भी नए निर्देश जारी किए जाने से पहले सभी इन-फ्लाइट निर्देशों को प्रतिबद्ध करने के लिए मजबूर करता है? मुझे बताया गया है कि सीपीयूआईडी ऐसा कर सकता है, लेकिन मैं ऐसा कोई दस्तावेज नहीं ढूंढ पाया जो ऐसा कहता है।
आप बाड़ निर्देशों के बारे में सही हैं। सीपीयूआईडी वास्तव में उन्हें इंगित करता है (मैंने इसके बारे में मेरा जवाब हटा दिया है)। ध्यान दें कि CPUID क्रमबद्ध होने पर, यह कैश को साफ़ नहीं करता है, जो प्रदर्शन को भी प्रभावित कर सकता है। डब्ल्यूबीआईएनवीडी के साथ कैश को साफ़ किया जा सकता है। आप इसे अपने उत्तर में जोड़ना चाहेंगे। –
wbinvd विशेषाधिकार प्राप्त है ... हालांकि आप clflush का उपयोग कर सकते हैं। पिछले हफ्ते से इस तरह की चीज के बारे में एक अलग सवाल है .... http://stackoverflow.com/questions/558848/can-i-force-cache-coherency-on-a-multicore-x86-cpu/558900# 558900 – SoapBox
ग्रेट उत्तर। धन्यवाद। –