दिलचस्प पोस्ट
डुप्लिकेट कॉलम और पंक्तियाँ एक NumPy 2D सरणी से निकालना डॉकर-सर्वर कनेक्शन के मुद्दों में न्यूनतम फ्लास्क ऐप को नियोजित करना कोको में यादृच्छिक अल्फ़ान्यूमेरिक स्ट्रिंग उत्पन्न करें मैं एक आईएसओ 8601 दिन-समय की स्ट्रिंग को पायथन डीट टाइम ऑब्जेक्ट में कैसे अनुवाद कर सकता हूं? दो सबस्ट्रिंग के बीच स्ट्रिंग खोजें ओएथ v2 को एक्सेस और ताज़ा करें टोकन दोनों क्यों मिलता है? PHP परियोजनाओं के लिए एक तैनाती / बिल्ड / सीआई चक्र सेट करना रनटाइम पर कक्षा परिभाषा की एनोटेशन स्ट्रिंग पैरामीटर को संशोधित करें अग्रभूमि के लिए एक विंडोज़ फार्म आवेदन लाने का "सही" तरीका क्या है? सी # गतिशील ऑब्जेक्ट में JSON को दोसर करना? WSGIDaemon प्रोसेसिंग के साथ डीजेन्गा एपाचे कॉन्फ़िगरेशन काम नहीं कर रहा है सेल संपादन के बाद जेटेबल सेल रेंडरिंग को बनाए रखने के लिए कैसे एक आइटम अपनी संभावना से चुनने के लिए? Sys.stdout.flush () विधि का उपयोग Android में सुरक्षित HTTP पोस्ट

माइक्रो फ्यूजन और एड्रेसिंग मोड

मुझे इंटेल ® आर्किटेक्चर कोड विश्लेषक (आईएसीए) का इस्तेमाल करते हुए कुछ अप्रत्याशित (मेरे लिए) मिल गया है

[base+index] एड्रेसिंग का उपयोग करते हुए निम्नलिखित निर्देश

 addps xmm1, xmmword ptr [rsi+rax*1] 

आईएसीए के अनुसार माइक्रो फ्यूज नहीं करता है हालांकि, अगर मैं इस तरह [base+offset] उपयोग [base+offset] हूं

 addps xmm1, xmmword ptr [rsi] 

आईएसीए ने रिपोर्ट किया कि यह फ्यूज करता है

इंटेल अनुकूलन संदर्भ मैनुअल की धारा 2-11 निम्न उदाहरण को "माइक्रो-फ्यूज़ माइक्रो-ऑप्स के रूप में देता है जो कि सभी डिकोडर्स द्वारा नियंत्रित किया जा सकता है"

 FADD DOUBLE PTR [RDI + RSI*8] 

और एगारर फॉग के ऑप्टिमाइज़ेशन असेंबली मैनुअल में भी [base+index] एड्रेसिंग का उपयोग करके माइक्रो-ओप फ्यूजन के उदाहरण दिए गए हैं। देखें, उदाहरण के लिए, धारा 12.2 "कोर 2 पर एक उदाहरण"। तो सही जवाब क्या है?

वेब के समाधान से एकत्रित समाधान "माइक्रो फ्यूजन और एड्रेसिंग मोड"

मैंने अब इंटेल सैंडी ब्रिज, आइवी ब्रिज, हैसवेल और ब्रॉडवेल के लिए परीक्षण के परिणामों की समीक्षा की है। अभी तक स्काईलेक पर परीक्षण करने के लिए मेरे पास पहुंच नहीं है परिणाम हैं:

  • दो-पंजीयन संबोधन और तीन इनपुट निर्भरता के साथ निर्देश सभी तरह से फ़्यूज़िंग होते हैं। वे सूक्ष्म संचालन कैश में केवल एक ही प्रविष्टि लेते हैं, जब तक कि इसमें 32 बिट डेटा (या 2 * 16 बिट) न हो।
  • Haswell और Broadwell पर फ़्यूज़ गुणा और जोड़ निर्देशों का उपयोग करके, चार इनपुट निर्भरता के साथ निर्देश बनाना संभव है। ये निर्देश अभी भी एक माइक्रो-ओप में फ्यूज करते हैं और माइक्रो-ओप कैश में केवल एक ही प्रविष्टि लेते हैं।
  • उदाहरण के लिए 32 बिट्स डेटा के साथ निर्देश, 32 बिट्स का पता और 8 बिट्स तत्काल डेटा अभी भी फ्यूज कर सकते हैं, लेकिन माइक्रो-ऑपरेशन कैश में दो प्रविष्टियों का उपयोग करें (जब तक कि 32 बिट्स को 16-बिट हस्ताक्षरित पूर्णांक में संकुचित नहीं किया जा सकता)
  • चीर-रिश्तेदार पते के साथ निर्देश और एक तत्काल स्थिर फ्यूज़िंग नहीं हैं, भले ही ऑफसेट और तत्काल स्थिर दोनों बहुत कम हो।
  • सभी परिणाम परीक्षण किए गए चार मशीनों पर समान हैं।
  • माइक्रोस्कोप कैश में फ़िट होने के लिए पर्याप्त रूप से छोटे थे जो लूप पर प्रदर्शन निगरानी काउंटर का उपयोग करते हुए मेरे स्वयं के परीक्षण कार्यक्रमों के साथ परीक्षण किया गया था

आपके परिणाम अन्य कारकों के कारण हो सकते हैं मैंने आईएसीए का इस्तेमाल करने की कोशिश नहीं की है

मेरा परीक्षण इंगित करता है कि स्काईलेक पर कम से कम 1 , प्रोसेसर सैंडीब्रिज के विपरीत बिल्कुल जटिल एड्रेसिंग मोड को फ़्यूज़ कर देता है।

यही है, 1-आर्ज और 2-अजीब संस्करण जो कि पीटर द्वारा उपरोक्त कोड के समान चक्रों में चलते हैं, उसी प्रकार से यूप्स के प्रेषित और सेवानिवृत्त हैं।

मेरे परिणाम:

./uop-test लिए प्रदर्शन काउंटर आँकड़े:

  23.718772 task-clock (msec) # 0.973 CPUs utilized 20,642,233 cycles # 0.870 GHz 80,111,957 instructions # 3.88 insns per cycle 60,253,831 uops_executed_thread # 2540.344 M/sec 80,295,685 uops_issued_any # 3385.322 M/sec 80,176,940 uops_retired_retire_slots # 3380.316 M/sec 0.024376698 seconds time elapsed 

./uop-test x लिए प्रदर्शन काउंटर आँकड़े:

  13.532440 task-clock (msec) # 0.967 CPUs utilized 21,592,044 cycles # 1.596 GHz 80,073,676 instructions # 3.71 insns per cycle 60,144,749 uops_executed_thread # 4444.487 M/sec 80,162,360 uops_issued_any # 5923.718 M/sec 80,104,978 uops_retired_retire_slots # 5919.478 M/sec 0.013997088 seconds time elapsed 

./uop-test xx लिए प्रदर्शन काउंटर आँकड़े:

  16.672198 task-clock (msec) # 0.981 CPUs utilized 27,056,453 cycles # 1.623 GHz 80,083,140 instructions # 2.96 insns per cycle 60,164,049 uops_executed_thread # 3608.645 M/sec 100,187,390 uops_issued_any # 6009.249 M/sec 100,118,409 uops_retired_retire_slots # 6005.112 M/sec 0.016997874 seconds time elapsed 

मुझे स्काईलेक पर कोई यूओपीएसईटीआईआरडी_एवाईआई निर्देश नहीं मिला, केवल "सेवानिवृत्त स्लॉट" आदमी जो जाहिरा तौर पर फ़्यूज़-डोमेन है

अंतिम परीक्षण ( uop-test xx ) एक ऐसा संस्करण है, जो पीटर के सुझाव हैं जो आरआईपी-रिश्तेदार सीपीपी का तात्कालिक उपयोग करता है, जिसे माइक्रोफूज़ नहीं कहा जाता है:

 .loop_riprel cmp dword [rel mydata], 1 cmp dword [rel mydata], 2 dec ecx nop nop nop nop jg .loop_riprel 

परिणाम बताते हैं कि प्रति चक्र के अतिरिक्त 2 यूप्स उठाए गए हैं और जारी किए गए सेवानिवृत्त काउंटरों द्वारा उठाया जाता है (इसलिए परीक्षण फ्यूजन होने के बीच अंतर कर सकता है, और नहीं)।

अन्य आर्किटेक्चर पर और परीक्षणों का स्वागत है! आप github में कोड (ऊपर पीटर से कॉपी) पा सकते हैं।


[1] … और संभवतः स्काईलेक और सेंडीब्रिज के बीच कुछ अन्य आर्किटेक्चर, क्योंकि पीटर ने केवल एसबी परीक्षण किया और मैं केवल एसकेएल का परीक्षण किया

ऊपरी इंटेल प्रोसेसर बिना यूओप कैश के फ्यूजन कर सकते हैं, इसलिए शायद यह यूओपी कैश की कमी है। मेरे पास इस समय का परीक्षण करने का समय नहीं है, लेकिन मैं अगली बार यूओपी फ्यूजन के लिए एक परीक्षण जोड़ूंगा, जब मैं अपना परीक्षण स्क्रिप्ट अपडेट करूँगा। क्या आपने एफएमए निर्देशों के साथ प्रयास किया है? वे एकमात्र निर्देश हैं जो 3 इनपुट निर्भरता को एक अनुपयुक्त यूओपी में अनुमति देते हैं।