कार्यात्मक प्रोग्रामिंग के लिए पूरी तरह से डिज़ाइन किया गया सीपीयू अलग कैसे होगा?


14

CPU एक हद तक सॉफ्टवेयर को ध्यान में रखकर बनाया गया है जो लोग इसके लिए लिखेंगे, संक्षेप में या स्पष्ट रूप से।

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

यदि कोई सीपीयू को खरोंच से डिजाइन करेगा, तो यह जानकर कि यह केवल एक कार्यात्मक प्रोग्रामिंग शैली में लिखे गए प्रोग्राम चलाएगा, उस सीपीयू को मौजूदा सीपीयू से अलग तरीके से कैसे डिजाइन किया जाएगा?


9
जॉन बैकस ने अपने "कैन प्रोग्रामिंग बी लिबरेट फ्रॉम द वॉन न्यूमैन स्टाइल?" ऐसे कुछ कार्यों का उल्लेख करता है (धारा 15)।
दिमित्री अर्बनवॉच

(ग्राफ़) रिडक्शन मशीनों की तलाश करें या डब्ल्यू। क्लेज़ की आउट-ऑफ-प्रिंट पुस्तक द ऑर्गनाइज़ेशन ऑफ़ रिडक्शन, डेटा फ़्लो, और कंट्रोल फ़्लो सिस्टम (एमआईटी प्रेस, 1992) की एक प्रति खोजने की उम्मीद में अपने स्थानीय शोध पुस्तकालय पर जाएँ ।
काई

2
इसके अलावा Koopman की किताब An Architecture for Combinator Graph Reduction (AP, 1990)। लिस्प मशीनों में देखना भी शायद सार्थक है। en.wikipedia.org/wiki/Lisp_machine
छद्म नाम

मुझे लगता है कि मूलभूत रूप से हमारी मशीनें हमेशा अत्यावश्यक होंगी क्योंकि वे समय के साथ अपने राज्य को बदल देती हैं।
orlp

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

जवाबों:


3

दरअसल, यह किया गया है: https://en.wikipedia.org/wiki/Lisp_machine

एफपी के लिए सीपीयू डिजाइन में एक पहलू कचरा संग्रह है। कार्यात्मक भाषाओं के लिए GC बहुत महत्वपूर्ण है। सामान्य कार्यान्वयन के लिए आवश्यक है कि GC पॉइंटर्स और नॉन-पॉइंटर डेटा के बीच अंतर कर सके। प्रभावी रूप से, इसका मतलब है कि आपके डेटा के साथ एक अतिरिक्त बिट स्टोर करना। यही कारण है कि, उदाहरण के लिए, OCaml पूर्णांक 32-बिट आर्किटेक्चर पर केवल 31 बिट और 64-बिट आर्किटेक्चर पर 63 बिट हैं। पूर्णांक अंकगणित में अजीब अतिरिक्त स्थानांतरण कार्य शामिल हैं। अन्य भाषाएँ (या अन्य OCaml डेटा प्रकार) उस अतिरिक्त बिट के लिए पूरी मशीन शब्दों को बर्बाद कर सकती हैं, इस प्रकार 64-बिट पूर्णांक के लिए 128 बिट्स का उपयोग कर सकती हैं। एक सीपीयू जो मूल रूप से जीसी की ओर डिज़ाइन किया गया है, उसमें 65-बिट डेटा बस लेकिन 64-बिट अंकगणित हो सकता है।

इसने कहा, बहुत सारी गैर-कार्यात्मक भाषाओं में भी कचरा संग्रह होता है और इस तरह से संबंधित आर्किटेक्चर से लाभ होगा।

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


1

यह या तो कुछ भी नहीं बदलेगा या Reduceron और इसके उत्तराधिकारी PilGRIM 1 की तरह बड़े पैमाने पर समानांतर सेटिंग का दोहन नहीं करेगा ।

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

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

अलग-अलग होने की संभावना हो सकती है कि कई कार्यों को लोड किया जा सके और उन्हें बिना फ्रेम के करतब दिखाने के लिए चलाया जा सके - लेकिन फ़ंक्शंस के लिए कई इकाइयाँ जोड़ने से मेमोरी तक पहुँचने में गड़बड़ होगी।

घुटने के जवाब में जोड़कर, जीसी कोप्रोसेसर के रूप में चलाने के लिए फायदेमंद होगा, यह बहुत साफ सुविधा होगी।

1: Boeijink A., Hölzenspies PKF, Kuper J. (2011) ने PilGRIM का परिचय दिया : PilGRIM का ठीक से वर्णन किया गया है : आलसी कार्यात्मक भाषाओं को निष्पादित करने के लिए एक प्रोसेसर। में: हेज जे।, मोरज़ान एमटी (एड) कार्यान्वयन और कार्यात्मक भाषाओं के अनुप्रयोग। IFL 2010. कंप्यूटर साइंस में लेक्चर नोट्स, वॉल्यूम 6647। स्प्रिंगर, बर्लिन, हीडलबर्ग


"पुनरावृत्ति को मूल बनाने की कोई संभावना नहीं है"। क्या आप बता सकते हैं कि ऐसा क्यों है? यह पहली बार में मुझे आश्चर्यचकित करता है।
user56834

इसके अलावा, reduceron एक fpga पर चलने के बजाय एक कठिन सीपीयू हो सकता है?
user56834

मेरा बुरा, मेरा मतलब था देशी पुनरावृत्ति , लेकिन यह पूरी तरह अप्रासंगिक है। मुझे थोड़ा संशोधित करना है।
ईविल

0

पहले एक चुटकुला: एक 100% कार्यात्मक कार्यक्रम चलाने के रूप में कभी भी कुछ भी उपयोगी नहीं हो सकता है, यह केवल एनओपी निर्देश के लिए पर्याप्त होगा। (मैं इसे लौ युद्धों के लिए खोलता हूं)।

इसलिए, आईओ के लिए कुछ अनिवार्य निर्देश और अनिवार्य प्रोग्रामिंग के लिए सामान्य समर्थन की आवश्यकता होगी।

अन्यथा यह आंशिक रूप से प्रयुक्त वास्तविक भाषा पर निर्भर करता है। मेरे दिमाग में शीर्ष पर दो हास्केल और एर्लांग हैं।

मेरा मानना ​​है कि हास्केल सूचियों और मानचित्रों के समर्थन से लाभान्वित हो सकता है। एक सूची को विशिष्ट हार्डवेयर मेमोरी मैपिंग द्वारा समर्थित किया जा सकता है, लिंक की गई सूची को एड्रेसेस के लगातार सेट में बदल सकता है। पहला तत्व एड्रेस एन पर हो सकता है, दूसरा एड्रेस एन + 1 और इतने पर। सूची से पहला तत्व निकालने के लिए, आप बस पॉइंटर n को बदल देंगे। अंत में, जब आप n पॉइंटर को हटाते हैं तो सभी मेमोरी को मुक्त किया जा सकता है। मानचित्रों को सहयोगी सरणियों के रूप में समर्थित किया जा सकता है - खोज मूल्य दर्ज करें और मेमोरी सिस्टम आइटम को लौटाता है। पुनरावृत्तियों की कोई आवश्यकता नहीं है।

बदले में एर्लांग पूरे राज्य के साथ संदेशों / प्रक्रियाओं और पूंछ की पुनरावृत्ति के समर्थन से लाभान्वित हो सकते हैं। संदेशों और प्रक्रियाओं को विभिन्न तरीकों से समर्थित किया जा सकता है, एक उदाहरण प्रसंस्करण कोर की एक बड़ी मात्रा में हो सकता है। टेल रिकर्शन को मेमोरी कंट्रोलर द्वारा बेहतर बनाया जा सकता है, जिससे राज्य को बहुत तेजी से कॉपी करने की अनुमति मिलती है, शायद डेटा के बड़े हिस्से की नकल नहीं होती है, बल्कि केवल मेमोरी सिस्टम पॉइंटर्स को संशोधित करता है।

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