2011-11-30 22 views
5

कहो मैं निम्नलिखित सी कार्यक्रम पर चलने के लिए एसी कार्यक्रम के लिए मजबूर करने:कैसे एक विशेष कोर

#include <stdio.h> 

int main() 
{ 
    printf("Hello world \n"); 
    getchar(); 

    return 0; 
} 

gcc 1.c -o helloworld 

और, कहते हैं कि मैं एक डुअल कोर मशीन है:

cat /proc/cpuinfo | grep processor | wc -l 

अब मेरे सवाल है जब हम कार्यक्रम क्रियान्वित, हम कैसे कोर-0 में चलाने के लिए इस कार्यक्रम के (या किसी अन्य विशेष कोर) के लिए मजबूर करते हैं?

इस प्रोग्रामेटिक तरीके से कैसे करें? उदाहरण, एपीआई, कोड संदर्भ सहायक होगा।

यदि कोई एपीआई उपलब्ध नहीं है तो क्या कोई संकलन समय, लिंक समय, ऐसा करने का लोड समय तरीका है?

ओटीओएच, यह जांचने के लिए कि कोई प्रोग्राम कोर -0 या कोर -1 (या किसी अन्य कोर) में चल रहा है या नहीं?

+1

यह सी के दायरे में नहीं है। आपको यह देखने के लिए अपने ऑपरेटिंग सिस्टम के दस्तावेज़ों को जांचना होगा कि ओएस ऐसी सुविधा का खुलासा करता है या नहीं। –

+1

लिनक्स के तहत आप टास्कसेट का उपयोग करके एफ़िनिटी सेट कर सकते हैं, मैं केरेक के साथ भी सहमत हूं कि यह एक ऑपरेशन सिस्टम प्रश्न –

+0

है, जबकि आप बाद में लॉन्च प्रक्रिया के मूल संबंध को सेट करने के लिए टास्कसेट का उपयोग कर सकते हैं, तो वह स्पष्ट रूप से एपीआई और कैसे करना है यह प्रोग्रामेटिक रूप से – hirschhornsalz

उत्तर

5

चूंकि आप/proc/cpu के बारे में बात कर रहे हैं, मुझे लगता है कि आप लिनक्स का उपयोग कर रहे हैं। लिनक्स में आप sched_setaffinity फ़ंक्शन का उपयोग करेंगे। अपने उदाहरण में आप कहेंगे

cpu_set_t set; 
CPU_ZERO(&set);  // clear cpu mask 
CPU_SET(0, &set);  // set cpu 0 
sched_setaffinity(0, sizeof(cpu_set_t), &set); // 0 is the calling process 

अधिक जानकारी के लिए man sched_setaffinity देखें।

3

इस ओएस-विशिष्ट है। फेलिस बताते रूप में, आप अपने प्रोग्राम में sched_setaffinity फोन करके लिनक्स पर यह कर सकते हैं। यदि आप कई प्लेटफॉर्म पर चल रहे हैं, तो आपको प्रत्येक के लिए कुछ अलग कोड करना होगा।

वैकल्पिक रूप से, आप लॉन्च लॉन्च करें, कमांड लाइन या रन स्क्रिप्ट या जो कुछ भी हो, आप एफ़िनिटी निर्दिष्ट कर सकते हैं। यह करने के लिए एक लिनक्स कमांड लाइन उपकरण के लिए taskset देखें।

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