Я вообще, когда поточнее нужно, делаю примерно так:
rdtscp
push eax
push edx
push ecx
cpuid
call ebp
rdtsc
mov esi,eax
mov edi,edx
mov ebp,ecx
cpuid
pop ecx
pop edx
pop eax
Сначала запускаю код с ebp = адресу просто ret-а. Раз 10 вхолостую, потом несколько раз с замером среднего. Затем аналогично с ebp = адресу на заменяемый код. И вычитаю разницу, сравниваю номера процессоров (вернее, номера раньше, после замеров сразу).
Перед этим максимальный приоритет процесса и треда.