2009-04-26 8 views
5

मैं एक नंगे हड्डियों प्रणाली है जिसमें मैं बूट के बाद कुछ समय निर्धारित करने के लिए कितने कोर और धागे सक्षम होते हैं की जरूरत पर काम कर रहा हूँ में सक्षम होते हैं लगता है, ताकि मैं भेज सकते हैं उन्हें घटनाओं Sipi। मैं भी प्रत्येक थ्रेड पता करने के लिए जो धागा यह है चाहता हूँ।विधानसभा निर्देश कितने धागे एक मल्टी कोर प्रणाली

उदाहरण के लिए, हिंदुस्तान टाइम्स के साथ एक सिंगल-कोर विन्यास सक्षम में, हम (उदाहरण के लिए, इंटेल एटम) है:

thread 0 --> core 0 thread 0 
thread 1 --> core 0 thread 1 

कोई एचटी हम साथ एक डुअल कोर विन्यास में रहते हुए (उदाहरण के लिए, कोर 2 डुओ):

thread 0 --> core 0 thread 0 
thread 1 --> core 1 thread 0 

इस निर्धारित करने के लिए सबसे अच्छा तरीका क्या है?

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

उत्तर

7

मैं यह थोड़ा शोध किया और इन तथ्यों के साथ आया था। cpuideax = 01h साथ EBX[31:24] में APIC आईडी वापस आती है और हिंदुस्तान टाइम्स EDX[28] में सक्षम बनाते हैं।

इस कोड को काम करना चाहिए:

; this code will put the thread id into ecx 
    ; and the core id into ebx 

    mov eax, 01h 
    cpuid 
    ; get APIC ID from EBX[31:24] 
    shr ebx, 24 
    and ebx, 0ffh; not really necessary but makes the code nice 

    ; get HT enable bit from EDX[28] 
    test edx, 010000000h 
    jz ht_off 

    ; HT is on 
    ; bit 0 of EBX is the thread 
    ; bits 7:1 are the core 
    mov ecx, ebx 
    and ecx, 01h 
    shr ebx, 1 

    jmp done 

ht_off: 
    ; the thread is always 0 
    xor ecx, ecx 

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