You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@
9
9
10
10
MRISubspaceRecon.jl is a Julia package that implements sub-space reconstructions as described by [Jon Tamir et al.](https://onlinelibrary.wiley.com/doi/abs/10.1002/mrm.26102) and by us in the paper [Low-rank alternating direction method of multipliers reconstruction for MR fingerprinting](https://doi.org/10.1002/mrm.26639) as *low rank inversion*.
11
11
12
-
Currently, the package supports Cartesian and non-Cartesian trajectories on CPU, and non-Cartesian ones for NVIDIA GPUs. The package is still work in progress. The ultimate goal of this package is to provide a comprehensive Julia implementation of MRI subspace reconstructions, similar to our [Matlab package](https://bitbucket.org/asslaender/nyu_mrf_recon).
12
+
Currently, the package supports Cartesian and non-Cartesian trajectories on single- or multithreaded CPUs, as well as NVIDIA GPUs. The package is still under active development. Its ultimate goal is to provide a comprehensive Julia implementation for MRI subspace reconstructions, analagous to our [Matlab package](https://bitbucket.org/asslaender/nyu_mrf_recon).
Copy file name to clipboardExpand all lines: docs/src/index.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ CurrentModule = MRISubspaceRecon
4
4
5
5
# MRISubspaceRecon.jl
6
6
7
-
[MRISubspaceRecon.jl](https://github.com/MagneticResonanceImaging/MRISubspaceRecon.jl) package package aims to enable rapid iterative reconstruction
7
+
The [MRISubspaceRecon.jl](https://github.com/MagneticResonanceImaging/MRISubspaceRecon.jl) package aims to enable rapid iterative reconstruction
8
8
of Cartesian and non-Cartesian MRI data using subspace modeling [1,2]. Particular care is given to enable the reconstruction of large numbers of subspace coefficients along with large image grid sizes.
9
9
10
10
For compatibility with other Julia packages, such as [IterativeSolvers.jl](https://github.com/JuliaLinearAlgebra/IterativeSolvers.jl) and [RegularizedLeastSquares.jl](https://github.com/JuliaImageRecon/RegularizedLeastSquares.jl), operations are defined in terms of linear operators and their effects on the data vectors. [MRISubspaceRecon.jl](https://github.com/MagneticResonanceImaging/MRISubspaceRecon.jl) is designed to compute these objects with multi-threaded CPUs and on NVIDIA GPUs. The package further contains functions to perform GRAPPA operator gridding (GROG) [3] or to generate radial trajectories. However, all methods that require an explicit k-space trajectory as input generalize to arbitrary trajectories.
@@ -31,7 +31,7 @@ Reconstructions of non-Cartesian MRI in [MRISubspaceRecon.jl](https://github.com
31
31
using MRISubspaceRecon
32
32
using CUDA
33
33
```
34
-
We recommend using the GPU code which can be faster by a factor of 10--20 than CPU multi-threading (for typical solvers like conjugate gradient or FISTA [7]). However, a specific GPU implementation for Cartesian MRI is still under development. In this case, one can use the CPU implementation or the non-Cartesian methods.
34
+
We recommend using the GPU code which can be faster by a factor of 10--20 than CPU multi-threading (for typical solvers like conjugate gradient or FISTA [7]).
35
35
36
36
# References
37
37
1. Assländer J, et al. “Low rank alternating direction method of multipliers reconstruction for MR fingerprinting”. Magn Reson Med 79.1 (2018), pp. 83–96. https://doi.org/10.1002/mrm.26639
function MRISubspaceRecon.calculate_backprojection(data::CuArray{Tc}, trj::CuArray{<:Integer,3}, cmaps::AbstractVector{<:CuArray}; U=cu(I(size(trj)[end])), sample_mask=CUDA.ones(Bool, size(trj)[2:end])) where {Tc <:Complex}
function MRISubspaceRecon.calculate_backprojection(data::CuArray{Tc}, trj::CuArray{<:Integer,3}, img_shape; U=cu(I(size(trj)[end])), sample_mask=CUDA.ones(Bool, size(trj)[2:end])) where {Tc <:Complex}
Nrep =size(U, 3) # number of repetitions (defaults to 1)
64
+
65
+
# For complex U, we need to accumulate real and imaginary parts separately via atomics
66
+
Λ_real = CUDA.zeros(real(eltype(U)), 2, Ncoeff, Ncoeff, img_shape...) # Use a real-valued array with 2x the leading dimension to handle complex atomics
67
+
68
+
Nsamp =size(trj, 2)
69
+
Nt =size(trj, 3)
70
+
71
+
verbose &&println("calculating Cartesian kernel on GPU...")
0 commit comments