$ md5sum 2023-06-22_10-44-41_UTC_5.jpg
daa0941d5d952f102111b7306f7ecd77 2023-06-22_10-44-41_UTC_5.jpg
$
$ openssl sha1 2023-06-22_10-44-41_UTC_5.jpg
SHA1(2023-06-22_10-44-41_UTC_5.jpg)= 93af247ab7d1334e4f59304bb4f203a445c91e24
$ rhash --md5 2023-06-22_10-44-41_UTC_5.jpg
daa0941d5d952f102111b7306f7ecd77 2023-06-22_10-44-41_UTC_5.jpg
Intel наверное имелся в виду.
1) Современный процессор - это очень сложный автомат со множеством состояний. И никому кажется точно
не удавалось зафиксировать время выполнения команд. Вернее сказать я мог посчитать время команды
в тактах для процессора Z80. Когда-то в юности я имел удовольствие покодить на ассемблере под него.
У меня была книжка. Справочник команд и тайминги. И я смотрел сколько чего и как. И если цикл надо
было замедлить я "подбрасывал угля". Добавлял Nop-s.
Я думаю что для Intel можно посчитать длину например
xor rax,rax
Хотя с учетом конвейеризации команд я вообще не уверен что за регистром rax скрывыется
конкретный регистр а не целый стек теневых версий rax, Может и xor тоже нельзя точно учесть.
А для команд оперируюших с памятью - там будет некая шумящая величина наподобие гауссова
шума со средним временем. И вам следует ориентироваться на нее.
Вообще проще написать код и замерять время сколько он работает. И число циклов. И посчитать
среднее время микро или нано-секунд на 1 цикл. Я всегда так делал для всех языков и архитектур.
Имея такие цифры как baseline можно заниматься оптимизацией. Такой подход к сложному объекту
управления предлагал Алексей Шипилев в своих докладах. И я с ним полностью согласен.
Мы рассматриваем любое техническое программное устройство как черный ящик с неизвестными
свойствами. Меряем эти свойства на конкретных алгоритмах и далее пытаемся улучшать.
Поэтому вот в формулу расчета времени я не верю.
2) У Intel на сайте есть много упоминаний о разных SDK и утилитах для тонкой настройки и мониторинга бинарного кода. Может вам пригодиться.
Для Windows/Linux есть утилиты притяжения (affinity) которые позволяют запускать
процессы на конкретных ядрах (taskset). Они вызывают обычный API OS и следовательно
вы тоже можете делать fork процесса с указанием ядра или маски ядер. Но в современном
программировании я вижу в этом очень сомнительную пользу. Скорее будет больше вреда.
Я не знаю как вы можете это писать просто так через запятую. Неужели будете заниматься и тем
и другим? Обе доменных области - очень большие. Самые сильные оптимизации в них
идут через математику и через применение железа специального назначения (криптографические
расширения процессора и тензорные процессоры для AI/ML).