Всех приветствую,у меня возник такой вопрос,можно ли подсчитать сколько тактов процессора занимает та или иная команда на ассемблере ? может есть какой нибудь метод или формула,или же это зависит от конкретного производителя процессора.
Entropy, Посылаешь межпроцессорное прерывание(ipi), что бы на время вычислений остальные cpu были в состоянии синхронного ожидания, далее выполняешь замер по профайлу, при это прежде нужно выбрать память, что бы подкачалась и в кэш и тп. Ну и далее статистический замер в огромном числе итераций, что даст среднее значение. Так можно оценить тайминг, причём возникнет трудность к чему привязать число итераций, как узнать время. Значение обычно относительно между инструкциями. Инструкции по тактам не исполняются на сложных архитектурах типо IA, это трансляция, часть исполняет микрокод. Есть конвеер предсказание и прочие сложности(нп смена производительности от нагрузки - функция частоты и те тайминга), чего нет на примитивных контроллерах, собственно оттуда ты и думаешь что можно посчитать такты, но их технически нет. Такты можно посчитать на 8-битных контроллерах.
Indy_, то есть если инструкции по тактам не исполняются,тогда что имеется ввиду когда говорится что xor eax,eax занимает меньше тактов ?
Entropy, Наверно ты часто встречал тут термин профайл". Это относительная статистика производительности. Называется кратко профайлом, что бы лишние буквы не печатать. --- Сообщение объединено, 29 авг 2020 --- > что имеется ввиду когда говорится что xor eax,eax занимает меньше тактов ? Дольше исполняется, профайл ниже.
Entropy, это инди тролит. Да зависит от процессора. Для примера Код (ASM): .data to: dq 0 t : dq 0 equ count=65535 .code ;// Калибруем метод xor eax,eax ; // Обнуляем регистры cpuid ; // Сброс конвейера rdtsc ; // Читаем счетчик тактов процессора mov DWord PTR [t0],eax mov DWord PTR [t0+4],edx mov ecx, Count @loop0: dec ecx jnz @loop0 rdtsc ; // Читаем счетчик тактов процессора sub eax, DWord PTR [t0] sbb edx, DWord PTR [t0+4] mov DWord PTR [t0] , eax mov DWord PTR [t0+4], edx ;// Измеряем код xor eax,eax ; //Обнуляем регистры cpuid ; // Сброс конвейера rdtsc ; // Читаем счетчик тактов процессора mov DWord PTR [t],eax mov DWord PTR [t+4],edx mov ecx, Count @loop: ;// Ваша команда повторяем её столько сколько требует ваш процессор по количество ALU*стадий xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax xor eax,eax dec ecx jnz @loop rdtsc ; //Читаем счетчик тактов процессора sub eax, DWord PTR [t] sbb edx, DWord PTR [t+4] sub eax, DWord PTR [t0] sbb edx, DWord PTR [t0+4] idiv eax, count shr eax, 4 ; // Делим на количество повторов 2^4=16 Подробнее методику измерений можешь найти в https://agner.org/optimize/#testp А проще взять VTune Profiler от Intel'а или AQTime Profiler
У меня на работе один знакомый прочитав эту ветку сказал, что и Pavia и Инде скорее всего за каждый пост получают денюжку. Просто у Pavia есть совесть, а у Инде её нет. Но писАть-то что-то надо, а то денег не заплатят. Вот и приходится писать так, чтобы никто, ничего не понял. А для начальства у Инде всегда, видимо, есть дежурный ответ: что-то типа, да этим баранам хоть как объясняй - один хрен ничего не поймут. А может он и есть начальство. :=) Нет ну серьезно, вот если сравнить ответ Инде и Pavia. Как говорится - почувствуйте разницу. Ничего личного - за что купил, за то и продал. P.S. Pavia, на базе этой методики делают вроде, защиты от отладки и от запуска на виртуальной машине, если я ничего не путаю. Может тоже примерчик какой-нибудь изобразить? Ну это так на ваше усмотрение. Мы ж понимаем, что времени свободного у знающих людей как правило, всегда не хватает.
GRAFik, а я то тут причем? Если что непонятно, то Вы спрашивайте. А так тема упирается в две причины - за полвека существование процессоров Интел'а их микро архитектура усложнилась до заоблачных высот и в двух словах не расскажешь. конвейрное исполнение команд, спикулятивное(опережающее) исполнение команд, параллельное исполнение команд. Не говоря уже о том что xor eax,eax обрабатывается отельным алгоритмом. - во вторых ведущий архитектор Интела забыл приложить опаснее вот и приходиться реверсить: изучать, да додумывать - а как же там всё устроено? Есть то что техписы Интела написал со слов разработичика, но там кот наплакал. Вот Агнер Фог немного рассказывает свои наработки по изучению интела и приводит методику как мерить команды.
Pavia, да вы тут абсолютно ни при чем. Просто сравнил вас с Инде. Т.е. в этой ветке вы положительный герой, а Инде отрицательный персонаж, только и всего)) А вот за это предложение спасибо, при случае обязательно воспользуюсь. Я поначалу-то на вас обиделся (у меня всего тут три или четыре поста, в профиле можете посмотреть за что), но потом подумал, что скорее всего человек, возможно, сомневался в ответе, не будет же он из-за моего вопроса бросать все дела и срочно эксперементировать, а может и со временем было туго. В общем, простил вас, но в следующий раз не расчитывайте на мое снисхождение - жалоба будет лежать на столе у Путина. )) Кстати, ссылочку вы дали классную. Отдельное за нее спасибо.
GRAFik, > Просто сравнил вас с Инде. Тебе задачу решить техническую или ты есчо один психиатр, да что ты знаешь.