2 fastmemcpybench.c used to benchmark fastmemcpy.h code from libvo.
4 Note: this code can not be used on PentMMX-PII because they contain
5 a bug in rdtsc. For Intel processors since P6(PII) rdpmc should be used
6 instead. For PIII it's disputable and seems bug was fixed but I don't
13 #include <sys/ioctl.h>
20 //#define ARR_SIZE 100000
21 #define ARR_SIZE (1024*768*2)
25 #include "drivers/mga_vid.h"
27 static mga_vid_config_t mga_vid_config
;
28 static unsigned char* frame
=NULL
;
31 static int mga_init(){
33 f
= open("/dev/mga_vid",O_RDWR
);
36 fprintf(stderr
,"Couldn't open /dev/mga_vid\n");
40 mga_vid_config
.num_frames
=1;
41 mga_vid_config
.frame_size
=ARR_SIZE
;
42 mga_vid_config
.format
=MGA_VID_FORMAT_YUY2
;
44 mga_vid_config
.colkey_on
=0;
45 mga_vid_config
.src_width
= 640;
46 mga_vid_config
.src_height
= 480;
47 mga_vid_config
.dest_width
= 320;
48 mga_vid_config
.dest_height
= 200;
49 mga_vid_config
.x_org
= 0;
50 mga_vid_config
.y_org
= 0;
52 mga_vid_config
.version
=MGA_VID_VERSION
;
53 if (ioctl(f
,MGA_VID_CONFIG
,&mga_vid_config
))
55 perror("Error in mga_vid_config ioctl()");
56 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
59 ioctl(f
,MGA_VID_ON
,0);
61 frame
= (char*)mmap(0,mga_vid_config
.frame_size
*mga_vid_config
.num_frames
,PROT_WRITE
,MAP_SHARED
,f
,0);
63 printf("Can't mmap mga frame\n");
68 //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
76 // Returns current time in microseconds
77 unsigned int GetTimer(){
81 gettimeofday(&tv
,&tz
);
82 // s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
83 return (tv
.tv_sec
*1000000+tv
.tv_usec
);
86 static inline unsigned long long int read_tsc( void )
88 unsigned long long int retval
;
89 __asm
__volatile ("rdtsc":"=A"(retval
)::"memory");
93 unsigned char __attribute__((aligned(4096)))arr1
[ARR_SIZE
],arr2
[ARR_SIZE
];
97 unsigned long long int v1
,v2
;
98 unsigned char * marr1
,*marr2
;
109 for(i
=0; i
<ARR_SIZE
-16; i
++) marr1
[i
] = marr2
[i
] = i
;
113 for(i
=0;i
<100;i
++) memcpy(marr1
,marr2
,ARR_SIZE
-16);
116 // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t
117 printf(NAME
": cpu clocks=%llu = %dus (%5.3ffps) %5.1fMB/s\n",v2
-v1
,t
,100000000.0f
/(float)t
,(float)ARR_SIZE
*95.36743f
/(float)t
);