Multicore + cpuid

Тема в разделе "WASM.ASSEMBLER", создана пользователем Mika0x65, 28 окт 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Читаю пятикнижие Интелово, главу седьмую, многопроцессорность. В главе про определение кол-ва лог. процессоров/ядер сказано следующее:

    Во-первых, не совсем понятно, что есть "a valid ECX input value". Как я понял из главы про cpuid, источник cpuid.4 дает информацию о кэшах и параллельно о ядрах. Попробовал выполнить следющий код:
    Код (Text):
    1. format ELF
    2.  
    3. extrn printf
    4. extrn exit
    5.  
    6. public main
    7.  
    8. main:
    9.  mov eax, 0x4
    10.  xor ecx, ecx
    11.  cpuid
    12.  shr eax, 0x1A
    13.  and eax, 0x3F
    14.  push eax
    15.  push str_cores_per_pkg
    16.  call printf
    17.  add esp, 0x8
    18.  
    19.  push 0x0
    20.  call exit
    21.  
    22. str_cores_per_pkg: db 'Cores per package:                      %d', 0xA, 0x0
    и получил "Cores per package: 0". Отчего такое происходит? Проблема осложняется тем, что у меня лично двуядерника нет, приходится попрошайничать у знакомых. М.б. кто-нибудь подскажет, в чем проблема?

    Заранее благодарен.

    [+]
    Так, кое-что выяснилось: тестировал я на AMD, а у AMD нет ф-ии cpuid.4. Тогда, если не трудно, протестируйте код на двухъядернике от Intel. Благодарю.
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Зато у AMD есть куча вкусных фич, которые можно получить по cpuid eax>0x80000004.
     
  3. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург