Difference between revisions of "PhyloSoC: DIM SUM 2 GPU computing for individual based simulator of movement and demography"

From Phyloinformatics
Jump to: navigation, search
(Created page with "==Student== Peter Hoffmann ==Abstract== ==Mentors== * Kevin Savidge (primary) * [http://www.phyleauxgenetics.org/ Jeremy Brown] ==Project Plan== ===Week 1 (May 23 - May 30):=== *...")
 
Line 1: Line 1:
 +
==Abstract==
 +
DIM SUM is a population demography and individual migration simulation. The goal of the project is to use the graphics card to improve the speed of DIM SUM significantly, so it is possible to simulate scenarios with much larger populations and larger landscapes.
 
==Student==
 
==Student==
 
Peter Hoffmann
 
Peter Hoffmann
==Abstract==
 
 
==Mentors==
 
==Mentors==
 
* Kevin Savidge (primary)
 
* Kevin Savidge (primary)
Line 10: Line 11:
 
* Split populateAndMigrateThreaded into smaller function to better understand it.
 
* Split populateAndMigrateThreaded into smaller function to better understand it.
 
===Week 2 (May 30 - June 6):===
 
===Week 2 (May 30 - June 6):===
* Replace the ArrayList of PFunctions, with a data structure, which can be copied in the graphic memory.  
+
* Replace the ArrayLists of Objects in DispersalSettings, which are needed for the computations in the populateAndMigrateThreaded, with data structure, which can be copied in the graphic memory. The only acceptable data structures for CUDA are arrays of primitives. That means e.g. that all ArrayList<PFunction> must be replaced by a two dimension array for the outcomes and a two dimensional array for the probabilities.
 
===Week 3 (June 6 - June 13):===
 
===Week 3 (June 6 - June 13):===
* Replace the ArrayList of XYFunctions, with a data structure, which can be copied in the graphic memory.
+
* Start replacing the ArrayLists, which stores the generation with CUDA compatible data structures. Even thought this are only one or two ArrayLists this task might be more time consuming than the first one, because there are elements added and deleted to this data structure during the simulation and I think the GPU can't resize an array.
 
===Week 4 (June 13 - June 20):===
 
===Week 4 (June 13 - June 20):===
* Replace the ArrayLists, which stores the generation with CUDA compatible data structures.  
+
* Replace lldata with an Array, which stores the double values.
 
===Week 5 (June 20 - June 27):===
 
===Week 5 (June 20 - June 27):===
 +
* Finish replacing the ArrayLists, which stores the generation with CUDA compatible data structures.
 +
===Week 6 (June 27 - July 4):===
 
* Port the functions in XYFunction and DispersalSettings,which are needed by the migrate function, to CUDA.
 
* Port the functions in XYFunction and DispersalSettings,which are needed by the migrate function, to CUDA.
===Week 6 (June 27 - July 4):===
 
* Port the migrate function to CUDA.
 
 
===Week 7 (July 4 - July 11):===
 
===Week 7 (July 4 - July 11):===
 +
* Port the migrate function to CUDA. Even through this function is not used anymore. Porting this function to CUDA is a good preparation for porting populateAndMigrateThreaded. The parallelization of this function should be relative easy. The basic Idea is that the computation per child are independent from each other, so they can be executed in parallel. I think the only problem is that elements are removed from the children array, which can be solved by marking the elements (e.g. in a boolean array) and remove them on the CPU.
 
===Week 8 (July 11 - July 18):===
 
===Week 8 (July 11 - July 18):===
 +
* Finish to port all the functions in DispersalSettings, Pfunction and XYFunction, which are needed during the computations, to CUDA.
 
===Week 9 (July 18 - July 25):===
 
===Week 9 (July 18 - July 25):===
 +
* Port all the functions in lldata to CUDA.
 
===Week 10 (July 25 - August 1):===
 
===Week 10 (July 25 - August 1):===
 +
* Start porting the populateAndMigrateThreaded function to CUDA. The function is already parallelized. Everything which is executed in parallel in DIM SUM should now be executed on the GPU. That means that the run function in DispersalThread has to be ported to the GPU. Like with the migrate function the data structures are the main concern.
 
===Week 11 (August 1 - August 8):===
 
===Week 11 (August 1 - August 8):===
 +
* Finish porting the populateAndMigrateThreaded function to CUDA. The function is already parallelized. Everything which is executed in parallel in DIM SUM should now be executed on the GPU. That means that the run function in DispersalThread has to be ported to the GPU. Like with the migrate function the data structures are the main concern.
 
===Week 12 (August 8 - August 15):===
 
===Week 12 (August 8 - August 15):===
 +
* Bug-fixing.
 +
* Code cleanup.
 +
* Improve documentation.

Revision as of 12:31, 31 May 2011

Abstract

DIM SUM is a population demography and individual migration simulation. The goal of the project is to use the graphics card to improve the speed of DIM SUM significantly, so it is possible to simulate scenarios with much larger populations and larger landscapes.

Student

Peter Hoffmann

Mentors

Project Plan

Week 1 (May 23 - May 30):

  • Performance analysis of DIM SUM.
  • Split populateAndMigrateThreaded into smaller function to better understand it.

Week 2 (May 30 - June 6):

  • Replace the ArrayLists of Objects in DispersalSettings, which are needed for the computations in the populateAndMigrateThreaded, with data structure, which can be copied in the graphic memory. The only acceptable data structures for CUDA are arrays of primitives. That means e.g. that all ArrayList<PFunction> must be replaced by a two dimension array for the outcomes and a two dimensional array for the probabilities.

Week 3 (June 6 - June 13):

  • Start replacing the ArrayLists, which stores the generation with CUDA compatible data structures. Even thought this are only one or two ArrayLists this task might be more time consuming than the first one, because there are elements added and deleted to this data structure during the simulation and I think the GPU can't resize an array.

Week 4 (June 13 - June 20):

  • Replace lldata with an Array, which stores the double values.

Week 5 (June 20 - June 27):

  • Finish replacing the ArrayLists, which stores the generation with CUDA compatible data structures.

Week 6 (June 27 - July 4):

  • Port the functions in XYFunction and DispersalSettings,which are needed by the migrate function, to CUDA.

Week 7 (July 4 - July 11):

  • Port the migrate function to CUDA. Even through this function is not used anymore. Porting this function to CUDA is a good preparation for porting populateAndMigrateThreaded. The parallelization of this function should be relative easy. The basic Idea is that the computation per child are independent from each other, so they can be executed in parallel. I think the only problem is that elements are removed from the children array, which can be solved by marking the elements (e.g. in a boolean array) and remove them on the CPU.

Week 8 (July 11 - July 18):

  • Finish to port all the functions in DispersalSettings, Pfunction and XYFunction, which are needed during the computations, to CUDA.

Week 9 (July 18 - July 25):

  • Port all the functions in lldata to CUDA.

Week 10 (July 25 - August 1):

  • Start porting the populateAndMigrateThreaded function to CUDA. The function is already parallelized. Everything which is executed in parallel in DIM SUM should now be executed on the GPU. That means that the run function in DispersalThread has to be ported to the GPU. Like with the migrate function the data structures are the main concern.

Week 11 (August 1 - August 8):

  • Finish porting the populateAndMigrateThreaded function to CUDA. The function is already parallelized. Everything which is executed in parallel in DIM SUM should now be executed on the GPU. That means that the run function in DispersalThread has to be ported to the GPU. Like with the migrate function the data structures are the main concern.

Week 12 (August 8 - August 15):

  • Bug-fixing.
  • Code cleanup.
  • Improve documentation.