I'm a little late to the party, but the short answer is that yes it's possible to parallelize an interior point method for GPUs, but whether or not that is successful depends on the structure of the problem. In terms of existing software, Optizelle can do it. Grab the development branch until a new release occurs in the near future.
The situations differ slightly depending on whether or not the original problem contains equalities or inequalities. There's a variety of ways to do this, but, in my opinion, the best way to do this for problems with only inequalities constraints is using an inexact trust-region method Newton method combined with an primal dual interior point method.
For inequalities only, the basic inexact trust-region Newton method can be found in Nocedal and Wright's Numerical Optimization on page 171 or on Conn, Gould, and Toint's Trust-Region Methods on page 205. This algorithm can be combined successfully with a primal-dual interior point method by essentially using the modified truncated-CG method from page 890 of the paper An Interior Point Method for Large-Scale Nonlinear Programming by Byrd, Hribar, and Nocedal. Personally, I don't like how they setup their interior point system, so I wouldn't use their interior point formulation, but that's preference. NITRO is a good algorithm. As far as the interior point details, Optizelle's manual explains how to do this in its manual. I probably ought to post an updated manual, but the development branch is current.
For the case with both inequality and equality constraints, I believe the best algorithm is combining the inexact trust-region composite-step SQP method from Heinkenschoss and Ridzal in a paper titled A Matrix-Free Trust-Region SQP Method for Equality Constrained Optimization. Basically, the process of tacking on an interior point method works pretty much the same as the unconstrained case except that the quasinormal step needs to be safeguarded as well.
As far as the parallelization opportunities, the algorithms I reference above work well because these algorithms can be implemented matrix-free. Specifically, Optizelle's implementation for the problem
$\min\limits_{x\in X}\{ f(x) : g(x)=0, h(x)\geq 0\}$
Requires that the user provide an implementation for
$f(x), \nabla f(x), \nabla^2 f(x)\partial x$
$g(x), g^\prime(x)\partial x, g^\prime(x)^*\partial y, (g^{\prime\prime}(x)\partial x)^* \partial y$
$h(x), h^\prime(x)\partial x, h^\prime(x)^*\partial y, (h^{\prime\prime}(x)\partial x)^* \partial y$
It doesn't care where these implementations come from or how their parallelized. They can be done in shared memory, distributed memory, or GPUs. It does not matter. What works best for a particular problem, depends on the structure. In addition, it requires the user to provide linear algebra for
init: Memory allocation and size setting
copy: y <- x (Shallow. No memory allocation.)
scal: x <- alpha * x
axpy: y <- alpha * x + y
innr: innr <- <x,y>
zero: x <- 0
rand: x <- random
prod: Jordan product, z <- x o y
id: Identity element, x <- e such that x o e = x
linv: Jordan product inverse, z <- inv(L(x)) y where L(x) y = x o y
barr: Barrier function, barr <- barr(x) where x o grad barr(x) = e
srch: Line search, srch <- argmax {alpha \in Real >= 0 : alpha x + y >= 0} where y > 0
symm: Symmetrization, x <- symm(x) such that L(symm(x)) is a symmetric operator
These operations can be done in serial, parallel, distributed memory, shared memory, or on GPUs. It does not matter. What's best depends on the problem structure.
Finally, there's the linear systems and there are three that can be provided:
- Preconditioner for $\nabla^2 f(x)$
- Left preconditioner for $g^\prime(x)g^\prime(x)^*$
- Right preconditioner for $g^\prime(x)g^\prime(x)^*$
Each of these preconditioners can be implemented in either serial or parallel, distributed memory or shared, or on GPUs. Basically, the first preconditioner is the preconditioner for the truncated-CG system associated with the optimalitity systems. The last two preconditioners are used for the augmented system solves associated with the composite step SQP algorithm. In general, this is where you're going to get your biggest performance boost. Imagine if the constraint $g$ represented some kind of PDE. Then, the preconditioner for $g^\prime(x)g^\prime(x)^*$ corresponds to a forward PDE solve followed by an adjoint PDE solve. Note, if they were square, $(g^\prime(x)g^\prime(x)^*)^{-1}=g^\prime(x)^{-*}g^\prime(x)^{-1}$. For a huge number of PDE formulations, such as finite difference methods with explicit time integrators, these solves can be very well parallelized on a GPU.
Finally, the algorithms in Optizelle do work on symmetric cone problems, which include bound, second-order cone, and semidefinite constraints. Nevertheless, in general, the linear cone solves will tend to out perform it. Basically, linear cone solves can reduce the feasibility and optimality solves done to a really compact system that can be Choleski factored. Since Optizelle works with nonlinear systems, it can't really do that. At least, I don't know how. On top of that, there are restrictions on the size of the SDP blocks that Optizelle can handle. The operator linv
above requires the inverse of the SDP matrices and that inverse is really expensive for large blocks. In addition, there's an extra safe guard that requires a Choleski factorization. These factorizations don't really parallelize well on a GPU. At least, I don't know of an implementation that does parallelize well. Anyway, the bottom line is that if it's a linear cone program, use a linear cone solver like CSDP or SDPT3.
TLDR; Use Optizelle. It's free, open source, and BSD licensed. I've scaled it to something like half a billion variables and it worked fine. I've run it with GPUs and it worked fine. Whether or not it works well with a GPU depends on whether or not the operations above parallelize well on a GPU.