![]() |
CellGPU
0.8.0
GPU-accelerated simulations of cells
|
Contributions are welcomed via pull requests on the repository homepage! Before beginning work and submitting a pull request, please contact the lead developer (currently Daniel Sussman) to see if your intended feature is under development by anyone else at the moment and to make sure your plans match up well with the existing code base.
The developers are actively thinking about or interested in adding the following features. If you are interested in contributing to any of these development branches please contact the lead developer! Please also see the public gitlab cellGPU page for more detailed issues
New, widely applicable features are favored over the creation of niche code. For example, introducing entirely new boundary conditions would be a much stronger submission than adding a slight modification of an existing energy functional. All code should have a functioning CPU- only branch as well as a GPU-accelerated branch, and the user should be able to select either branch at will.
Pull requests that introduce new, external dependencies for compilation and execution are disfavored, but will be considered if the new feature is sufficiently general.
Code should be written in a style consistent with the existing code base. As a brief summary, the Whitesmith indentation style should be used, and 4 spaces, and not tabs, should be used to indent lines. A soft maximum line length of 120 characters should be used, with very long lines of code broken at some natural point.
Variable names should be descriptive; prefer lower camelCase names to using other delimiters. When using ArrayHandles stick to the h_variableName and d_variableName convention for accessing GPUArrays on either the host or device.
Every class, member, function, etc., should be documented with doxygen comments.
This repository currently follows a simple structure. The main executables, Vertex.cpp and voronoi.cpp are in the base directory and can be used to reproduce timing information. Other example files are in examples/ headers and .cu/.cpp files are in inc/ and src/ directories, respectively, with a subdirectory structure for updaters, models, utilities, analysis, and database creators. Object files get compiled in the obj/ directory. A simple makefile is used to compile everything and all cpp files in the root directory.
There is always a tension between optimizing performance of the program and easy code readability. Since we are going to the trouble of writing the first GPU-accelerated code, this project errs on the side of optimizations, in particular with regard to very flat data structures, while still trying to maintain an OO-perspective for code growth and maintainability. In costly functions unexpected optimizations are allowed, but a straightforward and less optimized function that does the same thing should be provided for testing and debugging. Once the optimized functions are thoroughly vetted, the unoptimized code paths can be relegated to in-code documentation.