view main/sparsersb/src/obench.m @ 11582:dbc62fd39423 octave-forge

small bugfix to the tester. the obench program will also benchmark colamd-preordered matrices.
author michelemartone
date Sun, 31 Mar 2013 16:21:54 +0000
parents b995a264e374
children
line wrap: on
line source

# once complete, this program will benchmark our matrix implementation against octave's
cmt="#";
#for n_=1:6*0+1
for n_=1:6
for ro=0:1
	n=n_*1000;
	m=k=n;
	# making vectors
	b=linspace(1,1,n)';
	ox=linspace(1,1,n)';
	bx=linspace(1,1,n)';
	# making matrices
	r=(rand(n)>.6);
	om=sparse(r);
	nz=nnz(om);
	M=10^6;
	if ro==1 
		printf("%s%s\n",cmt,"reordering with colamd");
		pct=-time; 
		p=colamd(om);
		pct+=time;
		pat=-time; 
		om=om(:,p);
		pat+=time;
		# TODO: use an array to select/specify the different reordering algorithms
		printf("%g\t%g\t(%s)\n",(nz/M)/pct,(nz/M)/pat,"mflops for pct/pat");
	else
		printf("%s%s\n",cmt,"no reordering");
	end
	#bm=sparsevbr(om);
	bm=sparsersb(sparse(om));
	#bm=sparsersb3(sparse(om));
	# stats
	flops=2*nz;
	## spmv
	ot=-time; ox=om*b; ot+=time;
	#
	bt=-time; bx=bm*b; bt+=time;
	t=ot; p=["octave-",version]; mflops=(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","*",m,k,nz,mflops, p);
	t=bt; p=["RSB"]; mflops=(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","*",m,k,nz,mflops, p);

	## spmvt
	ot=-time; ox=om.'*b; ot+=time;
	#
	bt=-time; bx=bm.'*b; bt+=time;
	t=ot; p=["octave-",version]; mflops=(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","*",m,k,nz,mflops, p);
	t=bt; p=["RSB"]; mflops=(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","*",m,k,nz,mflops, p);

	## spgemm
	ot=-time; ox=om*om; ot+=time;
	#
	bt=-time; bx=bm*bm; bt+=time;
	t=ot; p=["octave-",version]; mflops=n*(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","OCT_SPGEMM",m,k,nz,mflops, p);
	t=bt; p=["RSB"]; mflops=n*(flops/M)/t;
	printf("%s\t%d\t%d\t%d\t%g\t%s\n","RSB_SPGEMM",m,k,nz,mflops, p);
endfor
endfor