X86 में "नॉन टेम्पोरल" मेमोरी एक्सेस का अर्थ क्या है


123

यह कुछ निम्न स्तर का प्रश्न है। X86 विधानसभा में दो SSE निर्देश हैं:

MOVDQA xmmi, m128

तथा

MOVNTDQA xmmi, m128

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

मेरा सवाल है कि नॉन-टेम्पोरल का क्या मतलब है?


6
ध्यान दें कि SSE4.1 MOVNTDQA xmmi, m128एक NT लोड है, जबकि अन्य सभी NT निर्देश स्टोर हैं, को छोड़कर prefetchnta। यहाँ स्वीकृत उत्तर केवल दुकानों के बारे में बात करता प्रतीत होता है। यह वही है जो मैं NT भार के बारे में बारी करने में सक्षम हूं । TL: DR: उम्मीद है कि CPU कैश के प्रदूषण को कम करने के लिए NT संकेत के साथ कुछ उपयोगी काम करता है, लेकिन वे "सामान्य" WB मेमोरी के दृढ़ता से क्रमबद्ध शब्दार्थ को ओवरराइड नहीं करते हैं, इसलिए उन्हें कैश का उपयोग करना होगा।
पीटर कॉर्डेस

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

4
@ पेटर: आप USWC मेमोरी को सही मानते हैं? मैंने पहले कभी यूसीएसडब्ल्यू या यूएसडब्ल्यूसी मेमोरी के बारे में नहीं सुना है। गलत परिचय को देखने से मदद नहीं मिली :-)
एंड्रयू बैनब्रिज

4
@AndrewBainbridge: हाँ, WC मेमोरी प्रकार विशेषता। अनुपलब्ध सट्टा लिखने-संयोजन। मुझे लगता है कि मैं UnCacheable को कैपिटल कर रहा था और यह याद कर रहा था कि यह 4 अक्षर लंबा होना चाहिए था। : पी
पीटर कॉर्ड्स

जवाबों:


147

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

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

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

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


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

2
वास्तव में ptlsim.org एक चक्र-सटीक प्रोसेसर सिम्युलेटर के बारे में एक वेब साइट है, बिल्कुल उसी तरह की चीजें जो मुझे "स्टोर पर कोई स्टाल" के बारे में बताने वाले लोग कर रहे हैं। मैं बेहतर उन्हें भी मामले में उल्लेख था वे कभी भी इस टिप्पणी को देख: unisim.org
पास्कल Cuoq

1
जवाब और टिप्पणियों से यहां stackoverflow.com/questions/44864033/… लगता है SFENCEकि इसकी आवश्यकता नहीं हो सकती है। कम से कम एक ही सूत्र में। क्या आप भी देख सकते हैं?
सर्ज रोजै

1
@SergeRogatch यह इस बात पर निर्भर करता है कि आप किस परिदृश्य के बारे में बात कर रहे हैं, लेकिन हाँ ऐसे परिदृश्य हैं जहाँ sfenceNT स्टोर की आवश्यकता होती है, जबकि यह केवल सामान्य स्टोर के लिए आवश्यक नहीं है। NT स्टोर अन्य स्टोर्स (NT या नहीं) के संबंध में आदेश नहीं दिए गए हैं, जैसा कि अन्य थ्रेड्स द्वारा देखा गया है , बिना sfence। एक ही धागे से पढ़ता है कि दुकानों में किया गया था, हालांकि, आपको कभी भी ज़रूरत नहीं है sfence: किसी दिए गए धागे को हमेशा प्रोग्राम क्रम में अपने स्वयं के स्टोर दिखाई देंगे, भले ही वे NT स्टोर हों या नहीं।
BeeOnRope

40

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

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

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


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

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

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

4
@ प्रमोद कि एक ही तर्क आसानी से सामान्य रूप से अनुकूलन करने के लिए सामान्यीकरण करता है और वास्तव में चर्चा के दायरे में नहीं है - स्पष्ट रूप से कि व्यापार-बंद पर पहले से ही विचार किया गया है या अन्यथा अप्रासंगिक माना जाता है इस तथ्य को देखते हुए कि हम पहले से ही गैर-अस्थायी निर्देशों के बारे में बात कर रहे हैं
awdz9nld

7

Intel® 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर मैनुअल, वॉल्यूम 1: बेसिक आर्किटेक्चर के अनुसार, "इंटेल स्ट्रीमिंग सिमड एक्सटेंशन्स (इंटेल एसएसई)" अध्याय के साथ प्रोग्रामिंग:

टेम्पोरल बनाम नॉन-टेम्पोरल डेटा की कैशिंग

किसी प्रोग्राम द्वारा संदर्भित डेटा टेम्पोरल हो सकता है (डेटा फिर से उपयोग किया जाएगा) या गैर-अस्थायी (डेटा को एक बार संदर्भित किया जाएगा और तत्काल भविष्य में पुन: उपयोग नहीं किया जाएगा)। उदाहरण के लिए, प्रोग्राम कोड आम तौर पर अस्थायी है, जबकि, मल्टीमीडिया डेटा, जैसे कि 3-डी ग्राफिक्स एप्लिकेशन में प्रदर्शन सूची, अक्सर गैर-अस्थायी होती है। प्रोसेसर के कैश का कुशल उपयोग करने के लिए, यह आमतौर पर अस्थायी डेटा को कैश करने और गैर-अस्थायी डेटा को कैश करने के लिए वांछनीय है। गैर-अस्थायी डेटा के साथ प्रोसेसर के कैश को ओवरलोड करना कभी-कभी "कैश को प्रदूषित करना" कहा जाता है। SSE और SSE2 कैचेबिलिटी कंट्रोल निर्देश प्रोग्राम को स्मृति में गैर-अस्थायी डेटा लिखने के लिए सक्षम बनाता है जो कैश के प्रदूषण को कम करता है।

गैर-अस्थायी लोड और स्टोर निर्देशों का विवरण। स्रोत: इंटेल 64 और आईए -32 आर्किटेक्चर सॉफ्टवेयर डेवलपर मैनुअल, वॉल्यूम 2: निर्देश सेट संदर्भ

लोड (MOVNTDQA- लोड डबल क्वाडवर्ड गैर-टेम्पोरल संरेखित संकेत)

स्रोत ऑपरेंड (दूसरा ऑपरेंड) से गंतव्य ऑपरेंड (पहले ऑपरेंड) तक एक डबल क्वाडर्ड एक गैर-अस्थायी संकेत का उपयोग करके यदि मेमोरी स्रोत WC है (संयोजन लिखें) मेमोरी प्रकार [...]

[...] प्रोसेसर कैश पदानुक्रम में डेटा नहीं पढ़ता है, न ही यह मेमोरी से इसी कैश लाइन को कैश पदानुक्रम में लाता है।

ध्यान दें कि, पीटर कॉर्डेस की टिप्पणी के अनुसार, यह वर्तमान प्रोसेसर पर सामान्य WB (राइट-बैक) मेमोरी पर उपयोगी नहीं है क्योंकि NT संकेत को अनदेखा किया गया है (शायद इसलिए कि कोई NT- अवगत HW प्रीफ़ेचर नहीं हैं) और पूरी तरह से लोड किए गए लोड सेमेस्टर पर लागू होते हैं । prefetchntaWB मेमोरी से प्रदूषण को कम करने वाले लोड के रूप में इस्तेमाल किया जा सकता है

स्टोर (MOVNTDQ- गैर-टेम्पोरल संकेत का उपयोग करके स्टोर पैक किए गए पूर्णांक)

मेमोरी के लिए लेखन के दौरान डेटा के कैशिंग को रोकने के लिए स्रोत ऑपरेंड (दूसरे ऑपरेंड) में पैक किए गए पूर्णांकों को गंतव्य ऑपरेटर (पहले ऑपरेंड) में ले जाता है, जो गैर-अस्थायी संकेत का उपयोग करता है।

[...] प्रोसेसर कैश पदानुक्रम में डेटा नहीं लिखता है, न ही यह मेमोरी से इसी कैश लाइन को कैश पदानुक्रम में लाता है।

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

अंत में, गैर-अस्थायी दुकानों के बारे में जॉन मैकलिन नोटों की समीक्षा करना दिलचस्प हो सकता है ।


3
SSE4.1 MOVNTDQAकेवल WC (अनचाहे लिखने-संयोजन) मेमोरी क्षेत्रों, जैसे वीडियो रैम पर कुछ विशेष करता है। यह वर्तमान एचडब्ल्यू पर सामान्य डब्ल्यूबी (राइट-बैक) मेमोरी पर सभी उपयोगी नहीं है, एनटी संकेत को अनदेखा किया गया है और पूरी तरह से लोड किए गए लोड शब्दार्थों पर जोर दिया गया है। prefetchnta, हालांकि, एक प्रदूषण के रूप में WB मेमोरी से लोड को कम करने में उपयोगी हो सकता है । क्या वर्तमान x86 आर्किटेक्चर गैर-अस्थायी लोड ("सामान्य" मेमोरी से) का समर्थन करते हैं?
पीटर कॉर्ड्स

2
यह सही है, NT स्टोर WB मेमोरी पर ठीक काम करते हैं, और कमजोर रूप से ऑर्डर किए जाते हैं, और आमतौर पर मेमोरी के बड़े क्षेत्रों को लिखने के लिए एक अच्छा विकल्प है । लेकिन NT भार नहीं हैं। कागज पर x86 मैनुअल NT संकेत WB मेमोरी से लोड के लिए कुछ करने के लिए अनुमति देता है, लेकिन वर्तमान CPU में यह कुछ भी नहीं करता है । (शायद इसलिए कि एनटी-अवेटेड एचडब्ल्यू प्रीफैचर्स नहीं हैं।)
पीटर कॉर्ड्स

मैंने उस प्रासंगिक जानकारी को उत्तर में जोड़ दिया है। आपका बहुत बहुत धन्यवाद।
चुस

1
@LewisKelsey: NT स्टोर मेमोरी प्रकार को ओवरराइड करते हैं। इसलिए उन्हें WB मेमोरी पर कमजोर रूप से ऑर्डर किया जा सकता है। प्रमुख प्रभाव आरएफओ से परहेज है (जाहिरा तौर पर वे एक अमान्य भेजते हैं जो मेम तक पहुंचने पर अन्य गंदी लाइनों को भी साफ करता है)। वे आउट-ऑफ-ऑर्डर भी दिखाई दे सकते हैं, इसलिए उन्हें पहले कैश-मिस (नियमित) स्टोर के शुरू होने तक, या जब तक कि पहले से कैश-मिस लोड नहीं मिलता है, तब तक इंतजार नहीं करना पड़ता है । यानी किस तरह की अड़चन के बारे में पूछा गया है कि क्या प्रत्येक कोर के बाहर मेमोरी हमेशा एक मल्टीप्रोसेसर सिस्टम में वैचारिक रूप से फ्लैट / वर्दी / समान है?
पीटर कॉर्डेस

1
@LewisKelsey: एक मेमोरी ऑर्डर करने वाली मशीन स्पष्ट यूसी स्टोर के बाद किसी भी लोड को मार सकती है जो कि आवश्यक नहीं होने पर जल्दी किया जाना चाहिए। इसके अलावा, कमिटमेंट ऑर्डर तब तक खेल में नहीं आता, जब तक कि स्टोर आउट-ऑफ-ऑर्डर बैक एंड से रिटायर नहीं हो जाता। यह तब तक नहीं हो सकता जब तक स्टोर-एड्रेस यूओपी निष्पादित नहीं हो जाता है, जिस बिंदु पर पते के लिए मेमोरी प्रकार की जांच की जा सकती है। एक स्टोर-एड्रेस यूओपी टीएलबी की जांच करता है जब वह निष्पादित होता है; सीपीयू रिटायर होने से पहले फॉल्टिंग स्टोर का पता लगा सकता है। यह तब तक इंतजार नहीं कर सकता जब तक एसबी प्रविष्टि एल 1 डी के लिए तैयार नहीं होती; उस बिंदु पर निष्पादन पिछले है।
पीटर कॉर्डेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.