Всегда ли логический номер процессора присваивается одному и тому же процессору/ядру? Если я делаю SetThreadAffinityMask(X, 1), то всегда ли я буду попадать на один и тот же процессор/ядро? И если я сделаю из этого потока EAX=1,CPUID, то в битах 13..12 EAX (The processor type) и при EAX=0Bh,CPUID в EDX (x2APIC ID of current logical processor) всегда ли я буду получать одно и тоже число?
data. szebx dd 0 szeax dd 0 szesi dd 0 szedx dd 0 szedi dd 0 szecx dd 0 code. proccessor proc mov eax, 1 cpuid and edx, 0100000000000000000y .if !ZERO? ; Варианты серийного номера процессора pushad mov eax, 1 cpuid ; get Processor Signature push eax mov eax, 3 cpuid pop eax mov ebx, eax shr ebx, 16 and eax, 0FFFFh mov esi, edx shr esi, 16 and edx, 0FFFFh mov edi, ecx shr edi, 16 and ecx, 0FFFFh ;ЗАПОМИНАЕМ ЗНАЧЕНИЯ РЕГИСТРОВ С НОМЕРОМ ПРОЦЕССОРА MOV szebx,ebx MOV szeax,eax MOV szesi,esi MOV szedx,edx MOV szedi,edi MOV szecx,ecx popad .endif xor eax, eax ret proccessor endp
Зачем мне серийный номер процессора? Вопрос совершенно о другом. Всегда ли логический номер процессора присваивается одному и тому же физическому процессору/ядру? Если я делаю SetThreadAffinityMask(X, 1), то всегда ли я буду попадать на один и тот же процессор/ядро?
У меня был прецендент по этому вопросу - у одного пользователя стояло два отдельных процессора на материнке... Некорректно определялись серия процессора (разные значения eax при выполнении cpuid с eax=1) - оказалось, что процессоры имели разную версию изменений модели. Код выполнялся то на одном то на другом проце... Решение проблемы было почти таким же: GetProcessAffinityMask - SetProcessAffinityMask больше проблем не возникало... Поэтому на ваш вопрос отвечу утвердительно.