Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #if defined(__i386__)
- static __inline__ unsigned long long rdtsc(void)
- {
- unsigned long long int x;
- __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
- return x;
- }
- #elif defined(__x86_64__)
- static __inline__ unsigned long long rdtsc(void)
- {
- unsigned hi, lo;
- __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
- return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
- }
- #endif
- #define Kb 1024
- #define BLOCK_SIZE 16 * Kb
- #define OFFSET 1024 * 1024
- #define DATATYPE unsigned long
- #define ITERATIONS 10000
- //#define Kb 1024
- //#define BLOCK_SIZE 32
- //#define OFFSET 64
- //#define DATATYPE unsigned long
- //#define ITERATIONS 2
- //#define DEBUG_PRINT 2
- typedef struct {
- unsigned long dummy[7];
- unsigned long next;
- } S ;
- unsigned long long test(int);
- int main() {
- printf("Hello, World: %lu\n", sizeof(S));
- unsigned long long result;
- result = test(4);
- printf("\n===========================================\n");
- for (int i = 1; i < 30; i ++) {
- result = test(i);
- printf("ticks spent(%d): %llu\n", i, result);
- }
- return 0;
- }
- unsigned long long int test(int N) {
- //init
- DATATYPE* test_array = (DATATYPE *)calloc(OFFSET * N, sizeof(DATATYPE));
- for (unsigned long i = 0; i < OFFSET * N; i++) {
- test_array[i] = 0;
- }
- for (long i = 0; i < BLOCK_SIZE / N; i++) {
- for (long current_block = 0; current_block < N; current_block++) {
- test_array[current_block * OFFSET + i] = (current_block + 1) * OFFSET + i;
- }
- test_array[(N - 1) * OFFSET + i] = 0 + i + 1;
- }
- test_array[(N - 1) * OFFSET + BLOCK_SIZE / N - 1] = 0;
- // for (int i = 0; i < OFFSET * N; i++) {
- // printf("%lu ", test_array[i]);
- // if ((i + 1) % (OFFSET) == 0 && i != 0) {
- // printf("\n");
- // }
- // }
- unsigned long long start = rdtsc();
- DATATYPE t = 0;
- for (long i = 0; i < ITERATIONS; i++){
- t = test_array[t];
- }
- unsigned long long end = rdtsc();
- if (t == 1) {
- printf("test\n");
- }
- return (end - start);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement