LPG: Linear Programming on GPUs


Project contains:

  • libLPG - library that contains functions to solve linear programmes using a CPU or GPGPU.
  • LPG - a command-line based interface to the libLPG solver [not implemented yet!]
  • libOsiLPG - an Open Solver Interface library to allow COIN-OR projects to use LPG as their LP solver.

Project file structure

  • BuildTools [taken from the COIN-OR BuildTools SVN]
  • CoinUtils [taken from the COIN-ORCoinUtils SVN]
  • libLPG
    • kernel [the OpenCL kernels used by libLPG]
    • src [the C++ files and headers used by libLPG]
    • MSVisualStudio [the solution/project file for libLPG]
  • libOsiLPG
    • MSVisualStudio [the solution/project file for libOsiLPG]
    • src [the C++ files and headers used by libOsiLPG]

Project status

Done before 24th January

  • Solve LPs in single and double precision on CPU (dense A matrix, standard computational form)
  • Solve LPs in single precision on GPU (dense A, SCF)
  • Solve LPs with CBC


  • Implement all functions required for CBC to solve IPs using LPG - Abandoned for now, may try again on Symphony
  • Write code to take any problem and convert to SCF - Done 26th Jan, except it leaves bounds on variables
  • Enhance solvers to accept bounds on columns - WORKING ON NOW
  • Make solvers that can handle sparsity
  • Write the CLI for LPG - Done 27th Jan
  • Compress single/dbl cpu solver into one file using preprocessor defines - Done 24th Jan

Firing up CBC with LPG (on Windows, VS2008)

These instructions will help you compile a simple example that uses CBC:

  1. Download CBC from its SVN repository
  2. Download LPG from...!
  3. Open the \Cbc\MSVisualStudio\v9\Cbc.sln solution file
  4. Add the libLPG and libOsiLPG projects to the solution
  5. Add a new empty project, call it cbcExampleMin
  6. Add \Cbc\examples\minimum.cpp to the new project
  7. Set cbcExampleMin as the Start Up project (right click on the project name, pick from menu)
  8. Set cbcExampleMin's dependecies to be:
    1. libCbc
    2. libCoinUtils
    3. libLPG
    4. libOsi
    5. libOsiCBC
    6. libOsiLPG
    7. libClp [needed for CBC, could probably be removed with correct config]
    8. libOsiClp [needed for CBC, could probably be removed with correct config]
    9. libCgl [needed for CBC]
  9. Set project properties -> C/C++ -> Code Generation -> Runtime library to /MTd
  10. Set the project to look in the following folders for includes:
    1. \Cbc\src
    2. \CoinUtils\src
    3. \BuildTools\headers
    4. \Osi\src
    5. LPG (wherever it is)\libOsiLPG\src
  11. Change the line:
    1. #include "OsiClpSolverInterface.hpp"
    2. to
    3. #include "OsiLpgSolverInterface.hpp"
  12. Change the line:
    1. OsiClpSolverInterface solver1;
    2. to
    3. OsiLpgSolverInterface solver1;
Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng lpg2.png r1 manage 11.0 K 2011-01-24 - 21:36 IainDunning  
Edit | Attach | Watch | Print version | History: r6 < r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r6 - 2012-01-14 - TWikiAdminUser
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback