शीर्षक यह सब कहता है: क्या एक पुराना प्रोग्राम प्राप्त करने का एक तरीका है कि एक ही सीपीयू कोर का उपयोग करके कई सीपीयू कोर का उपयोग किया जाए?
शीर्षक यह सब कहता है: क्या एक पुराना प्रोग्राम प्राप्त करने का एक तरीका है कि एक ही सीपीयू कोर का उपयोग करके कई सीपीयू कोर का उपयोग किया जाए?
जवाबों:
दुर्भाग्य से, एकल सीपीयू के लिए लिखित एक विरासत कार्यक्रम को कई सीपीयू कोर का उपयोग करने के लिए मजबूर नहीं किया जा सकता है। कई सीपीयू कोर के उपयोग के लिए कई थ्रेड्स की आवश्यकता होती है, जो यह सुनिश्चित करने के लिए एक दूसरे के साथ संवाद करने की आवश्यकता होती है कि दौड़ की स्थिति और अन्य समस्याएं नहीं होती हैं। CPU कोर से अधिक उपयोग करने के लिए एक पुराना एप्लिकेशन नहीं बनाया जा सकता है जब तक कि ऐसा करने के लिए फिर से लिखा न जाए, और केवल तभी जब एप्लिकेशन की प्रकृति इसे समानांतर करने की अनुमति देती है।
इसके साथ आपका लक्ष्य क्या है? बढ़ा हुआ प्रदर्शन? अफसोस की बात है कि केवल 1 कोर का उपयोग करने के लिए डिज़ाइन किए गए एप्लिकेशन अधिक उपयोग नहीं करेंगे। Thats "बहु-थ्रेडेड" अनुप्रयोगों की यह बात क्या है।
एक कोर का उपयोग करने के लिए डिज़ाइन किए गए प्रोग्राम में कई प्रोसेसर के शोषण के लिए कम से कम तीन तकनीकें हैं। इन तकनीकों में से सबसे सरल है पुस्तकालयों और सिस्टम कोड का उपयोग करना जो एकाधिक कोर का उपयोग करता है या कम से कम आंशिक रूप से एप्लिकेशन कोड के साथ समानांतर में निष्पादित कर सकता है। कचरा संग्रह कार्यक्षमता का एक उदाहरण है जिसे समानांतर किया जा सकता है और आवेदन निष्पादन के साथ समानांतर में करना संभव हो सकता है। स्वचालित मेमोरी प्रबंधन के बिना भी, मेमोरी डीलोकेशन फ़ंक्शंस में समानता के लिए कुछ संभावनाएं हैं क्योंकि मेमोरी एलोकेटर के पास उपलब्ध स्मृति के अनुभाग को चिह्नित करने से परे कुछ काम हो सकते हैं।
एक दूसरी तकनीक बाइनरी ट्रांसलेशन है। हालांकि इसे "एप्लिकेशन को फिर से लिखना" माना जा सकता है, यह सॉफ्टवेयर द्वारा और स्रोत कोड तक पहुंच के बिना किया जाता है। थ्रेड-लेवल समानता का उत्पादन बाइनरी ट्रांसलेशन (जो अक्सर आईएसए पर विरासत कोड चलाने की चिंता करता है, आईएसए एक्सटेंशन का फायदा उठाता है या किसी विशेष माइक्रोआर्किटेक्चर के लिए अनुकूलन करता है, और उच्चतर जानकारी प्रदान करने के लिए गतिशील जानकारी का उपयोग करना) ज्यादातर अनुसंधान और विकास का मुख्य लक्ष्य नहीं है। गुणवत्ता प्रोफ़ाइल-निर्देशित अनुकूलन), लेकिन क्षमता स्पष्ट है।
एक तीसरी तकनीक सट्टा मल्टीथ्रेडिंग है। वर्तमान में कोई प्रोसेसर (जो मुझे पता है) हार्डवेयर-प्रबंधित सट्टा मल्टीथ्रेडिंग का समर्थन करता है। हालाँकि, हार्डवेयर ट्रांसेक्शनल मेमोरी की शुरूआत के साथ, रनटाइम सिस्टम लागू करने से कुछ अधिक व्यावहारिक हो जाता है क्योंकि HTM का उपयोग मेमोरी उपयोग में संघर्षों का पता लगाने के लिए किया जा सकता है। सॉफ्टवेयर-प्रबंधित सट्टा मल्टीथ्रेडिंग में आमतौर पर कुछ द्विआधारी अनुवाद शामिल होते हैं, लेकिन इसकी सट्टा प्रकृति एक अलग तकनीक पर विचार करना उचित है।
इन तकनीकों की व्यावहारिकता मौजूदा सिस्टम से जुड़ी लागतों (थ्रेड्स और स्पाविंग थ्रेड्स के बीच संचार की लागत सहित) द्वारा सीमित समानता से होती है जिसका वे शोषण कर सकते हैं, और निवेश पर सीमित रिटर्न (महत्वपूर्ण अनुप्रयोगों के लिए जो लाभकारी हो सकते हैं) समानांतर में फिर से लिखे जाने की संभावना है, अगर ऐसी तकनीकों (विशेष रूप से बिजली / थर्मल सीमाओं के साथ एक कोर से कई कोर की तुलना में उच्च आवृत्ति पर चलने की अनुमति देता है), और विकास लागत महत्वपूर्ण हैं, तो कई अनुप्रयोगों को अपेक्षाकृत कम लाभ होगा। फिर भी इन तकनीकों करना मौजूद हैं और यह एक सिंगल कोर का उपयोग करने के लिए डिज़ाइन किया गया एक आवेदन के साथ कई कोर का उपयोग करने के सैद्धांतिक रूप से संभव है।
नहीं, यह नहीं हो सकता। एक कार्यक्रम में स्पष्ट रूप से कई कोर का उपयोग करने के लिए लिखा गया है। कई कोर में काम करना तुच्छ नहीं है। इसमें सभी थ्रेड्स के सिंक्रोनाइज़ेशन की आवश्यकता होती है। जैसे एक गेंद फेंकता है, दूसरा पकड़ता है, एक गेंद को पॉलिश करता है, एक साफ करता है, एक गेंद को चेक करता है कि क्या उसमें अच्छी मात्रा में हवा है। अब प्रत्येक चरित्र को एक दूसरे से स्वतंत्र रूप से एक धागे में चलाने की कल्पना करें। किसी ने गेंद को पकड़ने की कोशिश की जब उसके फेंके नहीं। या कोई गेंद को चमकाने की कोशिश करता है जब उसे खेला जाता है। या दो अक्षर एक साथ गेंद को पकड़ने और फेंकने की कोशिश कर रहे हैं। क्रैश करने के बहुत सारे तरीके हैं। इसलिए प्रोग्रामर्स को सिंगल कोर एप्लिकेशन को सावधानीपूर्वक रिडिजाइन करने की जरूरत है ताकि वह मल्टीपल कोर का फायदा उठा सके।