2013-02-26 58 views
13

के साथ प्रक्रिया कोर कोटा सेट करना यदि आप सॉफ़्टवेयर लिखते हैं जहां ग्राहक सॉफ़्टवेयर का उपयोग करने वाले CPU कोर की संख्या के लिए भुगतान करता है, तो आपके C++ कोड में इसे प्राप्त करने का सबसे अच्छा तरीका क्या होगा? मेरे शोध ने अब तक मुझे विंडोज़ पर SetProcessAffinityMask और पॉज़िक्स सिस्टम पर sched_setaffinity का उपयोग करने का नेतृत्व किया है।सी ++

+0

यह सच है और विस्तृत जवाब: [1]: http://stackoverflow.com/a/3082553/1848929 – hakiko

+0

@hakiko यही सवाल यह जानने के बारे में है देखते हैं कि कितने कोर ... – us2012

+2

पर विंडोज़, आपको जॉब ऑब्जेक्ट्स पर एक नज़र रखना चाहिए: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx वे प्रक्रियाओं को सीमित करने के लिए बहुत कुछ कर सकते हैं संबंध से। लेकिन वे एफ़िनिटी को भी सीमित कर सकते हैं: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx –

उत्तर

0

मुझे लगता है कि आपको सबसे अच्छा विकल्प मिला है। यदि आप बहुप्रचारित प्रोसेसर की क्षमताओं का लाभ उठाना चाहते हैं तो थ्रेड की संख्या सीमित करना एक अच्छा विचार नहीं है। अपने प्रश्न के लिए

+1

"जहां ग्राहक सीपीयू कोर की संख्या के लिए भुगतान करता है" पहले से ही तात्पर्य है कि आप उन क्षमताओं का लाभ नहीं लेना चाहते हैं, ग्राहक के भुगतान के बिना। – MSalters

2

यह एक दिलचस्प सवाल है। मुझे नहीं लगता कि मेरे पास सही समाधान है, लेकिन अब तक कोई प्रतिक्रिया नहीं मिली है, इसलिए मुझे निम्नलिखित सुझाव दें:

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

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

+0

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