Требуется замерить программу с высокой точностью и не через библиотеку Chrono, так как требуется строгая мерка выполнения подключаемой библиотеки с функциями на процессоре. Предложили вариант замерять через такты процессора, т.е. через RDTSC, и в целом то можно закончить, но замер, мягко говоря не очень. Ниже пример кода.
unsigned __int32 fstEnter = 0, secEnter = 0, average = 0;
for (int i = 0; i < size; i++) {
__asm {
xor eax, eax
rdtsc
mov [fstEnter], eax }
someDll(...); // Обращение к библиотеке
__asm {
xor eax, eax
rdtsc
mov [secEnter], eax }
average = average + secEnter - fstEnter; // Среднее
}
Видел пару статей на эту тему, но увы, вся работа происходит под управлением Windows. Можно ли как-то запретить прерывать программу, запретить мигрировать программе на ядрах, выдать максимальный приоритет обработки? Интересует именно точное получение времени выполнения на процессоре.
В итоге всё же удалось сделать замеры времени через данную операцию. Но сразу, две особенности:
1. При использовании __rdtsc вы не заметите миграцию между ядрами, а это может быть важно (разница в паре тактов). Необходимо использовать __rdtscp. Пример:
int cpuStart = 0, cpuFinish = 0;
int64 start = 0, finish = 0;
start = __rdtscp(&cpuStart);
//код
finish = __rdtscp(&cpuFinish);
finish = finish - start;
Это приблизительный код, сейчас точно не вспомню как именно.
Соответственно, чтобы посмотреть на каких ядрах было вычисление, через cout получить cpu. Объявлять обязательно (а то выскочит черти что).
2.Так же, нюанс (а из-за него и появился косвенно этот вопрос). Функция rand() не выдавала случайные значения должны образом и пришлось отдельно генерировать файл с этими значениями.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Понадобилось написать программу, выполняющую функцию подобно утилите Linux - lsusbВывод должен быть похож на:
Есть структура _dem_ram_data_Она должна занимать в памяти 16 байт, но я получаю 21 байт
Есть приложение с областью, которая реагирует на клик мышки: