Я знаю теорию, но у меня есть проблемы с практической реализацией. Я написал алгоритм AES на C. Теперь я хотел бы знать, сколько циклов на байт он «имеет». Я знаю, что я должен (это на 100% верно?):
Возможно ли сделать это на C / C ++? Как сделать это и что я должен использовать / искать, чтобы сделать это?
Я заинтересован в решениях для Linux / Windows / Mac.
Это просто алгебра, а не уравнение или теория.
Если вы уже знаете байты / секунду и тактовую частоту (циклов / секунду), то
(bytes/second) / (cycles/second) => bytes/cycle
1 / (bytes/cycle) => cycles/byte
Если ты не знаешь байт в секунду, Вы можете рассчитать это по:
Обратите внимание: если указанная выше «временная метка» на самом деле является счетчиком циклов, вы можете пропустить цикл / второй этап. В противном случае вы можете просто считать частоту ЦП из системного / аппаратного информационного инструмента для вашей платформы.
Для POSIX разумный таймер может быть clock_gettime(CLOCK_THREAD_CPUTIME_ID,...)
, например. Вы должны быть в состоянии найти пример кода для rdtsc
, документация для лучшей функции синхронизации Windows и т. д. путем поиска.
Что касается фактических измерений, в комментариях есть хорошие предложения. Вам нужно:
Других решений пока нет …