prost is a framework for solving large-scale problems with proximal structure. It contains efficient CUDA implementations of several primal-dual algorithms such as ADMM or PDHG and common proximal and linear operators.
The general class of problems that can be solved is:
where g and f* are convex functions mapping to the extended real line, whose proximal mapping is cheap to evaluate and K is a linear operator.
The other dependency is MATLAB. Interfaces to C/C++ and Python are planned for future releases.
git clone https://github.com/tum-vision/prost.git cd prost mkdir build cd build cmake .. make
To get familiar with the framework, we recommend looking at the MATLAB examples. To do so, start MATLAB and add the folder
/matlab/ to your path. Move to the folder
/matlab/examples/ and run any of the examples such as
To get an overview over the implemented proximal and linear operators look into the directories
/matlab/+prost/+block. For more information about the individual functions you can use the help command within MATLAB, e.g.,
help prost.function.sum_1d help prost.function.sum_norm2 help prost.block.diags
Troubleshooting / Hints
Tested using Apple LLVM version 7.0.2 (clang-700.1.81), CUDA 7.5 and matlab-R2015b.
For CUDA 8.0, use Apple LLVM version 7.3.0 (clang-703.0.31), Xcode 7.3.1. See also the installation guide here.
In case of the error message "No supported compiler or SDK was found.", one needs to add the line
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" />
to the clang and clang++ config files
edit ([matlabroot '/bin/maci64/mexopts/clang_maci64.xml']) edit ([matlabroot '/bin/maci64/mexopts/clang++_maci64.xml'])
Finally, run from within MATLAB
mex -setup mex -setup C++
Tested using gcc-4.8, matlab-R2016a and CUDA 7.5, as well as gcc-5.4, matlab-R2016b and CUDA 8.0.
In case of an invalid mex-file error, start MATLAB with the following preload command:
Tested using Visual Studio 2013 Community (english version) and CUDA 7.5. Run
cmake-gui and select
Visual Studio 12 2013 Win64 as generator. The following values might need to be set manually
CUDA_HOST_COMPILERto the path where
Matlab_ROOT_DIRto the MATLAB directory
Once these values have been set, run configure and generate once more in cmake. Finally, open the Visual Studio solution and compile as Release x64 and after compilation has finished build the project INSTALL in the solution, which copies the mex file to the correct directory.