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>
19 #include "../libvo/fastmemcpy.h"
21 //#define ARR_SIZE 100000
22 #define ARR_SIZE (1024*768*2)
26 #include "../drivers/mga_vid.h"
28 static int mga_next_frame
=0;
30 static mga_vid_config_t mga_vid_config
;
31 static unsigned char* frame
=NULL
;
34 static int mga_init(){
37 f
= open("/dev/mga_vid",O_RDWR
);
40 fprintf(stderr
,"Couldn't open /dev/mga_vid\n");
44 mga_vid_config
.num_frames
=1;
45 mga_vid_config
.frame_size
=ARR_SIZE
;
46 mga_vid_config
.format
=MGA_VID_FORMAT_YUY2
;
48 mga_vid_config
.colkey_on
=0;
49 mga_vid_config
.src_width
= 640;
50 mga_vid_config
.src_height
= 480;
51 mga_vid_config
.dest_width
= 320;
52 mga_vid_config
.dest_height
= 200;
53 mga_vid_config
.x_org
= 0;
54 mga_vid_config
.y_org
= 0;
56 mga_vid_config
.version
=MGA_VID_VERSION
;
57 if (ioctl(f
,MGA_VID_CONFIG
,&mga_vid_config
))
59 perror("Error in mga_vid_config ioctl()");
60 printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
63 ioctl(f
,MGA_VID_ON
,0);
65 frame
= (char*)mmap(0,mga_vid_config
.frame_size
*mga_vid_config
.num_frames
,PROT_WRITE
,MAP_SHARED
,f
,0);
67 printf("Can't mmap mga frame\n");
72 //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
80 // Returns current time in microseconds
81 unsigned int GetTimer(){
85 gettimeofday(&tv
,&tz
);
86 // s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
87 return (tv
.tv_sec
*1000000+tv
.tv_usec
);
90 static inline unsigned long long int read_tsc( void )
92 unsigned long long int retval
;
93 __asm
__volatile ("rdtsc":"=A"(retval
)::"memory");
97 unsigned char __attribute__((aligned(4096)))arr1
[ARR_SIZE
],arr2
[ARR_SIZE
];
101 unsigned long long int v1
,v2
;
102 unsigned char * marr1
,*marr2
;
113 for(i
=0; i
<ARR_SIZE
-16; i
++) marr1
[i
] = marr2
[i
] = i
;
117 for(i
=0;i
<100;i
++) memcpy(marr1
,marr2
,ARR_SIZE
-16);
120 // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t
121 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
);