IcBench: Sample Benchmark App

This commit is contained in:
x
2018-01-15 17:15:50 +01:00
parent efc67f428b
commit e18707e36f

38
icapp.c
View File

@ -66,9 +66,36 @@ void libmemcpy(unsigned char *dst, unsigned char *src, int len) {
} }
#define ID_MEMCPY 32 #define ID_MEMCPY 32
unsigned bench64(unsigned char *in, unsigned n, unsigned char *out, unsigned char *cpy, int id) {
unsigned l,m=n/8;
memrcpy(cpy,in,n);
switch(id) {
case 1: TMBENCH("\np4nenc64 ",l=p4nenc64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4ndec64( out, m, cpy) ,n); break;
case 3: TMBENCH("\np4nzenc64 ",l=p4nzenc64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4nzdec64( out, m, cpy) ,n); break;
case 5: TMBENCH("\np4ndenc64 ",l=p4ndenc64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4nddec64( out, m, cpy) ,n); break;
case 7: TMBENCH("\np4nd1enc64 ",l=p4nd1enc64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4nd1dec64( out, m, cpy) ,n); break;
case 9: TMBENCH("\nvbzenc64 ",l=vbzenc64( in, m, out,0)-out,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",vbzdec64( out, m, cpy,0) ,n); break;
case 10: TMBENCH("\nbitnpack64 ",l=bitnpack64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",bitnunpack64( out, m, cpy) ,n); break;
// case 12: TMBENCH("\nbitnzpack64 ",l=bitnzpack64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",bitnzunpack64( out, m, cpy) ,n); break;
// case 14: TMBENCH("\nbitndpack64 ",l=bitndpack64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",bitndunpack64( out, m, cpy) ,n); break;
// case 16: TMBENCH("\nbitnd1pack64 ",l=bitnd1pack64( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",bitnd1unpack64( out, m, cpy) ,n); break;
case ID_MEMCPY: TMBENCH("\nmemcpy ",libmemcpy( in,out,n) ,n); printf("%10u %5.1f%%", n, (double)100.0); return n;
default: return l;
}
memcheck(in,m*8,cpy);
return l;
}
unsigned bench32(unsigned char *in, unsigned n, unsigned char *out, unsigned char *cpy, int id) { unsigned bench32(unsigned char *in, unsigned n, unsigned char *out, unsigned char *cpy, int id) {
unsigned l,m=(n+3)/4; unsigned l,m=n/4;
memrcpy(cpy,in,n); memrcpy(cpy,in,n);
switch(id) { switch(id) {
case 1: TMBENCH("\np4nenc32 ",l=p4nenc32( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4ndec32( out, m, cpy) ,n); break; case 1: TMBENCH("\np4nenc32 ",l=p4nenc32( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4ndec32( out, m, cpy) ,n); break;
@ -108,12 +135,12 @@ unsigned bench32(unsigned char *in, unsigned n, unsigned char *out, unsigned cha
case ID_MEMCPY: TMBENCH("\nmemcpy ",libmemcpy( in,out,n) ,n); printf("%10u %5.1f%%", n, (double)100.0); return n; case ID_MEMCPY: TMBENCH("\nmemcpy ",libmemcpy( in,out,n) ,n); printf("%10u %5.1f%%", n, (double)100.0); return n;
default: return l; default: return l;
} }
memcheck(in,n,cpy); memcheck(in,m*4,cpy);
return l; return l;
} }
unsigned bench16(unsigned char *in, unsigned n, unsigned char *out, unsigned char *cpy, int id) { unsigned bench16(unsigned char *in, unsigned n, unsigned char *out, unsigned char *cpy, int id) {
unsigned l,m=(n+1)/2; unsigned l,m=n/2;
memrcpy(cpy,in,n); memrcpy(cpy,in,n);
switch(id) { switch(id) {
case 1: TMBENCH("\np4nenc16 ",l=p4nenc16( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4ndec16( out, m, cpy) ,n); break; case 1: TMBENCH("\np4nenc16 ",l=p4nenc16( in, m, out) ,n); printf("%10u %5.1f%%", l, (double)l*100.0/n); TMBENCH("",p4ndec16( out, m, cpy) ,n); break;
@ -143,7 +170,7 @@ unsigned bench16(unsigned char *in, unsigned n, unsigned char *out, unsigned cha
case ID_MEMCPY: TMBENCH("\nmemcpy ",libmemcpy( in,out,n) ,n); printf("%10u %5.1f%%", n, (double)100.0); return n; case ID_MEMCPY: TMBENCH("\nmemcpy ",libmemcpy( in,out,n) ,n); printf("%10u %5.1f%%", n, (double)100.0); return n;
default: return l; default: return l;
} }
memcheck(in,n,cpy); memcheck(in,m*2,cpy);
return l; return l;
} }
@ -170,7 +197,7 @@ int main(int argc, char* argv[]) {
if(idmax < idmin) idmax = idmin; if(idmax < idmin) idmax = idmin;
if(argc - optind < 1) { fprintf(stderr, "raw file not specified\n"); if(argc - optind < 1) { fprintf(stderr, "raw file not specified\n");
fprintf(stderr, "usage: icpp file [-s2|-s4] -e# -E#\n"); fprintf(stderr, "usage: icpp file [-s2|-s4] -e# -E#\n");
fprintf(stderr, "-s2:16 bits, -s4:32 bits, #:function number -e:start -E:end\n"); fprintf(stderr, "-s2:16 bits, -s4:32 bits, -s8:64 bits. #:function number -e:start -E:end\n");
exit(-1); exit(-1);
} }
@ -198,6 +225,7 @@ int main(int argc, char* argv[]) {
switch(usize) { switch(usize) {
case 2: bench16(in,n,out,cpy,i); break; case 2: bench16(in,n,out,cpy,i); break;
case 4: bench32(in,n,out,cpy,i); break; case 4: bench32(in,n,out,cpy,i); break;
case 8: bench64(in,n,out,cpy,i); break;
default: die("integer size must be 2 or 4\n"); default: die("integer size must be 2 or 4\n");
} }
printf("\n"); printf("\n");