2009-04-26 2 views
5

부팅 후 언젠가 확인할 필요가있는 베어 본 시스템에서 작동하고 있습니다. 얼마나 많은 코어와 스레드가 활성화되어있어 보낼 수 있습니까? 그들에게 SIPI 이벤트. 또한 각 스레드가 어떤 스레드인지 알고 싶습니다. HT 단일 코어 구성이 활성화에멀티 코어 시스템에서 사용 가능한 스레드 수를 확인하기위한 어셈블리 지침

예를 들어, 우리는 (예를 들어, 인텔 아톰)이 있습니다

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

(예를 들어 우리가 어떤 HT 듀얼 코어 구성에있는 동안, 코어 2 듀오) :

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

이것을 결정하는 가장 좋은 방법은 무엇입니까?

편집 : 각 스레드가 어떤 스레드인지 찾는 방법을 찾았습니다. 나는 아직도 얼마나 많은 코어가 있는지를 결정하는 방법을 찾지 못했습니다.

답변

7

나는 이것을 조금 연구하고이 사실을 생각해 내었다. cpuideax = 01h이고 APIC ID는 EBX[31:24]이고 HT는 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: 
:이 코드는 일을해야

관련 문제