RDTSC
This commit is contained in:
parent
4afeb7f515
commit
2408ebe255
14
main.c
14
main.c
|
@ -108,6 +108,14 @@ int main1(int argc, char *argv[]) {
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* http://wiki.osdev.org/Inline_Assembly/Examples#RDTSC */
|
||||||
|
static inline uint64_t rdtsc(void)
|
||||||
|
{
|
||||||
|
uint64_t ret;
|
||||||
|
asm volatile ( "rdtsc" : "=A"(ret) );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static tt_node_ptr_t make_path(tt_arena_t *a, tt_node_ptr_t ok_dict, int n, tt_atom_t const *atoms)
|
static tt_node_ptr_t make_path(tt_arena_t *a, tt_node_ptr_t ok_dict, int n, tt_atom_t const *atoms)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -423,6 +431,7 @@ int main(int argc, char *argv[]) {
|
||||||
#define N_MESSAGES 10000000
|
#define N_MESSAGES 10000000
|
||||||
tt_node_ptr_t r = TT_EMPTY;
|
tt_node_ptr_t r = TT_EMPTY;
|
||||||
struct timeval start_time, stop_time;
|
struct timeval start_time, stop_time;
|
||||||
|
uint64_t start_cycles, stop_cycles;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
gettimeofday(&start_time, NULL);
|
gettimeofday(&start_time, NULL);
|
||||||
|
@ -450,6 +459,7 @@ int main(int argc, char *argv[]) {
|
||||||
/* tt_dump_arena_dot_styled("r", r, &a, TT_STYLE_TEXT_LABELS /\* | TT_STYLE_HIDE_DETAILS *\/); */
|
/* tt_dump_arena_dot_styled("r", r, &a, TT_STYLE_TEXT_LABELS /\* | TT_STYLE_HIDE_DETAILS *\/); */
|
||||||
|
|
||||||
gettimeofday(&start_time, NULL);
|
gettimeofday(&start_time, NULL);
|
||||||
|
start_cycles = rdtsc();
|
||||||
for (i = 0; i < N_MESSAGES; i++) {
|
for (i = 0; i < N_MESSAGES; i++) {
|
||||||
tt_atom_t key = ((rand() % N_PATTERNS) << 1) | 1;
|
tt_atom_t key = ((rand() % N_PATTERNS) << 1) | 1;
|
||||||
tt_node_ptr_t p = r;
|
tt_node_ptr_t p = r;
|
||||||
|
@ -461,6 +471,7 @@ int main(int argc, char *argv[]) {
|
||||||
/* printf("\nstepped: key %d, %u/%u\n", key, tt_ptr_idx(p), tt_ptr_tag(p)); */
|
/* printf("\nstepped: key %d, %u/%u\n", key, tt_ptr_idx(p), tt_ptr_tag(p)); */
|
||||||
/* tt_dump_arena_dot_styled("result", p, &a, TT_STYLE_TEXT_LABELS); */
|
/* tt_dump_arena_dot_styled("result", p, &a, TT_STYLE_TEXT_LABELS); */
|
||||||
}
|
}
|
||||||
|
stop_cycles = rdtsc();
|
||||||
gettimeofday(&stop_time, NULL);
|
gettimeofday(&stop_time, NULL);
|
||||||
{
|
{
|
||||||
double delta_ms = (stop_time.tv_sec - start_time.tv_sec) * 1000.0 +
|
double delta_ms = (stop_time.tv_sec - start_time.tv_sec) * 1000.0 +
|
||||||
|
@ -469,6 +480,9 @@ int main(int argc, char *argv[]) {
|
||||||
delta_ms,
|
delta_ms,
|
||||||
1000.0 * delta_ms / N_MESSAGES,
|
1000.0 * delta_ms / N_MESSAGES,
|
||||||
N_MESSAGES / (delta_ms / 1000.0));
|
N_MESSAGES / (delta_ms / 1000.0));
|
||||||
|
printf("%lld cycles elapsed; %g cycles per routed message\n",
|
||||||
|
((long long int) stop_cycles - (long long int) start_cycles),
|
||||||
|
(double) (stop_cycles - start_cycles) / N_MESSAGES);
|
||||||
}
|
}
|
||||||
|
|
||||||
tt_drop(&a, r);
|
tt_drop(&a, r);
|
||||||
|
|
Loading…
Reference in New Issue