2009-04-26 26 views
5

Tôi đang làm việc trên hệ thống xương trần mà tôi cần xác định đôi khi sau khi khởi động có bao nhiêu lõi và chuỗi được bật để tôi có thể gửi chúng sự kiện SIPI. Tôi cũng muốn mỗi thread để biết đó là chủ đề.Hướng dẫn lắp ráp để tìm số lượng chủ đề được kích hoạt trong hệ thống đa lõi

Ví dụ, trong một cấu hình lõi đơn với HT được kích hoạt, chúng tôi có (ví dụ, Intel Atom):

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

Trong khi trong một cấu hình dual-core không có HT chúng ta có (ví dụ, Core 2 Duo):

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

Cách tốt nhất để xác định điều này là gì?

Chỉnh sửa: Tôi tìm thấy cách mỗi chuỗi có thể tìm thấy chuỗi đó. Tôi vẫn chưa tìm ra cách xác định có bao nhiêu lõi.

Trả lời

7

Tôi đã nghiên cứu nó một chút và đã đưa ra những sự kiện này. cpuid với eax = 01h trả lại ID APIC trong EBX[31:24] và HT bật trong EDX[28].

Mã này nên thực hiện công việc:

; 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: 
Các vấn đề liên quan