x86

2008-08-31 15 views
81

में "गैर अस्थायी" मेमोरी एक्सेस का अर्थ क्या है यह कुछ हद तक निम्न स्तर का प्रश्न है। 86 विधानसभा में दो SSE निर्देश देखते हैं:x86

MOVDQA xmmi, m128

और

MOVNTDQA xmmi, m128

IA-32 सॉफ्टवेयर डेवलपर की मैनुअल का कहना है कि NT में MOVNTDQA गैर के लिए खड़ा है -टेम्पोरल, और अन्यथा यह MOVDQA के समान है।

मेरा प्रश्न है, गैर-टेम्पोरल का क्या अर्थ है?

+1

ध्यान दें कि एसएसई 4.1 'MOVNTDQA xmmi, m128' एक एनटी लोड है, जबकि अन्य सभी एनटी निर्देश स्टोर हैं, 'prefetchnta' को छोड़कर। यहां स्वीकार्य उत्तर केवल दुकानों के बारे में बात कर रहा है। [यही वह है जिसे मैं एनटी लोड के बारे में बदल सकता हूं] (http://stackoverflow.com/questions/32103968/non-temporal-loads-and-the-hardware-prefetcher-do-they-work- साथ में)। टीएल: डीआर: उम्मीद है कि सीपीयू कैश प्रदूषण को कम करने के लिए एनटी संकेत के साथ कुछ उपयोगी करता है, लेकिन वे "सामान्य" डब्ल्यूबी मेमोरी के दृढ़ता से आदेशित अर्थशास्त्र को ओवरराइड नहीं करते हैं, इसलिए उन्हें कैश का उपयोग करना पड़ता है। –

+1

अपडेट: एनटी * लोड * अधिकांश सीपीयू (जैसे इंटेल एसएनबी परिवार) पर यूसीएसडब्लू मेमोरी क्षेत्रों को छोड़कर कुछ भी उपयोगी नहीं कर सकता है। एनटी/स्ट्रीमिंग * स्टोर * निश्चित रूप से सामान्य स्मृति पर काम करते हैं, हालांकि। –

+0

@ पीटर: आपका मतलब यूएसडब्ल्यूसी मेमोरी सही है?मैंने पहले कभी यूसीएसडब्ल्यू या यूएसडब्ल्यूसी मेमोरी के बारे में नहीं सुना है। गलत परिवर्णी शब्द गुगल करना सहायक नहीं था :-) –

उत्तर

106

गैर-टेम्पोरल एसएसई निर्देश (MOVNTI, MOVNTQ, आदि), सामान्य कैश-कोहेरेंसी नियमों का पालन न करें। इसलिए समय-समय पर अन्य प्रोसेसर द्वारा उनके परिणामों को देखने के लिए गैर-अस्थायी स्टोरों को एक एसएफएनसीईई निर्देश द्वारा पालन किया जाना चाहिए।

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

इस और इसी तरह की स्थितियों के लिए, प्रोसेसर गैर-अस्थायी लेखन कार्यों के लिए समर्थन प्रदान करते हैं। इस संदर्भ में गैर-अस्थायी का अर्थ है कि डेटा जल्द ही उपयोग नहीं किया जाएगा, इसलिए इसे कैश करने का कोई कारण नहीं है। ये गैर-अस्थायी लेखन संचालन कैश लाइन नहीं पढ़ते हैं और फिर इसे संशोधित करते हैं; इसके बजाय, नई सामग्री सीधे स्मृति में लिखी जाती है।

स्रोत: http://lwn.net/Articles/255364/

+10

अच्छा जवाब, मैं यह इंगित करना चाहता हूं कि एनटी निर्देशों के साथ प्रोसेसर के प्रकार पर, एक गैर-अस्थायी निर्देश (यानी एक सामान्य निर्देश) के साथ भी, रेखा कैश "पढ़ा और फिर संशोधित नहीं किया गया" है। एक सामान्य निर्देश लिखने के लिए जो कि कैश में नहीं है, कैश में एक पंक्ति आरक्षित है और एक मुखौटा इंगित करता है कि रेखा के कौन से हिस्से अद्यतित हैं। यह वेबपृष्ठ इसे "स्टोर पर कोई स्टॉल नहीं" कहता है: http://www.ptlsim.org/Documentation/html/node30.html। मुझे और सटीक संदर्भ नहीं मिल सका, मैंने केवल उन लोगों से सुना है जिनके काम प्रोसेसर सिमुलेटर को कार्यान्वित करना है। –

+2

असल में http://www.ptlsim.org/ एक चक्र-सटीक प्रोसेसर सिम्युलेटर के बारे में एक वेबसाइट है, वैसे ही वही चीज़ जो लोग मुझे "दुकान पर कोई स्टॉल" नहीं बताते हैं। यदि वे कभी भी इस टिप्पणी को देखते हैं तो मैं उन्हें भी बेहतर उल्लेख करता हूं: http://unisim.org/ –

+0

यहां जवाब और टिप्पणियों से https://stackoverflow.com/questions/44864033/make-previous-memory-stores- ऐसा लगता है कि बाद में-मेमोरी-लोड लगता है कि 'SFENCE' की आवश्यकता नहीं हो सकती है। कम से कम एक ही धागे में। क्या आप भी देख सकते हैं? –

29

Espo लक्ष्य पर काफी धमाकेदार है। बस मेरे दो सेंट जोड़ना चाहता था:

"गैर अस्थायी" वाक्यांश का मतलब अस्थायी इलाके की कमी है। कैश दो प्रकार के इलाके का उपयोग करते हैं - स्थानिक और लौकिक, और एक गैर-अस्थायी निर्देश का उपयोग करके आप प्रोसेसर को संकेत दे रहे हैं कि आप उम्मीद नहीं करते कि निकट भविष्य में डेटा आइटम का उपयोग किया जाए।

मैं हाथ-कोडित असेंबली के बारे में थोड़ा संदिग्ध हूं जो कैश नियंत्रण निर्देशों का उपयोग करता है। मेरे अनुभव में इन चीजों को किसी भी प्रभावी प्रदर्शन वृद्धि से अधिक बुराई कीड़े का कारण बनता है।

+0

"हाथ-कोडित असेंबली जो कैश नियंत्रण निर्देशों का उपयोग करता है" के बारे में प्रश्न। मुझे पता है कि आपने स्पष्ट रूप से "हाथ से कोडित" कहा है जो जावावीएम की तरह कुछ है। क्या यह एक बेहतर उपयोग मामला है? जावावीएम/कंपाइलर ने प्रोग्राम के स्थिर और गतिशील व्यवहार का विश्लेषण किया है और इन गैर-अस्थायी निर्देशों का उपयोग करता है। – Pat

+1

आपकी समस्या डोमेन, एल्गोरिदम या एप्लिकेशन के ज्ञात इलाके गुण (या इसकी कमी) का पता लगाना नहीं छोड़ा जाना चाहिए। कैश प्रदूषण से बचने वास्तव में एक बहुत ही आकर्षक और प्रभावी अनुकूलन कार्य है। इसके अलावा, असेंबली की ओर उलझन क्यों? लाभ के लिए अवसरों की विशाल मात्रा उपलब्ध है जो एक कंपाइलर संभवतः –

+3

पर कैपिटल नहीं कर सकता है यह निश्चित रूप से सच है कि एक ज्ञानी निम्न-स्तरीय प्रोग्रामर छोटे कर्नेल के लिए एक कंपाइलर को बेहतर प्रदर्शन कर सकता है। यह कागजात और ब्लॉगपोस्ट प्रकाशित करने के लिए बहुत अच्छा है और मैंने दोनों किया है। वे भी अच्छे व्यावहारिक उपकरण हैं, और यह समझने में मदद करते हैं कि "वास्तव में" क्या चल रहा है। हालांकि, मेरे अनुभव में, व्यावहारिक रूप से, जहां आपके पास काम कर रहे कई प्रोग्रामर के साथ एक वास्तविक प्रणाली है और शुद्धता और रखरखाव महत्वपूर्ण है, निम्न स्तर के कोडिंग का लाभ लगभग हमेशा जोखिम से अधिक होता है। – Pramod