Skip to main content
. 2014 Jun 10;22(12):14871–14884. doi: 10.1364/OE.22.014871

Computation procedure of SpaRSA for a B-scan on one GPU

Input:
   yu1,,yuL # under-sampled data for each A-scan
  I or Fu # sampling mask or the sensing matrix
  η # stopping iteration number
  τ # CS regulation parameter
Output:
  (x1)η,...,(xL)η # (xi)j is the j-th iterate of the i-th A-scan
1: Initialization: set (α1)0,...,(αL)0, (x1)0,...,(xL)0
2: copy yu1,,yuL, I or Fu to GPU
3: p ← 0
4: for all j ∈ [1,...,L] do in parallel
5:      (rj)0=Fu(xj)0yuj
6: end for
7: while pη do
8:     for all j ∈ [1,...,L] do in parallel
9:      (uj)p=(xj)p(1/(αj)p)FuT(rj)p
10:     end for
11:     for all i ∈ [0,...,N − 1] and j ∈ [1,... L] do in parallel
12:        (xij)p+1=soft((uij)p,τ/(αj)p) # xij is the i-th component of xj
13:     end for
14:     for all j ∈ [1,...,L] do in parallel
15:       (sj)p+1 = (xj)p+1 − (xj)p
16:        (rj)p+1=Fu(xj)p+1yuj
17:       (αj)p+1 = ‖(rj)p+1 − (rj)p2/‖(sj)p+12
18:     end for
19:     pp + 1
20: end while
21: Finish: copy (x1)η,...,(xL)η to the host memory