क्या एकाधिक कोर का उपयोग करने के लिए एकल-थ्रेडेड प्रोग्राम बनाया जा सकता है?


12

शीर्षक यह सब कहता है: क्या एक पुराना प्रोग्राम प्राप्त करने का एक तरीका है कि एक ही सीपीयू कोर का उपयोग करके कई सीपीयू कोर का उपयोग किया जाए?


13
नहीं, संभव नहीं।
मोआब

5
अगर केवल यह इतना आसान था ..
ब्रेंडन लांग

1
क्या होगा अगर एक प्रोग्राम था जो एक प्रोसेसर (जैसे शायद एक vm?) को 'उत्सर्जित' करता है, लेकिन आपके मल्टी-कोर सीपीयू को ले लिया और प्रति धागे बहुत अधिक प्रोसेसिंग पावर के साथ सिंगल-कोर सीपीयू का अनुकरण किया? क्या यह संभव है?
schizoid04

जो तब कई थ्रेड्स के बीच सिंक्रनाइज़ेशन का प्रबंधन करेगा, क्योंकि ऑर्डर मायने रखता है।
user36582

जवाबों:


16

दुर्भाग्य से, एकल सीपीयू के लिए लिखित एक विरासत कार्यक्रम को कई सीपीयू कोर का उपयोग करने के लिए मजबूर नहीं किया जा सकता है। कई सीपीयू कोर के उपयोग के लिए कई थ्रेड्स की आवश्यकता होती है, जो यह सुनिश्चित करने के लिए एक दूसरे के साथ संवाद करने की आवश्यकता होती है कि दौड़ की स्थिति और अन्य समस्याएं नहीं होती हैं। CPU कोर से अधिक उपयोग करने के लिए एक पुराना एप्लिकेशन नहीं बनाया जा सकता है जब तक कि ऐसा करने के लिए फिर से लिखा न जाए, और केवल तभी जब एप्लिकेशन की प्रकृति इसे समानांतर करने की अनुमति देती है।


19
यह भी ध्यान देने योग्य है कि कुछ एप्लिकेशन को एकाधिक कोर को ध्यान में रखते हुए दोबारा नहीं लिखा जा सकता है। यह ज्यादातर इस बात पर निर्भर करता है कि प्रक्रिया कितनी समानांतर है। गैर-समानांतर प्रक्रिया का एक सरल उदाहरण मानव प्रजनन होगा: एक महिला 9 महीने में एक बच्चा बना सकती है। नौ महिलाएं 9 महीने में 9 बच्चे बना सकती हैं, लेकिन आप एक महीने में एक बच्चे का निर्माण करने के लिए 9 महिलाओं का उपयोग नहीं कर सकते।
आंद्रेजाको

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

महान, आप सभी को धन्यवाद, आपने मुझे अपनी महिलाओं और जन्म के उदाहरण के साथ आभार व्यक्त किया, खासकर जब आप विनिर्माण के बारे में बात करते हैं:
क्रिस

क्या होगा यदि किसी कार्यक्रम में स्वतंत्र गणितीय संचालन का एक गुच्छा है जो बाद में प्रत्येक अभिजन के लिए उपयोग किया जाता है? शायद एक दूसरा सूत्र कार्यक्रम को पार्स कर सकता है, हम्म मैं नहीं जानता कि मैं क्या कह रहा हूं। यदि कोई थ्रेड असेंबली को पार्स कर सकता है .. "यहां महंगा ऑपरेशन करें, तो इस पर दूसरा महंगा ऑपरेशन करें कि पहला महंगा ऑपरेशन डोंट टच" ठीक है मैं एक महंगा ऑपरेशन एक धागे पर, एक दूसरे पर डालूंगा, फिर सिंक्रनाइज़ करें मुख्य धागे पर वापस। मुझे लगता है कि एक पूरे कार्यक्रम को स्वतंत्र महंगे संचालन की पहचान करने के लिए पहले से तैयार रहना होगा।
CausingUnderflowsEverywhere

13

इसके साथ आपका लक्ष्य क्या है? बढ़ा हुआ प्रदर्शन? अफसोस की बात है कि केवल 1 कोर का उपयोग करने के लिए डिज़ाइन किए गए एप्लिकेशन अधिक उपयोग नहीं करेंगे। Thats "बहु-थ्रेडेड" अनुप्रयोगों की यह बात क्या है।


2

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

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

एक तीसरी तकनीक सट्टा मल्टीथ्रेडिंग है। वर्तमान में कोई प्रोसेसर (जो मुझे पता है) हार्डवेयर-प्रबंधित सट्टा मल्टीथ्रेडिंग का समर्थन करता है। हालाँकि, हार्डवेयर ट्रांसेक्शनल मेमोरी की शुरूआत के साथ, रनटाइम सिस्टम लागू करने से कुछ अधिक व्यावहारिक हो जाता है क्योंकि HTM का उपयोग मेमोरी उपयोग में संघर्षों का पता लगाने के लिए किया जा सकता है। सॉफ्टवेयर-प्रबंधित सट्टा मल्टीथ्रेडिंग में आमतौर पर कुछ द्विआधारी अनुवाद शामिल होते हैं, लेकिन इसकी सट्टा प्रकृति एक अलग तकनीक पर विचार करना उचित है।

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


0

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

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