minor cleanup, ready for release
authorLawrence Cayton <lcayton@tuebingen.mpg.de>
Thu, 21 Apr 2011 10:25:43 +0000 (12:25 +0200)
committerLawrence Cayton <lcayton@tuebingen.mpg.de>
Thu, 21 Apr 2011 10:25:43 +0000 (12:25 +0200)
Makefile
driver.cu
rbc.cu
readme.txt
versions.txt

index a392c4b..0195f23 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,14 @@
 CC=gcc
 NVCC=nvcc
-CCFLAGS=-O3
-NVCCFLAGS=
-#other flags: -deviceemu -arch=sm_20 --ptxas-options=-v
-#These are useful when debugging sometimes.  
-LINKFLAGS=-lcuda  -lm
-#other linkflags: -lgsl -lgslcblas 
-# lgsl and lgslcblas are required if you want to use the GSL. 
-SOURCES=
-CUSOURCES= driver.cu utils.cu utilsGPU.cu rbc.cu brute.cu kernels.cu kernelWrap.cu sKernel.cu sKernelWrap.cu
-OBJECTS=$(SOURCES:.c=.o)
+NVCCFLAGS=-O3
+# sometimes useful flags: -arch=sm_20 --ptxas-options=-v -g -G
+# Note that you will need to specify an arch (as above) if you wish to use
+# double precision
+LINKFLAGS=-lcuda -lm
+CUSOURCES=driver.cu utils.cu utilsGPU.cu rbc.cu brute.cu kernels.cu kernelWrap.cu sKernel.cu sKernelWrap.cu
 CUOBJECTS=$(CUSOURCES:.cu=.o)
 EXECUTABLE=testRBC
-all: $(SOURCES) $(CUSOURCES) $(EXECUTABLE)
+all: $(CUSOURCES) $(EXECUTABLE)
 
 $(EXECUTABLE): $(OBJECTS) $(CUOBJECTS)
        $(NVCC) $(NVCCFLAGS) $(OBJECTS) $(CUOBJECTS) -o $@ $(LINKFLAGS)
index d664525..c6b606c 100644 (file)
--- a/driver.cu
+++ b/driver.cu
@@ -52,20 +52,22 @@ int main(int argc, char**argv){
   gettimeofday( &tvE, NULL );
   printf(" init time: %6.2f \n", timeDiff( tvB, tvE ) );
   
+
+  //Setup matrices
   initMat( &x, n, d );
   initMat( &q, m, d );
   x.mat = (real*)calloc( sizeOfMat(x), sizeof(*(x.mat)) );
   q.mat = (real*)calloc( sizeOfMat(q), sizeof(*(q.mat)) );
     
   //Load data 
-  if(dataFileXtxt)
-    readDataText(dataFileXtxt, x);
+  if( dataFileXtxt )
+    readDataText( dataFileXtxt, x );
   else
-    readData(dataFileX, x);
-  if(dataFileQtxt)
-    readDataText(dataFileQtxt, q);
+    readData( dataFileX, x );
+  if( dataFileQtxt )
+    readDataText( dataFileQtxt, q );
   else
-    readData(dataFileQ, q);
+    readData( dataFileQ, q );
 
 
   //Allocate space for NNs and dists
@@ -76,16 +78,16 @@ int main(int argc, char**argv){
 
   //Build the RBC
   printf("building the rbc..\n");
-  gettimeofday(&tvB,NULL);
-  buildRBC(x, &rbcS, numReps, numReps);
-  gettimeofday(&tvE,NULL);
-  printf("\t.. build time = %6.4f \n",timeDiff(tvB,tvE));
+  gettimeofday( &tvB, NULL );
+  buildRBC( x, &rbcS, numReps, numReps );
+  gettimeofday( &tvE, NULL );
+  printf( "\t.. build time = %6.4f \n", timeDiff(tvB,tvE) );
   
   //This finds the 32-NNs; if you are only interested in the 1-NN, use queryRBC(..) instead
-  gettimeofday(&tvB,NULL);
-  kqueryRBC(q, rbcS, nnsRBC, distsRBC);
-  gettimeofday(&tvE,NULL);
-  printf("\t.. query time for krbc = %6.4f \n",timeDiff(tvB,tvE));
+  gettimeofday( &tvB, NULL );
+  kqueryRBC( q, rbcS, nnsRBC, distsRBC );
+  gettimeofday( &tvE, NULL );
+  printf( "\t.. query time for krbc = %6.4f \n", timeDiff(tvB,tvE) );
   
   if( runBrute ){
     intMatrix nnsBrute;
@@ -96,13 +98,13 @@ int main(int argc, char**argv){
     distsBrute.mat = (real*)calloc( sizeOfMat(distsBrute), sizeof(*distsBrute.mat) );
     
     printf("running k-brute force..\n");
-    gettimeofday(&tvB,NULL);
-    bruteK(x,q,nnsBrute,distsBrute);
-    gettimeofday(&tvE,NULL);
-    printf("\t.. time elapsed = %6.4f \n",timeDiff(tvB,tvE));
+    gettimeofday( &tvB, NULL );
+    bruteK( x, q, nnsBrute, distsBrute );
+    gettimeofday( &tvE, NULL );
+    printf( "\t.. time elapsed = %6.4f \n", timeDiff(tvB,tvE) );
     
-    free(nnsBrute.mat);
-    free(distsBrute.mat);
+    free( nnsBrute.mat );
+    free( distsBrute.mat );
   }
 
   cE = cudaGetLastError();
@@ -116,12 +118,12 @@ int main(int argc, char**argv){
   if( outFile || outFiletxt )
     writeNeighbs( outFile, outFiletxt, nnsRBC, distsRBC );
 
-  destroyRBC(&rbcS);
+  destroyRBC( &rbcS );
   cudaThreadExit();
-  free(nnsRBC.mat);
-  free(distsRBC.mat);
-  free(x.mat);
-  free(q.mat);
+  free( nnsRBC.mat );
+  free( distsRBC.mat );
+  free( x.mat );
+  free( q.mat );
 }
 
 
diff --git a/rbc.cu b/rbc.cu
index a0af447..c0494e6 100644 (file)
--- a/rbc.cu
+++ b/rbc.cu
@@ -133,7 +133,7 @@ void buildRBC(const matrix x, rbcStruct *rbcS, unint numReps, unint s){
   xmap.r=numReps; xmap.pr=PAD(numReps); xmap.c=s; xmap.pc=xmap.ld=PAD(s);
   xmap.mat = (unint*)calloc( xmap.pr*xmap.pc, sizeof(*xmap.mat) );
   copyAndMoveI(&rbcS->dxMap, &xmap);
-  rbcS->groupCount = (uint*)calloc( PAD(numReps), sizeof(*rbcS->groupCount) );
+  rbcS->groupCount = (unint*)calloc( PAD(numReps), sizeof(*rbcS->groupCount) );
   
   //Figure out how much fits into memory
   size_t memFree, memTot;
index 4f683c9..6ed72e8 100644 (file)
@@ -1,4 +1,4 @@
-***Random Ball Cover (RBC) v0.2***
+***Random Ball Cover (RBC) v0.2.4***
 Lawrence Cayton
 lcayton@tuebingen.mpg.de
 
@@ -17,6 +17,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+
 ---------------------------------------------------------------------
 SUMMARY
 
@@ -30,7 +31,7 @@ algorithm and the theory behind it.
 * L. Cayton, A nearest neighbor data structure for graphics hardware.
 ADMS, 2010.
 * L. Cayton, Accelerating nearest neighbor search on manycore systems.
-Submitted. 
+Submitted, 2011
 
 
 ---------------------------------------------------------------------
@@ -54,16 +55,16 @@ format.
 
 Basic functionality is provided through this driver, but I recommend
 integrating the RBC code directly into your code for the best
-results.  In particular, the best way to use the current
-implementation is to build the RBC once, then query it many times.
+results.  For many applications, the RBC needs to be built only once,
+and then can be queried many times. 
 
 The method requires a single parameter, the number of
-representatives.  This parameter allows one to trade-off between
+representatives.  This parameter allows you to trade-off between
 search quality and search speed.  The best way to set this parameter
 is to try a few different values out; a good starting point is
 generally 5*sqrt(n), where n is the number of database points.  Use
-the eval option (-e) to print out the error rate.  See the paper for
-detailed information on this parameter. 
+the eval option (-e) to print out the error rate.  See the paper
+(Cayton, 2011) for detailed information on this parameter. 
 
 
 ---------------------------------------------------------------------
@@ -119,23 +120,9 @@ typedef float real;
 #define MAX_REAL FLT_MAX
 
 Then, you must do a 
-
-make clean
-
+$ make clean
 followed by another make.
 
-* This software has been tested on the following graphics cards:
-  NVIDIA GTX 285, GT 430, GTX 480
-  NVIDIA Tesla c2050.
-
-* This sotware has been tested under the following software setup:
-  Ubuntu 10.04 (linux)
-  gcc 4.4
-  cuda 3.1
-
-  It has been reported to work under Mac OSX.  Please share your
-  experience getting it to work under Windows!
 * For the most part, device variables (ie arrays residing on the GPU)
   begin with a lowercase d.  For example, the device version of the 
   DB variable x is dx.  
@@ -151,6 +138,17 @@ followed by another make.
   would require only minor changes to the code, though is currently 
   untested.
 
+* This software has been tested on the following graphics cards:
+  NVIDIA GTX 285, GT 430, GTX 480, GeForce 320M, Tesla c2050
+
+* This sotware has been developed under the following software setup:
+  Ubuntu 10.04 (linux)
+  gcc 4.4
+  cuda 3.2
+
+  It has also been tested under Mac OSX.  Please share your
+  experience getting it to work under Windows!
 * If you are running this code on a GPU which is also driving your
   display: A well-known issue with CUDA code in this situation is that 
   a process within the operating system will automatically kill 
index bf4e0df..ada190a 100644 (file)
@@ -1,3 +1,12 @@
+0.2.4 apr 2011
+    Driver cleanup and minor bug fix.
+
+0.2.3 mar 2011
+    Memory leak fix.
+  
+0.2.2 mar 2011
+    Minor bug fix.
+
 0.2.1 dec 2010
     Bug fix and cuda 3.2 compatability update.