GPURegression: Population Parallel GP on G80 GPUs

by Denis Robilliard, Virginie Marion-Poty, Cyril Fonlupt - Université du Littoral-Côte d'Opale, Calais, France.

This work was supported by European InterregIIIA, 182b project


This web page presents a package named GPURegression that implements a population parallel scheme for Genetic Programming where the evaluation of individuals is performed on a NVidia G80 graphics processing unit. This parallel scheme was presented at the 11th European Conference on Genetic Programming (Euro'GP 2008, Naples, Italy), and the paper can be downloaded here.

The GPURegression package is based on Sean Luke's ECJ library, it allows to benefit from the high computing power of modern parallel graphics hardware based on the Nvidia G80 graphics processors family (e.g. GeForce 8x00 graphics card series). GP individuals are evaluated in parallel on the graphics card using an interpreter written in the Cuda language, while the breeding and selection is done on the CPU in the standard ECJ framework.

On a 8800 GTX card, speedups up to 60 times faster than ECJ running on an Intel Core 2 6600 @ 2.40 GHz can be observed for regression problem, this amounts up to 770 million GP operations per second.

Announcement: A new version, more than 3 times faster (up to 2.8 billion GPop/s) with more tutorial problems, allowing larger populations, is scheduled for September 2008.

Instructions for installing GPURegression (for Unix users only, sorry) :

  1. Download and install the ECJ library, version 18.

  2. Download and install the CUDA Driver, Toolkit and SDK, as explained on the NVidia website (make sure that you get a recent driver).

  3. Download the GPURegression package and decompress it in the ECJ application directory, this will create a directory named gpuregression.

  4. Add this new application directory to the main ECJ Makefile in ECJ root directory, (typically add a line ec/app/gpuregression/*.java\ and ec/app/gpuregression/func/*.java\ under the DIRS = \ line in the Makefile) , and execute the make command, as the java classes must be generated before step 7.

  5. If you have more than one G80 card, edit the regression.cu file and change the parameter of the cudaSetDevice() call, in order to suit with the number of the graphics card that you want to target.

  6. Verify the path to the Cuda SDK in the Makefile in the gpuregression directory, and adapt the "javah" invocation to suit your configuration (the default provided is the Sun SDK "javah" syntax)

  7. Run make in the gpuregression directory to compile the ".cu" files associated to the tutorial problem into a library.

Running the tutorial

Go to the ECJ root directory and run the tutorial problem via the .params file, specifying the library path for both the Cuda runtime and the problem dependent library, e.g. with Sun SDK java:

java -Djava.library.path=/usr/local/cuda/lib/:ec/app/gpuregression -cp ./ ec.Evolve -file ec/app/gpuregression/cudaregression.params

How does it works: implementing your own problem

Known limitations/requirements:




Disclaimer : all registered brand and products name mentioned on this web page are owned by their respective proprietors.