88 lines
1.3 KiB
C
88 lines
1.3 KiB
C
#include <stdint.h>
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <x86intrin.h>
|
|
#include <signal.h>
|
|
|
|
#define PLSIZE 63
|
|
|
|
|
|
|
|
struct lst {
|
|
struct lst * next;
|
|
long int payload[PLSIZE];
|
|
} l;
|
|
|
|
|
|
struct lst * mkws(int size)
|
|
{
|
|
int i,j;
|
|
struct lst * ws0,*ws;
|
|
|
|
if (size == 0)
|
|
return NULL;
|
|
|
|
srand(time(0));
|
|
ws = calloc(1,sizeof(struct lst));
|
|
ws->next = NULL;
|
|
|
|
for (i=0;i<PLSIZE;i++)
|
|
ws->payload[i]=(rand())%2;
|
|
|
|
for (j=1;j<size;j++) {
|
|
ws0=ws;
|
|
ws = calloc(1,sizeof(struct lst));
|
|
if (ws==NULL) {
|
|
fprintf(stderr,"Can't add element...\n");
|
|
exit(1);
|
|
}
|
|
for (i=0;i<PLSIZE;i++)
|
|
ws->payload[i]=(rand())%2;
|
|
ws->next = ws0;
|
|
}
|
|
return ws;
|
|
}
|
|
|
|
|
|
int main(int argc, char ** argv)
|
|
{
|
|
struct lst * ws, * ws0;
|
|
|
|
long long int start, end, dif;
|
|
|
|
long int i, x, z = 0, size, it;
|
|
|
|
if (argc != 3) {
|
|
printf("Usage: %s <list size> <iterations>\n",argv[0]);
|
|
exit(1);
|
|
}
|
|
|
|
size=strtol(argv[1],NULL,0);
|
|
|
|
ws = mkws(size);
|
|
if (ws == NULL) {
|
|
printf("NIL list created...\n");
|
|
exit(1);
|
|
}
|
|
|
|
it = strtol(argv[2],NULL,0);
|
|
|
|
start = __rdtsc();
|
|
for (i = 0; i < it; i++) {
|
|
ws0 = ws;
|
|
while (ws0 != NULL) {
|
|
x = ws0->payload[3];
|
|
x++;
|
|
z++;
|
|
ws0 = ws0->next;
|
|
}
|
|
}
|
|
end = __rdtsc();
|
|
|
|
dif = end - start;
|
|
printf("Cycles/element = %lf\n", ((double) dif)/((double) size*it));
|
|
exit(0);
|
|
}
|