Genetic Programming on the G80 GPU

by Denis Robilliard, Virginie Marion-Poty, Cyril Fonlupt

Univ. Lille Nord de France,


50 rue F. Buisson,

62100 Calais, France.

Last updated on Friday May 8th 2009

(last update may have modified the code package)

The new version package is now available: clik here to download. The accompanying paper is due to appear in the GPEM journal (you can download a draft.

The installation of the package is similar to the previous one (see below): simply uncompress the archive in the "app" directory of ECJ, this will create an "rpncuda" directory containing the program files, that you should compile. Do not forget to run make in this directory in order to build the GPU libraries.

New features:

Both these optimizations make this version about three times faster on the sextic regression benchmark, with a measured speed of 2.8 billion GP operations per second for 1024 fitness cases.

Known limitations/requirements (new/modified ones in boldface):

A last note:

The code has been tested and successfully passed several thousands GP runs notably with populations ranging from 100 to 200,000 and fitness cases ranging from 20 to 100,000 ; thus you should probably be able to run your own experiments. The authors intend to improve the code and documentation, as far as our administrative authorities will leave us some time available for research and study (i.e. don't expect too much).

Comments (if possible constructive ;-) or questions can be sent to: Denis.Robilliard at

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 40 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.

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 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.