इटेनियम प्रोसेसर के लिए कंपाइलर लिखना मुश्किल क्यों था?


50

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

लेकिन संकलक सामान इतनी कठिन तकनीकी समस्या क्यों थी? यह मुझे लगता है कि अगर ईपीआईसी में स्पष्ट समानता कंपाइलर विक्रेताओं को लागू करने के लिए मुश्किल थी ... तो उन पर पहला बोझ क्यों डाला? यह इस समस्या का एक अच्छा, समझा-समझा समाधान नहीं है, पहले से मौजूद नहीं था: इसके बजाय इंटेल पर बोझ डालें और संकलक-लेखकों को एक सरल लक्ष्य दें।

1997 में इटेनियम बाहर आया। इस बिंदु तक, यूसीएसडी पी-कोड बाईटेकोड सिस्टम लगभग 20 साल पुराना था, जेड-मशीन बस थोड़ा छोटा था, और जेवीएम प्रोग्रामिंग भाषाओं की दुनिया में गर्म नए उभरते हुए स्टार थे। क्या कोई कारण है कि इंटेल ने "सरल इटेनियम बायोटेक" भाषा को निर्दिष्ट नहीं किया है, और एक उपकरण प्रदान करता है जो इस बायोटेक को अनुकूलित ईपीआईसी कोड में परिवर्तित करता है, जो पहले स्थान पर सिस्टम को डिजाइन करने वाले लोगों के रूप में अपनी विशेषज्ञता का लाभ उठाता है?


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

4
यह मानते हुए कि "वे क्या सोच रहे थे," यह केवल एक अच्छा सवाल नहीं है।
रॉबर्ट हार्वे

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

@ सुपरकैट: मैं एक काल्पनिक वीएम के बारे में बात नहीं कर रहा हूं, लेकिन एक काल्पनिक आईआर के बारे में जो एक इंटेल कोड जनरेटर द्वारा बाकी के तरीके को संकलित किया जाएगा।
मेसन व्हीलर

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

जवाबों:


33

जैसा कि मैं उस समय को याद करता हूं, मुद्दा सिर्फ IA64 का विवरण नहीं था, यह एएमडी के x86-986 निर्देश सेट के साथ प्रतियोगिता थी। अपने आर्किटेक्चर को x86 इंस्ट्रक्शन सेट के साथ पीछे की ओर करके, AMD मौजूदा टूल्स और डेवलपर स्किल सेट का लाभ उठाने में सक्षम था। एएमडी की चाल इतनी सफल रही कि इंटेल (और वाया) को अनिवार्य रूप से x86-64 आर्किटेक्चर अपनाने के लिए मजबूर किया गया।

डेस्कटॉप पीसी पर उस समय बड़ा अवरोध 4 जीबी रैम था (विंडोज पर अधिक वास्तविक ~ 3.4 जीबी प्रयोग करने योग्य)। x86-64 ने उस अवरोध को तोड़ दिया और सभी के लिए उच्च शक्ति कंप्यूटिंग खोल दिया। अगर एएमडी x86-64 के साथ कभी नहीं आता है, तो मुझे यकीन है कि इंटेल हर उस व्यक्ति के लिए खुश होगा जो 4 जीबी + रैम पर कूदना चाहता था जो उस विशेषाधिकार के लिए वर्षों तक भारी प्रीमियम का भुगतान करता है। यह दर्शाता है कि बाजार धीरे-धीरे कैसे आगे बढ़ता है, अनुप्रयोगों को 64-बिट, मल्टी-थ्रेडेड प्रोग्रामिंग को पकड़ने में वर्षों का समय लगा है, और अब भी 4-जीबी रैम कम-एंड पीसी पर मानक है।

संक्षेप में, इंटेल ने IA64 वास्तुकला के साथ एक क्रांतिकारी छलांग लगाने की कोशिश की, और एएमडी ने x86-64 के साथ एक विकासवादी कदम उठाया। एक स्थापित बाजार में, विकासवादी कदम जो ज्ञान श्रमिकों को मौजूदा कौशल का लाभ उठाने की अनुमति देते हैं, क्रांतिकारी कदमों पर जीत हासिल करेंगे, जिनके लिए सभी को नए कौशल सीखने की आवश्यकता होती है। आर्किटेक्चर के बीच गुणात्मक अंतर के बावजूद, IA64 ने x86-64 एक्सटेंशन को जोड़ने के बाद अपने स्वयं के x86 प्लेटफॉर्म की गति को पार नहीं किया।

मैं इस स्पष्टीकरण को नहीं खरीदता कि IA64 को प्रोग्राम करना बहुत मुश्किल था। यह केवल विकल्पों के सापेक्ष कठिन था। @ निम्न-स्तरीय IR के बारे में डेलन का कहना है कि मैं इस पर फर्क नहीं करता।

जैसे कि इंटेल ने उस बोझ को स्वयं उठाने की कोशिश क्यों नहीं की, कौन जानता है? वे उस समय बाजार की ताकत थे। एएमडी कुछ खतरा था लेकिन इंटेल पहाड़ी का राजा था। शायद उन्होंने सोचा कि IA64 किसी भी चीज़ से इतना बेहतर होगा कि वे पूरे बाजार को स्थानांतरित कर सकते हैं। हो सकता है कि वे प्रीमियम टियर बनाने की कोशिश कर रहे थे और AMD, VIA इत्यादि को छोड़ कर दूसरे टियर में कम-मार्जिन कमोडिटी हार्डवेयर पर लड़ रहे थे - एक रणनीति जिसे इंटेल और एप्पल दोनों ने काफी सफलतापूर्वक नियोजित किया है।

क्या इटेनियम एक प्रीमियम मंच बनाने और एएमडी, वीआईए, आदि के तहत गलीचा बाहर खींचने का एक जानबूझकर प्रयास था? बेशक, यह है कि व्यवसाय कैसे काम करता है।


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

2
शानदार अंक। एक पूर्व संकलक लेखक के रूप में, यह सच है कि एक मौजूदा संकलक को वापस लेने में सक्षम है और प्रदर्शन के लिए इसे फिर से लिखना एक बार फिर से लिखने से बेहतर है। वापस तब (और शायद अब ... निश्चित नहीं) कंपाइलर बैक-एंड लिखना कुछ ऐसा था जो एक साल में 4 या 5 देवों की टीम कर सकती थी। यह एक कठिन अखरोट है जब हार्डवेयर ने किसी को नहीं अपनाया है। हमने यूनिक्स बक्से के स्वादों का समर्थन करने के लिए पावरपीसी बैक एंड बनाने के बजाय उस समय चुना था।
क्रिस स्टील

@delnan, अच्छी बात है, मैंने अन्य प्रश्नों को हल करने के लिए टिप्पणी जोड़ी है।
रॉबर्ट मुन्न

2
अधिक संक्षेप में, इंटेल ने पिछड़ी संगतता के जुए को पहनने से जड़ता को कम करके आंका। AMD ने x86 परिवार से वही विकासवादी कदम उठाकर इंटेल को उसके ही खेल में हरा दिया, जो x86 परिवार ने 8086/888 परिवार से लिया था।
ब्लरफ्ल

1
ईआरएम। 80x86 ने लगभग 1995 में PAE और PSE36 की शुरूआत के बाद से 36-बिट फिजिकल एड्रेसिंग (या "काफी 64 GB RAM की सीमा नहीं") का समर्थन किया है। समस्या डिवाइस ड्राइवर की अक्षमताओं के कारण Windows समर्थित PAE के बहुत कम संस्करणों की थी (लेकिन कुछ किया)।
ब्रेंडन

33

महाकाव्य पर विकिपीडिया लेख पहले से ही VLIW और महाकाव्य के लिए आम कई खतरों को रेखांकित किया गया है।

यदि किसी को उस लेख से भाग्यवाद का भाव नहीं आता है, तो मुझे इस पर प्रकाश डालिए:

मेमोरी पदानुक्रम से लोड प्रतिक्रियाएं जिसमें CPU कैश और DRAM शामिल हैं, एक नियतकालिक देरी नहीं है।

दूसरे शब्दों में, कोई भी हार्डवेयर डिज़ाइन जो मेमोरी एक्सेस से गैर-नियतात्मक विलंबता के साथ (*) सामना करने में विफल रहता है, बस एक शानदार विफलता बन जाएगी।

(*) "सामना" के द्वारा, उचित निष्पादन निष्पादन (दूसरे शब्दों में, "लागत-प्रतिस्पर्धी") को प्राप्त करना आवश्यक है, जो आवश्यक है कि सीपीयू को दसियों से सैकड़ों चक्र तक कभी भी बेकार न होने दें।

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

इस प्रश्न को फिर से परिभाषित किया जा सकता है: "एक हार्डवेयर प्लेटफ़ॉर्म को देखते हुए, जो एक विफलता के रूप में पाया जाता है, क्यों (1) नहीं किया (2) संकलक लेखकों को इसे भुनाने के लिए एक वीरतापूर्ण प्रयास नहीं कर सकता है?"

मुझे आशा है कि मेरा रीफ़्रेशिंग उस प्रश्न का उत्तर स्पष्ट कर देगा।


असफलता का एक दूसरा पहलू है जो घातक भी है।

मैथुन की रणनीतियों (उसी लेख में उल्लिखित) मानती हैं कि सॉफ़्टवेयर-आधारित प्रीफ़ैचिंग का उपयोग मेमोरी एक्सेस से गैर-नियतात्मक विलंबता के कारण प्रदर्शन हानि के कम से कम भाग को पुनर्प्राप्त करने के लिए किया जा सकता है।

वास्तव में, प्रीफ़ेटिंग केवल तभी लाभदायक है जब आप स्ट्रीमिंग ऑपरेशन (क्रमिक, या अत्यधिक अनुमानित तरीके से मेमोरी पढ़ना) कर रहे हों।

(उस ने कहा, यदि आपका कोड कुछ स्थानीय मेमोरी क्षेत्रों में लगातार पहुंच बनाता है, तो कैशिंग मदद करेगा।)

हालाँकि, अधिकांश सामान्य-प्रयोजन सॉफ़्टवेयर को बहुत सारे रैंडम मेमोरी एक्सेस का उपयोग करना चाहिए। यदि हम निम्नलिखित चरणों पर विचार करते हैं:

  • पते की गणना करें, और फिर
  • मान पढ़ें, और फिर
  • कुछ गणनाओं में इसका उपयोग करें

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

यह समझाने में मदद करने के लिए कि स्टालों को भरने के लिए हमेशा पर्याप्त काम ढूंढना क्यों संभव नहीं है, यहां बताया गया है कि कोई कैसे कल्पना कर सकता है।

  • मान लीजिए, स्टालों को प्रभावी ढंग से छिपाने के लिए, हमें 100 निर्देशों को भरने की आवश्यकता है जो स्मृति पर निर्भर नहीं करते हैं (इसलिए अतिरिक्त विलंब से ग्रस्त नहीं होंगे)।
  • अब, एक प्रोग्रामर के रूप में, कृपया अपनी पसंद के किसी भी सॉफ़्टवेयर को एक डिस्सेम्बलर में लोड करें। विश्लेषण के लिए एक यादृच्छिक फ़ंक्शन चुनें।
  • क्या आप कहीं भी 100 निर्देशों (*) के अनुक्रम की पहचान कर सकते हैं जो विशेष रूप से मेमोरी एक्सेस से मुक्त हैं?

(*) यदि हम कभी NOPभी उपयोगी कार्य कर सके ...


आधुनिक सीपीयू गतिशील जानकारी का उपयोग करके उसी के साथ सामना करने की कोशिश करते हैं - प्रत्येक निर्देश की प्रगति को समवर्ती रूप से ट्रैक करते हुए, क्योंकि वे पाइपलाइनों के माध्यम से प्रसारित होते हैं। जैसा कि मैंने ऊपर उल्लेख किया है, उस गतिशील जानकारी का हिस्सा गैर-नियतात्मक मेमोरी विलंबता के कारण है, इसलिए इसे संकलक द्वारा सटीकता की किसी भी डिग्री के लिए भविष्यवाणी नहीं की जा सकती है। सामान्य तौर पर, निर्णय लेने के लिए संकलन-समय पर पर्याप्त जानकारी उपलब्ध नहीं होती है जो संभवतः उन स्टालों को भर सकती है।


AProgrammer द्वारा जवाब के जवाब में

ऐसा नहीं है कि "संकलक ... समानता को निकालना कठिन है"।

आधुनिक संकलक द्वारा स्मृति और अंकगणितीय निर्देशों का पुन: निर्धारण इस बात का प्रमाण है कि इसमें उन परिचालनों की पहचान करने में कोई समस्या नहीं है जो स्वतंत्र रूप से और इसलिए समवर्ती निष्पादन योग्य हैं।

मुख्य समस्या यह है कि गैर-नियतात्मक मेमोरी लेटेंसी का मतलब है कि जो भी "इंस्ट्रक्शन पेयरिंग" है वह वीएलआईडब्ल्यू / ईपीआईसी प्रोसेसर के लिए एन्कोड किया गया है जो मेमोरी एक्सेस द्वारा रुका हुआ होगा।

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

यह अनुकूलन के 80-20 नियम को लागू करने में विफलता का एक उदाहरण है: पहले से ही तेज होने वाली चीजों का अनुकूलन, समग्र प्रदर्शन में सार्थक रूप से सुधार नहीं करेगा, जब तक कि धीमी चीजों को भी अनुकूलित नहीं किया जा रहा है।


बेसिल स्टायरनेविच द्वारा जवाब देने के लिए

यह "... (जो भी) कठिन है)" नहीं है, यह है कि ईपीआईसी किसी भी मंच के लिए अनुपयुक्त है जिसे विलंबता में उच्च गतिशीलता के साथ सामना करना पड़ता है।

उदाहरण के लिए, यदि प्रोसेसर में निम्नलिखित में से सभी हैं:

  • कोई प्रत्यक्ष मेमोरी एक्सेस नहीं;
    • किसी भी मेमोरी एक्सेस (रीड या राइट) को डीएमए ट्रांसफर द्वारा निर्धारित किया जाना है;
  • प्रत्येक निर्देश में एक ही निष्पादन विलंबता होती है;
  • आदेश में निष्पादन;
  • वाइड / वेक्टरकृत निष्पादन इकाइयाँ;

तब VLIW / EPIC एक अच्छा फिट होगा।

ऐसे प्रोसेसर कहाँ से मिलते हैं? डीएसपी। और यहीं पर VLIW का उत्कर्ष हुआ है।


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

दी गई, विक्रेता के अन्य उद्यम, जैसे कि हाइपरथ्रेडिंग, SIMD, आदि, अत्यधिक सफल प्रतीत होते हैं। यह संभव है कि इटेनियम में निवेश का इसके इंजीनियरों के कौशल पर समृद्ध प्रभाव पड़ा हो, जिसने उन्हें अगली पीढ़ी की सफल तकनीक बनाने में सक्षम बनाया हो।


7

TL; DR: 1 / संकलक मुद्दों की तुलना में Itanium की विफलता में अन्य पहलू हैं और वे इसे समझाने के लिए पर्याप्त रूप से पर्याप्त हो सकते हैं; 2 / एक बाइट कोड संकलक मुद्दों को हल नहीं होता।

यह आमतौर पर कहा जाता है कि इंटेल का इटेनियम 64-बिट प्रोसेसर आर्किटेक्चर विफल रहा क्योंकि क्रांतिकारी ईपीआईसी निर्देश सेट के लिए एक अच्छा संकलक लिखना बहुत मुश्किल था

खैर, उन्हें भी देर हो गई (98 के लिए योजना बनाई गई, 2001 में पहली शिपमेंट) और जब उन्होंने अंततः हार्डवेयर दिया, तो मुझे भी यकीन नहीं है कि यह पहले की तारीख (IIRC) के लिए वादा किया गया था, उन्होंने कम से कम गिरा दिया हिस्सा x86 एमुलेशन जो शुरू में योजनाबद्ध था), इसलिए मुझे यकीन नहीं है कि अगर संकलन समस्याओं को हल किया गया है (और AFAIK, यह अभी तक नहीं है), तो वे सफल हो गए होंगे। संकलक पहलू एकमात्र पहलू नहीं था जो अत्यधिक महत्वाकांक्षी था।

क्या कोई कारण है कि इंटेल ने एक "सरल इटेनियम बायोटेक" भाषा को निर्दिष्ट नहीं किया है, और एक उपकरण प्रदान करता है जो इस बायोटेक को अनुकूलित ईपीआईसी कोड में परिवर्तित करता है, जो पहले स्थान पर सिस्टम को डिजाइन करने वाले लोगों के रूप में अपनी विशेषज्ञता का लाभ उठाता है?

मुझे यकीन नहीं है कि आप उपकरण कहां रखते हैं।

यदि यह प्रोसेसर में है, तो आपके पास बस एक और माइक्रो-आर्किटेक्चर है और सार्वजनिक रूप से ISA के रूप में x86 का उपयोग नहीं करने का कोई कारण नहीं है (कम से कम इंटेल के लिए, असंगति की लागत एक क्लीनर सार्वजनिक आईएसए ला सकती है) की तुलना में अधिक लागत है।

यदि यह बाहरी रूप से है, तो एक बाइट-कोड से शुरू करना उच्च स्तर की भाषा से शुरू करने से भी कठिन है। ईपीआईसी के साथ मुद्दा यह है कि यह केवल समानांतरवाद का उपयोग कर सकता है जो एक संकलक पा सकता है, और उस समानता को निकालना कठिन है। भाषा के नियमों को जानने से आपको अधिक संभावनाएं मिलती हैं जैसे कि आप पहले से निर्धारित किसी चीज से विवश हैं। मेरा (अविश्वसनीय और किसी ऐसे व्यक्ति से जिसने बाद में दूर से) याद किया कि जो HP (*) और इंटेल कंपाइलर के मोर्चे पर हासिल करने में विफल रहा, वह समानता का भाषा स्तर निष्कर्षण है, न कि निम्न स्तर जो एक बाइट में मौजूद होता। कोड।

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


(*) आप EPIC में HP की भूमिका को कम आंकते हैं।


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

1
@rwong, मैंने अपने मुख्य बिंदुओं पर विचार करने के लिए एक TLDR बनाया। BTW, मेरे लिए चर विलंबता - मॉडल के बीच, कुछ मॉडल में कुछ निर्देशों के लिए निर्भर डेटा, मेमोरी एक्सेस स्पष्ट रूप से यहां एक प्रमुख श्रेणी है - समानांतरवाद निष्कर्षण की कठिनाई का एक पहलू है। सीपीयू हार्डवेयर में डायनामिक शेड्यूलिंग का लाभ है, और मुझे नहीं लगता कि सांख्यिकीय रूप से अनुसूचित प्रोसेसर का एक उदाहरण है जो OOO के साथ एकल थ्रेड के लिए शुद्ध प्रदर्शन पर प्रतिस्पर्धी है। मुझे नहीं लगता कि मिल की टीम भी यह दावा करती है (उनकी योग्यता कारक में शक्ति शामिल है)।
एपीग्रामग्राम

6

कुछ बातें।

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

उस समय अन्य मशीनें - जैसे- अल्ट्राएसपीएआरसी - इन-ऑर्डर थीं, लेकिन आईपीएफ में अन्य विचार भी थे। एक था अंतरिक्ष को कूटना। इटेनियम निर्देश, स्वभाव से, विशेष रूप से घने नहीं थे - एक 128-बिट बंडल में तीन ऑपरेशन और 5-बिट टेम्पलेट फ़ील्ड होते थे, जो बंडल में संचालन का वर्णन करते थे, और क्या वे सभी एक साथ जारी कर सकते थे। यह एक प्रभावी 42.6 बिट ऑपरेशन आकार के लिए बना है - उस समय के अधिकांश वाणिज्यिक आरआईएससी के संचालन के लिए 32 बिट्स की तुलना करें। (यह Thumb2 से पहले था, एट अल - RISC का मतलब अभी भी निश्चित लंबाई की कठोरता है।) इससे भी बदतर, आपके पास आपके द्वारा उपयोग किए जाने वाले टेम्पलेट को फिट करने के लिए हमेशा पर्याप्त ILP नहीं था - इसलिए आपको भरने के लिए NOP-pad करना होगा। टेम्पलेट या बंडल। यह, मौजूदा रिश्तेदार कम घनत्व के साथ संयुक्त, का मतलब है कि एक सभ्य i-cache हिट दर प्राप्त करना क) वास्तव में महत्वपूर्ण था,

जबकि मुझे हमेशा लगता है कि "कंपाइलर वन एंड ओनली प्रॉब्लम थी" का तर्क ओवरब्लॉउन था - वहाँ वैध माइक्रोऑर्किटेक्टुरल मुद्दे थे जो वास्तव में I2 सामान्य प्रयोजन कोड के लिए कोई एहसान नहीं करते थे - यह कोड की तुलना में कोड उत्पन्न करने के लिए विशेष रूप से मजेदार नहीं था दिन की संकरी, ऊंची-ऊंची OoO मशीनों से। जब आप वास्तव में इसे ठीक से भर सकते हैं, जिसमें अक्सर पीजीओ या हाथ से कोडिंग शामिल होती है, तो यह बहुत अच्छा होता है - लेकिन बहुत समय, संकलक से प्रदर्शन वास्तव में सिर्फ उदासीन था। IPF ने महान कोड उत्पन्न करना आसान नहीं बनाया, और जब कोड महान नहीं था, तो यह अक्षम था।


4

लेकिन संकलक सामान इतनी कठिन तकनीकी समस्या क्यों थी? यह मुझे लगता है कि अगर ईपीआईसी में स्पष्ट समानता कंपाइलर विक्रेताओं को लागू करने के लिए मुश्किल थी ... तो उन पर पहला बोझ क्यों डाला? यह इस समस्या का एक अच्छा, समझा-समझा समाधान नहीं है, पहले से मौजूद नहीं था: इसके बजाय इंटेल पर बोझ डालें और संकलक-लेखकों को एक सरल लक्ष्य दें।

आप जो वर्णन करते हैं वह थोड़ा सा है जो ट्रांसमेटा ने अपने कोड मॉर्फिंग सॉफ़्टवेयर के साथ करने की कोशिश की (जो गतिशील रूप से x86 "बायटेकोड" को ट्रांसमेटा आंतरिक मशीन कोड में अनुवाद कर रहा था)।

जैसा कि इंटेल IA64 के लिए एक अच्छा पर्याप्त संकलक बनाने में विफल क्यों हुआ ... मुझे लगता है कि उनके पास घर में पर्याप्त संकलक विशेषज्ञता नहीं थी (भले ही वे अंदर कुछ बहुत अच्छे संकलक विशेषज्ञ थे, लेकिन संभवतः पर्याप्त नहीं है एक महत्वपूर्ण द्रव्यमान बनाएं)। मुझे लगता है कि उनके प्रबंधन ने संकलक बनाने के लिए आवश्यक प्रयासों को कम करके आंका।

AFAIK, इंटेल EPIC विफल हो गया क्योंकि EPIC के लिए संकलन वास्तव में कठिन है, और यह भी क्योंकि जब संकलक तकनीक धीरे-धीरे और धीरे-धीरे बेहतर हुई, तो अन्य प्रतियोगी जहां अपने संकलक (जैसे AMD64) में सुधार करने में सक्षम हैं, कुछ संकलक पता-साझा करते हैं।

BTW, मैं कामना करता हूं कि AMD64 कुछ और RISCy निर्देश सेट होगा। यह कुछ POWERPC64 हो सकता था (लेकिन यह शायद पेटेंट मुद्दों के कारण नहीं था, क्योंकि उस समय Microsoft की मांग थी, आदि ...)। X86-64 निर्देश सेट वास्तुकला वास्तव में संकलक लेखक के लिए "बहुत अच्छा" वास्तुकला नहीं है (लेकिन यह किसी भी तरह "अच्छा पर्याप्त" है)।

इसके अलावा IA64 आर्किटेक्चर ने कुछ मजबूत सीमाएं बनाई हैं, उदाहरण के लिए 3 निर्देश / शब्द तब तक अच्छे रहे हैं जब तक प्रोसेसर में उन्हें संसाधित करने के लिए 3 कार्यात्मक इकाइयाँ थीं, लेकिन एक बार Intel नए IA64 चिप्स में चला गया और उन्होंने अधिक कार्यात्मक इकाइयां जोड़ दीं, और निर्देश- स्तर समानता एक बार फिर हासिल करना कठिन था।

शायद RISC-V (जो एक खुला स्रोत ISA है) धीरे-धीरे अन्य प्रोसेसर के लिए इसे प्रतिस्पर्धी बनाने के लिए पर्याप्त रूप से सफल होगा।


इंटेल आर एंड डी पर अरबों खर्च करता है , मुझे विश्वास है कि उन्हें एक कठिन समय एक नए हार्डवेयर प्लेटफॉर्म के लिए एक अच्छा संकलक विकसित करने में मुश्किल होगा।

1
पैसा सब कुछ नहीं है: पौराणिक आदमी महीने देखें , कोई चांदी की गोली नहीं है और यह भी विचार करें कि बाजार के लिए समय बहुत महत्वपूर्ण है।
बेसाइल स्टारीनेवविच

3
वे कई प्रतिभाशाली इंजीनियरों और कंप्यूटर वैज्ञानिकों को नियुक्त करते हैं। उनके गैर-वीएलआईडब्ल्यू संकलक शीर्ष पर हैं, नियमित रूप से अन्य संकलक की तुलना में बहुत तेजी से कोड को पंप करते हैं। इंटेल शायद एक ऐसी कंपनी है जिसमें किसी भी अन्य कंपनी की तुलना में घर में अधिक संकलक विशेषज्ञता है। इंटेल हर चीज में सफल होता है जो वे करते हैं: इटेनियम अल्बाट्रॉस क्यों था?

1
यह शायद 1997 में थोड़ा कम सच था। और जैसा कि कई लोगों ने समझाया, EPIC संकलन वास्तव में कठिन है।
बेसाइल स्टारीनेवविच

3

जैसा कि रॉबर्ट मुन्न ने बताया - यह पिछड़ी संगतता की कमी थी जिसने इटेनियम (और कई अन्य "नई" तकनीकों) को मार दिया।

एक नया संकलक लिखते समय शायद ही आपको कुछ की आवश्यकता हो। एसी कंपाइलर जो अनुकूलित कोड का उत्पादन करता है, वह जरूरी है - अन्यथा आपके पास उपयोग करने योग्य ऑपरेटिंग सिस्टम नहीं होगा। आपको एक C ++ कंपाइलर, जावा की आवश्यकता है और यह देखते हुए कि मुख्य उपयोगकर्ता का आधार Windows किसी प्रकार का Visual Basic होगा। तो यह वास्तव में कोई समस्या नहीं थी। एक अच्छा ऑपरेटिंग सिस्टम (NT) और एक अच्छा C कंपाइलर उपलब्ध था।

एक सॉफ्टवेयर उत्पाद की पेशकश करने वाली कंपनी के लिए एक तुच्छ प्रयास की तरह क्या प्रतीत होता है - अपने सी कोड बेस को फिर से लिखना और फिर से बेचना (और उस समय सबसे शुद्ध सी में लिखा गया होगा!) वह सरल नहीं था; C कार्यक्रमों के एक बड़े सेट को परिवर्तित करना, जिसने 32 बिट पूर्णांक को ग्रहण किया और 32 बिट को एक मूल 64 बिट आर्किटेक्चर को संबोधित करते हुए ग्रहण किया। अगर IA64 एक प्रमुख चिप बन जाता (या यहां तक ​​कि एक लोकप्रिय!) ज्यादातर सॉफ्टवेयर कंपनियों ने बुलेट को काट दिया होता और प्रयास किया होता।

इतनी तेजी से एक उचित ओएस के साथ चिप लेकिन उपलब्ध सॉफ्टवेयर का एक बहुत ही सीमित सेट, इसलिए कई लोगों ने इसे खरीदा नहीं, इसलिए कई सॉफ्टवेयर कंपनियों ने इसके लिए उत्पाद प्रदान नहीं किए।


3

मारे गए इटेनियम शिपमेंट में देरी थी जो 64 बिट ऐप्स के लिए IA64 पर माइग्रेट करने के लिए शुरू होने से पहले AMD64 के लिए दरवाजा खोलने के लिए दरवाजा खोलती थी।

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

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

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

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

यदि आप आईएसए सफलताओं को देखते हैं, तो यह अक्सर तकनीकी पक्ष नहीं है जो पासा को रोल करता है। यह समय और बाजार की ताकतों में अपनी जगह है। SGI Mips, DEC Alpha ... इटेनियम का समर्थन केवल शिथिलता, SGI और HP सर्वरों द्वारा किया गया था, जिन कंपनियों के पास प्रबंधन संबंधी व्यवसाय की गलतियाँ थीं। Microsoft कभी भी पूर्ण नहीं था और AMD64 को एक खिलाड़ी के रूप में केवल Intel के साथ बॉक्स-इन नहीं किया जा सकता था, और Intel ने AMD के साथ सही तरीके से नहीं खेला, जिससे उन्हें पारिस्थितिकी तंत्र में रहने का एक रास्ता मिल सके, जैसा कि उन्होंने AMD को सूंघने का इरादा किया था।

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

अच्छी तरह से कम से कम ऊपर मेरे विश्वास है :)


1

मेमोरी अस्पष्ट हो रही है ... इटेनियम में कुछ महान विचार थे जिन्हें महान संकलक समर्थन की आवश्यकता होगी। समस्या यह थी कि यह एक विशेषता नहीं थी, यह कई थी। हर एक बड़ा सौदा नहीं था, सभी एक साथ थे।

उदाहरण के लिए, एक लूपिंग सुविधा थी जहां लूप का एक पुनरावृत्ति विभिन्न पुनरावृत्तियों से रजिस्टरों पर काम करेगा। x86 बड़े पैमाने पर आउट-ऑफ-ऑर्डर क्षमता के माध्यम से एक ही समस्या को संभालता है।

उस समय जावा और जेवीएम फैशन में थे। आईबीएम ने कहा कि पावरपीसी के साथ, आप जल्दी से बायटेकोड को संकलित कर सकते हैं और सीपीयू इसे तेज कर देगा। इटेनियम पर नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.