2012-09-10 28 views
11

सामान्य विडसम यह है कि rep movsb समान संचालन करते समय rep movsd (या 64-बिट, rep movsq पर) से बहुत धीमी है। हालांकि, मैं कुछ आधुनिक मशीनों पर परीक्षण कर रहा हूं, और रन टाइम बफर आकारों (10 बाइट्स से 2 मेग्स) की एक विस्तृत श्रृंखला में समान (माप शोर तक) बाहर आ रहे हैं। अब तक मैंने अभी 2 मशीनों (32-बिट इंटेल एटम डी 510 और 64-बिट एएमडी एफएक्स 8120) पर परीक्षण किया है।x86 स्ट्रिंग निर्देश प्रदर्शन के बारे में विश्वसनीय जानकारी?

  • वहाँ किसी भी आधुनिक x86 (32- या 64-बिट) मशीनें हैं जहां rep movsb की तुलना में धीमी rep movsd (या rep movsq)?

  • यदि नहीं, आखिरी मशीन क्या थी जहां अंतर महत्वपूर्ण था, और यह कितना महत्वपूर्ण था?

हो, तो कोई मुझे rep movsd या rep movsq का उपयोग कर के लिए माल-culting परीक्षण का एक समूह असंरेखित सिर/पूंछ में स्मृति को तोड़ने के लिए से बचने के लिए इच्छुक के दृष्टिकोण से यह सवाल और गठबंधन बीच पूछ रहा हूँ ऐसा करने के लिए वास्तविक लाभ ...

+0

आधुनिक मशीनों के लिए आपके प्रदर्शन परिणाम सही हैं। –

+1

यह स्मृति बस बैंडविड्थ द्वारा थ्रॉटल किया गया है, सीपीयू नहीं। –

+0

सिद्धांत में यह संभवतः सत्य है, लेकिन प्रतिलिपि बनाने के अन्य तरीके (उदा। सी लूप) 2-8x धीमे हैं। इसलिए खर्च किए गए सीपीयू का समय एक अंतर बना रहा है। –

उत्तर

15

मानक बहुत से यहाँ: instlatx64.atw.hu

उदाहरण के लिए (इंटेल कोर 2 डुओ E6700):

REP MOVSB BW in L1D:13.04 B/c 34829MiB/s 
REP MOVSW BW in L1D:13.29 B/c 35493MiB/s 
REP MOVSD BW in L1D:13.40 B/c 35783MiB/s 

जो दिखाता है कि एक अंतर है, लेकिन यह छोटा है। (, D5xx साथ गायब हो गया है लगता है तो आप बस इसे याद किया)

REP MOVSB BW in L1D:25.50 B/c 86986MiB/s 
REP MOVSW BW in L1D:18.09 B/c 61721MiB/s 
REP MOVSD BW in L1D:27.47 B/c 93693MiB/s 

लगता है वहाँ कुछ परमाणुओं पर एक बड़ा अंतर है:

SandyBridge के लिए यह एक एक छोटे से अजीब है

REP MOVSB BW in L1D: 0.53 B/c 990MiB/s 
REP MOVSW BW in L1D: 1.93 B/c 3598MiB/s 
REP MOVSD BW in L1D: 3.74 B/c 6960MiB/s 

मुझे किसी अन्य चीज़ पर इतना बड़ा अंतर नहीं मिला है जिसे नया माना जा सकता है।