1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Подсчёт тактов процессора

Тема в разделе "WASM.A&O", создана пользователем Entropy, 25 авг 2020.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    41
    Всех приветствую,у меня возник такой вопрос,можно ли подсчитать сколько тактов процессора занимает та или иная команда на ассемблере ? может есть какой нибудь метод или формула,или же это зависит от конкретного производителя процессора.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    3.829
    Entropy,

    Посылаешь межпроцессорное прерывание(ipi), что бы на время вычислений остальные cpu были в состоянии синхронного ожидания, далее выполняешь замер по профайлу, при это прежде нужно выбрать память, что бы подкачалась и в кэш и тп. Ну и далее статистический замер в огромном числе итераций, что даст среднее значение. Так можно оценить тайминг, причём возникнет трудность к чему привязать число итераций, как узнать время. Значение обычно относительно между инструкциями. Инструкции по тактам не исполняются на сложных архитектурах типо IA, это трансляция, часть исполняет микрокод. Есть конвеер предсказание и прочие сложности(нп смена производительности от нагрузки - функция частоты и те тайминга), чего нет на примитивных контроллерах, собственно оттуда ты и думаешь что можно посчитать такты, но их технически нет.

    Такты можно посчитать на 8-битных контроллерах.
     
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    41
    Indy_, то есть если инструкции по тактам не исполняются,тогда что имеется ввиду когда говорится что xor eax,eax занимает меньше тактов ?
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    3.829
    Entropy,

    Наверно ты часто встречал тут термин профайл". Это относительная статистика производительности. Называется кратко профайлом, что бы лишние буквы не печатать.
    --- Сообщение объединено, 29 авг 2020 ---
    > что имеется ввиду когда говорится что xor eax,eax занимает меньше тактов ?

    Дольше исполняется, профайл ниже.
     
  5. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    41
    Indy_, то есть время выполнения команды ?
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.397
    Адрес:
    Fryazino
    Entropy, это инди тролит.
    Да зависит от процессора. Для примера
    Код (ASM):
    1. .data
    2. to: dq 0
    3. t : dq 0
    4. equ count=65535
    5. .code
    6. ;// Калибруем метод
    7. xor eax,eax         ; // Обнуляем регистры
    8. cpuid              ; // Сброс конвейера
    9. rdtsc               ; // Читаем счетчик тактов процессора
    10. mov DWord PTR [t0],eax
    11. mov DWord PTR [t0+4],edx
    12. mov ecx, Count
    13. @loop0:
    14. dec ecx
    15. jnz @loop0
    16. rdtsc              ; // Читаем счетчик тактов процессора
    17. sub eax, DWord PTR [t0]
    18. sbb edx, DWord PTR [t0+4]
    19. mov DWord PTR [t0]  , eax
    20. mov DWord PTR [t0+4], edx
    21. ;// Измеряем код
    22. xor eax,eax         ; //Обнуляем регистры
    23. cpuid              ; // Сброс конвейера
    24. rdtsc               ; // Читаем счетчик тактов процессора
    25. mov DWord PTR [t],eax
    26. mov DWord PTR [t+4],edx
    27. mov ecx, Count
    28. @loop:
    29. ;// Ваша команда повторяем её столько сколько требует ваш процессор по количество ALU*стадий
    30.   xor eax,eax
    31.   xor eax,eax
    32.   xor eax,eax
    33.   xor eax,eax
    34.   xor eax,eax
    35.   xor eax,eax
    36.   xor eax,eax
    37.   xor eax,eax
    38.   xor eax,eax
    39.   xor eax,eax
    40.   xor eax,eax
    41.   xor eax,eax
    42.   xor eax,eax
    43.   xor eax,eax
    44.   xor eax,eax
    45.   xor eax,eax
    46. dec ecx
    47. jnz @loop
    48. rdtsc              ; //Читаем счетчик тактов процессора
    49. sub eax, DWord PTR  [t]
    50. sbb edx, DWord PTR [t+4]
    51. sub eax, DWord PTR [t0]
    52. sbb edx, DWord PTR [t0+4]
    53. idiv eax, count
    54. shr eax, 4  ; // Делим на количество повторов 2^4=16
    Подробнее методику измерений можешь найти в https://agner.org/optimize/#testp

    А проще взять VTune Profiler от Intel'а или AQTime Profiler
     
    Rel, GRAFik и q2e74 нравится это.
  7. GRAFik

    GRAFik New Member

    Публикаций:
    0
    Регистрация:
    8 май 2020
    Сообщения:
    11
    У меня на работе один знакомый прочитав эту ветку сказал, что и Pavia и Инде скорее всего за каждый пост получают денюжку. Просто у Pavia есть совесть, а у Инде её нет. Но писАть-то что-то надо, а то денег не заплатят. Вот и приходится писать так, чтобы никто, ничего не понял. А для начальства у Инде всегда, видимо, есть дежурный ответ: что-то типа, да этим баранам хоть как объясняй - один хрен ничего не поймут. А может он и есть начальство. :=)

    Нет ну серьезно, вот если сравнить ответ Инде и Pavia. Как говорится - почувствуйте разницу.

    Ничего личного - за что купил, за то и продал.

    P.S. Pavia, на базе этой методики делают вроде, защиты от отладки и от запуска на виртуальной машине, если я ничего не путаю. Может тоже примерчик какой-нибудь изобразить? Ну это так на ваше усмотрение. Мы ж понимаем, что времени свободного у знающих людей как правило, всегда не хватает.
     
    Indy_ нравится это.
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    3.829
    GRAFik,

    > да этим баранам хоть как объясняй - один хрен ничего не поймут.

    Очень годное замечание.
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.397
    Адрес:
    Fryazino
    GRAFik, а я то тут причем? Если что непонятно, то Вы спрашивайте. А так тема упирается в две причины
    - за полвека существование процессоров Интел'а их микро архитектура усложнилась до заоблачных высот и в двух словах не расскажешь.
    конвейрное исполнение команд, спикулятивное(опережающее) исполнение команд, параллельное исполнение команд. Не говоря уже о том что xor eax,eax обрабатывается отельным алгоритмом.
    - во вторых ведущий архитектор Интела забыл приложить опаснее вот и приходиться реверсить: изучать, да додумывать - а как же там всё устроено? Есть то что техписы Интела написал со слов разработичика, но там кот наплакал.
    Вот Агнер Фог немного рассказывает свои наработки по изучению интела и приводит методику как мерить команды.
     
    Indy_ нравится это.
  10. GRAFik

    GRAFik New Member

    Публикаций:
    0
    Регистрация:
    8 май 2020
    Сообщения:
    11
    Pavia, да вы тут абсолютно ни при чем. Просто сравнил вас с Инде. Т.е. в этой ветке вы положительный герой, а Инде отрицательный персонаж, только и всего))
    А вот за это предложение спасибо, при случае обязательно воспользуюсь. Я поначалу-то на вас обиделся (у меня всего тут три или четыре поста, в профиле можете посмотреть за что), но потом подумал, что скорее всего человек, возможно, сомневался в ответе, не будет же он из-за моего вопроса бросать все дела и срочно эксперементировать, а может и со временем было туго. В общем, простил вас, но в следующий раз не расчитывайте на мое снисхождение - жалоба будет лежать на столе у Путина. ))
    Кстати, ссылочку вы дали классную. Отдельное за нее спасибо.
     
  11. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    41
    Pavia, спасибо !
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    3.829
    GRAFik,

    > Просто сравнил вас с Инде.

    Тебе задачу решить техническую или ты есчо один психиатр, да что ты знаешь.