diff --git a/KomaMRICore/ext/KomaAMDGPUExt.jl b/KomaMRICore/ext/KomaAMDGPUExt.jl index 635cfe155..d0b5f1350 100644 --- a/KomaMRICore/ext/KomaAMDGPUExt.jl +++ b/KomaMRICore/ext/KomaAMDGPUExt.jl @@ -9,7 +9,6 @@ KomaMRICore.isfunctional(::ROCBackend) = AMDGPU.functional() KomaMRICore.set_device!(::ROCBackend, dev_idx::Integer) = AMDGPU.device_id!(dev_idx) KomaMRICore.set_device!(::ROCBackend, dev::AMDGPU.HIPDevice) = AMDGPU.device!(dev) KomaMRICore.device_name(::ROCBackend) = AMDGPU.HIP.name(AMDGPU.device()) -@inline KomaMRICore._cis(x) = cis(x) function KomaMRICore._print_devices(::ROCBackend) devices = [ diff --git a/KomaMRICore/ext/KomaCUDAExt.jl b/KomaMRICore/ext/KomaCUDAExt.jl index b885b8bf1..cc97a0a96 100644 --- a/KomaMRICore/ext/KomaCUDAExt.jl +++ b/KomaMRICore/ext/KomaCUDAExt.jl @@ -8,7 +8,6 @@ KomaMRICore.name(::CUDABackend) = "CUDA" KomaMRICore.isfunctional(::CUDABackend) = CUDA.functional() KomaMRICore.set_device!(::CUDABackend, val) = CUDA.device!(val) KomaMRICore.device_name(::CUDABackend) = CUDA.name(CUDA.device()) -@inline KomaMRICore._cis(x) = cis(x) function KomaMRICore._print_devices(::CUDABackend) devices = [ diff --git a/KomaMRICore/ext/KomaMetalExt.jl b/KomaMRICore/ext/KomaMetalExt.jl index 4e7d50d59..9b2561169 100644 --- a/KomaMRICore/ext/KomaMetalExt.jl +++ b/KomaMRICore/ext/KomaMetalExt.jl @@ -11,7 +11,6 @@ KomaMRICore.isfunctional(::MetalBackend) = Metal.functional() KomaMRICore.set_device!(::MetalBackend, device_index::Integer) = device_index == 1 || @warn "Metal does not support multiple gpu devices. Ignoring the device setting." KomaMRICore.set_device!(::MetalBackend, dev::Metal.MTLDevice) = Metal.device!(dev) KomaMRICore.device_name(::MetalBackend) = String(Metal.current_device().name) -@inline KomaMRICore._cis(x) = cis(x) function KomaMRICore._print_devices(::MetalBackend) @info "Metal device type: $(KomaMRICore.device_name(MetalBackend()))" diff --git a/KomaMRICore/ext/KomaoneAPIExt.jl b/KomaMRICore/ext/KomaoneAPIExt.jl index e27b6cee3..644676bfc 100644 --- a/KomaMRICore/ext/KomaoneAPIExt.jl +++ b/KomaMRICore/ext/KomaoneAPIExt.jl @@ -8,7 +8,6 @@ KomaMRICore.name(::oneAPIBackend) = "oneAPI" KomaMRICore.isfunctional(::oneAPIBackend) = oneAPI.functional() KomaMRICore.set_device!(::oneAPIBackend, val) = oneAPI.device!(val) KomaMRICore.device_name(::oneAPIBackend) = oneAPI.properties(oneAPI.device()).name -@inline KomaMRICore._cis(x) = cos(x) + im * sin(x) function KomaMRICore._print_devices(::oneAPIBackend) devices = [ diff --git a/KomaMRICore/src/simulation/SimMethods/Bloch/BlochGPU.jl b/KomaMRICore/src/simulation/SimMethods/Bloch/BlochGPU.jl index 8f85dfed6..e3d10ab27 100644 --- a/KomaMRICore/src/simulation/SimMethods/Bloch/BlochGPU.jl +++ b/KomaMRICore/src/simulation/SimMethods/Bloch/BlochGPU.jl @@ -150,11 +150,11 @@ function run_spin_precession!( ϕ_ADC = @view pre.ϕ[:,seq_block.ADC_indices] if seq_block.first_ADC pre.Mxy[:,1] .= M.xy - pre.Mxy[:,2:end] .= M.xy .* exp.(-seq_block.tp_ADC' ./ p.T2) .* _cis.(ϕ_ADC) + pre.Mxy[:,2:end] .= M.xy .* exp.(-seq_block.tp_ADC' ./ p.T2) .* cis.(ϕ_ADC) #Reset Spin-State (Magnetization). Only for FlowPath outflow_spin_reset!(pre.Mxy, seq_block.tp_ADC', p.motion; seq_t=seq.t, add_t0=true) else - pre.Mxy .= M.xy .* exp.(-seq_block.tp_ADC' ./ p.T2) .* _cis.(ϕ_ADC) + pre.Mxy .= M.xy .* exp.(-seq_block.tp_ADC' ./ p.T2) .* cis.(ϕ_ADC) #Reset Spin-State (Magnetization). Only for FlowPath outflow_spin_reset!(pre.Mxy, seq_block.tp_ADC', p.motion; seq_t=seq.t) end @@ -164,7 +164,7 @@ function run_spin_precession!( #Mxy precession and relaxation, and Mz relaxation M.z .= M.z .* exp.(-seq_block.dur ./ p.T1) .+ p.ρ .* (T(1) .- exp.(-seq_block.dur ./ p.T1)) - M.xy .= M.xy .* exp.(-seq_block.dur ./ p.T2) .* _cis.(pre.ϕ[:,end]) + M.xy .= M.xy .* exp.(-seq_block.dur ./ p.T2) .* cis.(pre.ϕ[:,end]) #Reset Spin-State (Magnetization). Only for FlowPath outflow_spin_reset!(M, seq.t', p.motion; replace_by=p.ρ) diff --git a/KomaMRICore/src/simulation/SimMethods/Bloch/KernelFunctions.jl b/KomaMRICore/src/simulation/SimMethods/Bloch/KernelFunctions.jl index 1f425ba38..a3e82e513 100644 --- a/KomaMRICore/src/simulation/SimMethods/Bloch/KernelFunctions.jl +++ b/KomaMRICore/src/simulation/SimMethods/Bloch/KernelFunctions.jl @@ -28,8 +28,7 @@ using KernelAbstractions: @kernel, @Const, @index, @uniform, @groupsize, @localm @inbounds s_ρ[i_l] = ρ[i_g] @inbounds for t = 1 : N_Δt - sin_φ = sin(φ[i_g, t]) #TO-DO: use sincos once oneAPI releases version with https://github.com/JuliaGPU/oneAPI.jl/commit/260a4dda0ea223dbf0893de7b4a13d994ae27bd1 - cos_φ = cos(φ[i_g, t]) + sin_φ, cos_φ = sincos(φ[i_g, t]) s_α_r[i_l] = cos_φ if (iszero(B[i_g, t])) s_α_i[i_l] = -(Bz[i_g, t] / (B[i_g, t] + eps(T))) * sin_φ diff --git a/KomaMRICore/src/simulation/SimMethods/BlochDict/BlochDict.jl b/KomaMRICore/src/simulation/SimMethods/BlochDict/BlochDict.jl index 58afbcb1b..2c0668d48 100644 --- a/KomaMRICore/src/simulation/SimMethods/BlochDict/BlochDict.jl +++ b/KomaMRICore/src/simulation/SimMethods/BlochDict/BlochDict.jl @@ -52,7 +52,7 @@ function run_spin_precession!( #Mxy precession and relaxation, and Mz relaxation tp = cumsum(seq.Δt) # t' = t - t0 dur = sum(seq.Δt) # Total length, used for signal relaxation - Mxy = [M.xy M.xy .* exp.(-tp' ./ p.T2) .* (cos.(ϕ) .+ im .* sin.(ϕ))] #This assumes Δw and T2 are constant in time + Mxy = [M.xy M.xy .* exp.(-tp' ./ p.T2) .* cis.(ϕ)] #This assumes Δw and T2 are constant in time M.xy .= Mxy[:, end] #Reset Spin-State (Magnetization). Only for FlowPath outflow_spin_reset!(Mxy, seq.t', p.motion) diff --git a/KomaMRICore/src/simulation/SimMethods/BlochSimple/BlochSimple.jl b/KomaMRICore/src/simulation/SimMethods/BlochSimple/BlochSimple.jl index d754d389a..465d5b8aa 100644 --- a/KomaMRICore/src/simulation/SimMethods/BlochSimple/BlochSimple.jl +++ b/KomaMRICore/src/simulation/SimMethods/BlochSimple/BlochSimple.jl @@ -44,7 +44,7 @@ function run_spin_precession!( #Mxy precession and relaxation, and Mz relaxation tp = cumsum(seq.Δt) # t' = t - t0 dur = sum(seq.Δt) # Total length, used for signal relaxation - Mxy = [M.xy M.xy .* exp.(-tp' ./ p.T2) .* (cos.(ϕ) .+ im .* sin.(ϕ))] #This assumes Δw and T2 are constant in time + Mxy = [M.xy M.xy .* exp.(-tp' ./ p.T2) .* cis.(ϕ)] #This assumes Δw and T2 are constant in time M.xy .= Mxy[:, end] M.z .= M.z .* exp.(-dur ./ p.T1) .+ p.ρ .* (1 .- exp.(-dur ./ p.T1)) #Reset Spin-State (Magnetization). Only for FlowPath