2014-07-15 12 views
0

일부 Intel CPU에는 bit 28 in register EDX from CPUID으로 읽을 수있는 하이퍼 스레딩 기능이 있습니다. AMD CPU에는 하이퍼 스레딩이 없지만 일부는 modules which have two integer units and one floating point unit입니다. CPU에 모듈이 있는지 감지하기위한 CPUID를 통한 방법이 있습니까?AMD CPU에 모듈이 있는지 감지하십시오.

편집 : Jester의 답변을 기반으로 "컴퓨팅 유닛"(일명 모듈) 당 코어 수를 결정하기 위해 다음의 테스트되지 않은 함수 (AMD 프로세서에 액세스 할 필요가 없습니다)를 생각해 냈습니다.

// input: eax = functionnumber, ecx = 0 
// output: eax = output[0], ebx = output[1], ecx = output[2], edx = output[3] 
//static inline void cpuid (int output[4], int functionnumber) 

void coresPerComputeUnit() { 
    int abcd[4]; 
    int cores = 1; 
    cpuid(abcd,0x80000000); 
    if(abcd[0]<0x8000001E) return; // Fn8000_001E not available 
    cpuid(abcd,0x8000001E); 
    cores += (abcd[1] & 0xff00) >> 8; //ebx bit 15:8 CoresPerComputeUnit 
} 

http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/42301_15h_Mod_00h-0Fh_BKDG1.pdf

+0

질문에 대답하기에 충분하지 않지만 [AMD 아키텍처 프로그래머 매뉴얼 볼륨 3] 섹션 E5 (다중 코어 계산) (http://amd-dev.wpengine.netdna-cdn.com/wordpress /media/2008/10/24594_APM_v3.pdf)에는 프로세서의 코어 수를 찾는 방법이 나와 있습니다. [Bulldozer는 마이크로 아키텍처입니다] (http://en.wikipedia.org/wiki/Bulldozer_%28microarchitecture%29) 아키텍처 자체가 아니라 AMD 프로세서가 어떻게 생겼는지를 확인하기 위해 할 수있는 최선의 방법입니다 그것은 불도저를 사용하고 있습니다. (필자가 링크 한 설명서에는 "Bulldozer"의 인스턴스가 없습니다.) – bouteillebleu

답변

1

당신은 CPUID Fn8000_001E 컴퓨팅 장치 식별자를 사용할 수 있습니다. BH의 비트 15 : 8 (예 : BH)은 계산 단위당 CoresPerComputeUnit : 코어를 보유합니다. 가치 : 제품 별. 계산 단위당 코어 수는 CoresPerComputeUnit + 1입니다.

AMD Bios 및 Kernel Developer 's Guide를 참조하십시오.

+0

테스트를 위해 테스트되지 않은 코드를 추가했습니다. 나는 Fn8000_001E의 가용성을 확인하는 것에 대해 정말로 확신하지 못합니다. 나는 이것을 시험해 볼 AMD 시스템이 없다. –

+0

내 FX-8350에서 제대로 작동합니다. – Jester

+0

내 기능을 테스트했는데 코어 = 2를 제공합니까? –