//
// If no methods entered, use "0" which is memcpy.
//
if(ac == 3) {
ac = 4;
av[3] = "0";
}
for(; ac > 3; ac--, av++) {
if(isdigit(*av[3])) method = *av[3] - '0';
if(method < 0 || method >= nmethods)
method = 0;
if(sflag)
tstart();
for(ui = 0; ui < cnt; ui++) {
if(!sflag) {
(void)printf("%s %d %d %-18.18s\t",
progname, size, cnt, methods[method]);
tstart();
}
if(fflag == 1) {
p1 = (char *)Malloc(size);
p2 = (char *)Malloc(size);
}
switch(method) {
case 0:
(void)memcpy(p1, p2, size);
break;
case 1:
p = p1;
q = p2;
for(j = 0; j < size; j++)
*p++ = *q++;
break;
case 2:
sp = (short *)p1;
sq = (short *)p2;
for(j = 0; j < size; j += sizeof(short))
*sp++ = *sq++;
break;
case 3:
ip = (int *)p1;
iq = (int *)p2;
for(j = 0; j < size; j += sizeof(int))
*ip++ = *iq++;
break;
case 4:
lp = (long *)p1;
lq = (long *)p2;
for(j = 0; j < size; j += sizeof(long))
*lp++ = *lq++;
break;
case 5:
llp = (__int64 *)p1;
llq = (__int64 *)p2;
for(j = 0; j < size; j += sizeof(__int64))
*llp++ = *llq++;
break;
case 6:
dp = (double *)p1;
dq = (double *)p2;
for(j = 0; j < size; j += 4*sizeof(double)) {
*dp++ = *dq++;
*dp++ = *dq++;
*dp++ = *dq++;
*dp++ = *dq++;
}
break;
}
if(fflag == 1) {
free(p1);
free(p2);
}
if(!sflag) {
tend();
t = tval();
tottim += t;
if(t == 0.0)
t = .0001;
printf(" %8.6f seconds %8.3f MB/s\n",
t,
(double)size/t/1000000.);
}
}
if(sflag) {
tend();
tottim = tval();
}
if(csvflag) {
printf("%s,%u,%u,%8.3f,%8.3f\n",
methods[method],size,size*cnt,tottim,
(double)size/(tottim/cnt)/1000000.);
}
else {
(void)printf("\tAVG: %d %-18.18s\t", size, methods[method]);
(void)printf(" %8.3f MB/s\n",
(double)size/(tottim/cnt)/1000000.);
}
tottim = 0.0;
}
|