2015-09-04 4 views
7

मैं प्रयोगशाला में काम करते हैं और बहु-क्रम कम्प्यूटेशनल कार्यक्रम में लिखा था, सी ++ 11 std::thread के प्रयोग पर। अब मेरे पास बहु-सीपीयू सर्वर पर अपना प्रोग्राम चलाने का अवसर है।सी ++ में बहु-सीपीयू का लाभ कैसे लें?

सर्वर:

  • चलाता उबंटू सर्वर
  • 40 इंटेल CPU के

मैं बहु cpu प्रोग्रामिंग के बारे में कुछ भी नहीं पता है। पहला विचार, जो मेरे दिमाग में 40 अनुप्रयोग चलाने के लिए आता है और उसके बाद अपने परिणामों को एक साथ चिपकाता है। यह संभव है, लेकिन मैं अपने अवसरों के बारे में और जानना चाहता हूं।

  1. यदि मैं अपने जीसीसी कंपाइलर द्वारा सर्वर पर अपना कोड संकलित करता हूं, तो परिणामस्वरूप एप्लिकेशन बहु-सीपीयू का लाभ उठाता है?
  2. # 1 जवाब निर्भर करता है, मैं इसे कैसे देख सकते हैं?

धन्यवाद!

+1

अपने कार्यक्रम से अधिक थ्रेड है पहले से ही तो ओएस स्वचालित रूप से अलग CPUs पर उन धागे निर्धारित करेगा। आप धागे की संख्या से सीमित रहेंगे। यदि आप 10 धागे बनाते हैं तो आपका प्रोग्राम अधिकतम 10 सीपीयू तक ही सीमित होगा। –

+1

यदि प्रत्येक "परिणाम" सभी अन्य लोगों से पूरी तरह से स्वतंत्र है, तो मैं वास्तव में एक एकल थ्रेड एप्लिकेशन लिखूंगा, और उसके बाद इसे 'समानांतर' के माध्यम से निष्पादित करूँगा (देखें 'सुडो एपीटी-समानांतर स्थापित करें; मैन समांतर') – v010dya

+0

ऑफ़-साइट के लिए पूछना एसओ पर संसाधन ऑफ-विषय है। मैंने पुस्तकालयों और अन्य संसाधनों के बारे में आपके सबक्वेस्टियन को हटा दिया है, क्योंकि शेष प्रश्न बचाया जा सकता है। – Puppy

उत्तर

0

आप सवाल यह है कि न केवल बहु धागा के बारे में है, लेकिन बहु सीपीयू के बारे में।

  1. असल में ऑपरेटिंग सिस्टम स्वचालित रूप से कोर पर धागे फैल जाएगा। आपको कुछ भी करने की ज़रूरत नहीं है।

  2. एक बार जब आप सी ++ 11 का उपयोग कर रहे हैं, तो आपके पास std::thread::get_id() है कि आप विभिन्न थ्रेड को कॉल और पहचान सकते हैं, लेकिन आप जिस कोर का उपयोग कर रहे हैं उसे पहचान नहीं सकते हैं। इसके लिए pthreads सीधे + "सीपीयू एफ़िनिटी" का प्रयोग करें।

आप इस पर नियंत्रण पाने के तरीके के बारे में अधिक जानकारी के लिए "सीपीयू एफ़िनिटी" के लिए Google पर जा सकते हैं। यदि आप इस तरह की परिशुद्धता चाहते हैं। आप कोर की पहचान कर सकते हैं और कोर चुन सकते हैं ... आप इसके साथ शुरू कर सकते हैं: http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

+3

इस उत्तर में सवाल के साथ कुछ भी नहीं है। प्रश्नकर्ता के पास कोर या थ्रेड एफ़िनिटी की कोई स्पष्ट आवश्यकता नहीं है, जो मूल रूप से आप चर्चा करते हैं। – Puppy

+0

आह, पिल्ला ने मुझे मार दिया। ओपी पूछता है कि कैसे multithread करने के लिए, कोर को धागे बांधने के लिए कैसे नहीं। अधिकांश थ्रुपुट-उन्मुख ऐप्स में, आपको परवाह नहीं है कि थ्रेड चल रहे हैं। – Mysticial

+0

वह न केवल बहु-थ्रेड के बारे में पूछ रहा है, बल्कि बहु-सीपीयू भी है। यह एक अलग है .... और वह इसके लिए जांचना चाहता है। इसका मतलब है कि बहु-सीपीयू जांचने के लिए उसे निम्न स्तर कोड की आवश्यकता है। –

5

यदि आपका प्रोग्राम मल्टीथ्रेड किया जाता है तो आपके ओएस को स्वचालित रूप से देखभाल करना चाहिए कि यह उपलब्ध CPUs का उपयोग करता है।

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

संबंधित मुद्दे