How to get "Clock counts" of opcode programaticaly
12 отговора
0 прегледа
How to get "Clock counts" of opcode programaticaly
Написах нещо за смятане размера на функция в байтове:
Съмнява ме, но дали може някак програмно да получа процесорното време за дадена инструкция ?
Ego praeferro ante vesper bibere aquam slivoevensem
#include <iostream>
__declspec(noinline) int Function(int a)
{
return a*a + 1/(a + 5);
}
int main()
{
unsigned char* pStartCodeAddress = reinterpret_cast<unsigned char*>(&Function);
unsigned char* pEndCodeAddress = pStartCodeAddress;
for(;;pEndCodeAddress++)
{
unsigned int opcode = (unsigned int)(*pEndCodeAddress);
if(opcode == 0x000000C3 || opcode == 0x000000CB || opcode == 0x000000C2 || opcode == 0x000000CA) // Hard coded "ret" opcodes
break;
std::cout << std::hex << "0x" << (unsigned int*)pEndCodeAddress << " -> ";
std::cout.width(2);
std::cout.fill('0');
std::cout << opcode << std::endl;
}
std::cout << "Function code size is: " << std::dec << pEndCodeAddress - pStartCodeAddress << " bytes." << std::endl;
return 0;
}
Съмнява ме, но дали може някак програмно да получа процесорното време за дадена инструкция ?
Ego praeferro ante vesper bibere aquam slivoevensem
Re: How to get "Clock counts" of opcode programaticaly
Нищо не си написал бате. В една функция може да има повече от един рет. А процесорното време за дадена инструкция е фиксирано и се смята от честотата на процесора и броя тактове.
Re: How to get "Clock counts" of opcode programati
абе какво ни занимаваш с глупостите си ? Стига с тия лигавщини - нещо заплатки , соц. екстри ...
Re: How to get "Clock counts" of opcode programaticaly
Знам, знам :)
А и рет кода може да съвпадне с нещо което не е инструкция.
Това може да се оправи. Просто експеримент в този контекст с тази функция.
Ама за заплатите е по-интересно май :)
Ego praeferro ante vesper bibere aquam slivoevensem
А и рет кода може да съвпадне с нещо което не е инструкция.
Това може да се оправи. Просто експеримент в този контекст с тази функция.
Ама за заплатите е по-интересно май :)
Ego praeferro ante vesper bibere aquam slivoevensem
няма да стане така
може да имаш повече ретурни, може да имаш цикъл с ретурн в него, може да нацелиш константа....
NE SUTOR ULTRA CREPIDAM
NE SUTOR ULTRA CREPIDAM
Re: няма да стане така
Наясно съм с това.
Явно не си чел другия ми пост. :)
Ego praeferro ante vesper bibere aquam slivoevensem
Явно не си чел другия ми пост. :)
Ego praeferro ante vesper bibere aquam slivoevensem
Re: How to get "Clock counts" of opcode programaticaly
Как ще се оправи бе бате, дори дизасемблиращите програми още не са му хванали цаката.
Иначе верно, колко пари взе за тоя код?
Иначе верно, колко пари взе за тоя код?
Re: How to get "Clock counts" of opcode programati
За засичане на времето е доста трудно - имаш само броячи на изпълнени инструкции в MSR-ите и конфигурация да броят само определен тип, или всички. Пък и с всичките тези кешове и паралелни обработки няма как да се извади точен резултат. Можеш да го докараш, но с доста грубо приближение.
Иначе има публикувани таблици от производителите - за всяка инструкция колко примитивни инструкции съдържа във всеки вариант, от колко до колко цикъла на ядрото отнема обработката ..
надолу..
Иначе има публикувани таблици от производителите - за всяка инструкция колко примитивни инструкции съдържа във всеки вариант, от колко до колко цикъла на ядрото отнема обработката ..
надолу..
Re: How to get "Clock counts" of opcode programaticaly
"процесорното време за дадена инструкция е фиксирано"
има и такива, за които не е - всички които работят с блокове памет например
има и такива, за които не е - всички които работят с блокове памет например
Re: How to get "Clock counts" of opcode programaticaly
Абе това за фиксираното време какво да му коментираме ...
Ако нямаше неща като cache hit/miss, pipeline flush, page-on-demand - верно си е
Ако нямаше неща като cache hit/miss, pipeline flush, page-on-demand - верно си е
Re: How to get "Clock counts" of opcode programaticaly
Всичко това много хубаво и умно, ако времето за четене от паметта го брояхме към времето за изпълнение на инструкцията.
Re: How to get "Clock counts" of opcode programaticaly
Ми къде да го броим ? Току между 2 инструкции - хоп, време за четене на паметта. Появи се отнякъде като cosmic rays.
Re: How to get "Clock counts" of opcode programaticaly
Зависи какво наричаш инструкция, ние викаме така на командите на процесора. Ако приемем за инструкции вътрешните елемнтарни операции, това дето си го мислиш може да се приеме (с леки уговорки) за вярно.