Skip to content
Snippets Groups Projects
Commit 4d995a0a authored by Nicola Vigano's avatar Nicola Vigano
Browse files

6D-Reconstruction: pass number of threads to operations

parent 219176d4
No related branches found
No related tags found
No related merge requests found
......@@ -173,12 +173,12 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
self.statistics.add_timestamp(timing_sb, 'cp_dual_update_detector', 'cp_dual_detector_SB');
proj_bls = self.apply_psf(proj_bls);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_detector');
% Computing update dual l1
self.statistics.tic('cp_dual_update_l1');
q = gt6DUpdateDualL1(q, nextEnhancedSolution, lambda, self.algo_ops_c_functions);
q = gt6DUpdateDualL1(q, nextEnhancedSolution, lambda, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_l1');
self.statistics.tic('cp_primal_update');
......@@ -193,7 +193,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
timing_bs = timing_bs + bs_time;
[self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
= gt6DUpdatePrimal(self.currentSolution{n}, v, q{n}, tau{n}, self.algo_ops_c_functions);
= gt6DUpdatePrimal(self.currentSolution{n}, v, q{n}, tau{n}, self.algo_ops_c_functions, self.num_threads);
timing_app = timing_app + app_time;
clear v
end
......@@ -283,7 +283,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
self.statistics.add_timestamp(timing_sb, 'cp_dual_update_detector', 'cp_dual_detector_SB');
proj_bls = self.apply_psf(proj_bls);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_detector');
self.statistics.tic('cp_primal_update');
......@@ -298,7 +298,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
timing_bs = timing_bs + bs_time;
[self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
= gt6DUpdatePrimal(self.currentSolution{n}, v, q, tau{n}, self.algo_ops_c_functions);
= gt6DUpdatePrimal(self.currentSolution{n}, v, q, tau{n}, self.algo_ops_c_functions, self.num_threads);
timing_app = timing_app + app_time;
clear v
end
......@@ -388,12 +388,12 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
self.statistics.add_timestamp(timing_sb, 'cp_dual_update_detector', 'cp_dual_detector_SB');
proj_bls = self.apply_psf(proj_bls);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_detector');
% Computing update dual TV
self.statistics.tic('cp_dual_update_tv');
[divq, q] = gt6DUpdateDualTV(q, nextEnhancedSolution, 1, self.algo_ops_c_functions);
[divq, q] = gt6DUpdateDualTV(q, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_tv');
% Computing update primal
......@@ -409,7 +409,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
timing_bs = timing_bs + bs_time;
[self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
= gt6DUpdatePrimal(self.currentSolution{n}, v, -divq, tau{n}, self.algo_ops_c_functions);
= gt6DUpdatePrimal(self.currentSolution{n}, v, -divq, tau{n}, self.algo_ops_c_functions, self.num_threads);
timing_app = timing_app + app_time;
clear v
end
......@@ -500,17 +500,17 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
self.statistics.add_timestamp(timing_sb, 'cp_dual_update_detector', 'cp_dual_detector_SB');
proj_bls = self.apply_psf(proj_bls);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions);
p = gt6DUpdateDualDetector(p, self.blobs, proj_bls, sigma1, sigma1_1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_detector');
% Computing update dual TV
self.statistics.tic('cp_dual_update_tv');
[div_tv, q_tv] = gt6DUpdateDualTV(q_tv, nextEnhancedSolution, 1, self.algo_ops_c_functions);
[div_tv, q_tv] = gt6DUpdateDualTV(q_tv, nextEnhancedSolution, 1, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_tv');
% Computing update dual l1
self.statistics.tic('cp_dual_update_l1');
q_l1 = gt6DUpdateDualL1(q_l1, nextEnhancedSolution, lambda, self.algo_ops_c_functions);
q_l1 = gt6DUpdateDualL1(q_l1, nextEnhancedSolution, lambda, self.algo_ops_c_functions, self.num_threads);
self.statistics.toc('cp_dual_update_l1');
% Computing update primal
......@@ -526,7 +526,7 @@ classdef Gt6DBlobReconstructor < Gt6DVolumeToBlobProjector
timing_bs = timing_bs + bs_time;
[self.currentSolution{n}, nextEnhancedSolution{n}, app_time] ...
= gt6DUpdatePrimal(self.currentSolution{n}, v, q_l1{n}-div_tv, tau{n}, self.algo_ops_c_functions);
= gt6DUpdatePrimal(self.currentSolution{n}, v, q_l1{n}-div_tv, tau{n}, self.algo_ops_c_functions, self.num_threads);
timing_app = timing_app + app_time;
clear v
end
......
function p = gt6DUpdateDualDetector(p, bls, proj_bls, sigma1, sigma1_1, use_c_function)
function p = gt6DUpdateDualDetector(p, bls, proj_bls, sigma1, sigma1_1, use_c_function, num_threads)
% function p = gt6DUpdateDualDetector(p, bls, proj_bls, sigma1, sigma1_1, [use_c_function])
%
if (~exist('use_c_function', 'var'))
use_c_function = true;
end
if (~exist('num_threads', 'var'))
num_threads = 1;
end
if (use_c_function)
p = gt6DUpdateDualDetector_c(p, bls, proj_bls, sigma1, sigma1_1);
p = gt6DUpdateDualDetector_c(p, bls, proj_bls, sigma1, sigma1_1, num_threads);
% % Or equivalently
% proj_bls = internal_cell_sub_assign(proj_bls, bls);
......
function q = gt6DUpdateDualL1(q, new_enh_sol, lambda, use_c_function)
function q = gt6DUpdateDualL1(q, new_enh_sol, lambda, use_c_function, num_threads)
% function q = gt6DUpdateDualL1(q, new_enh_sol, lambda, use_c_function)
%
if (~exist('use_c_function', 'var'))
use_c_function = true;
end
if (~exist('num_threads', 'var'))
num_threads = 1;
end
if (use_c_function)
q = gt6DUpdateDualL1_c(q, new_enh_sol, lambda);
q = gt6DUpdateDualL1_c(q, new_enh_sol, lambda, num_threads);
else
num_vols = numel(q);
for n = 1:num_vols
......
function [divq, q] = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function)
function [divq, q] = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function, num_threads)
% function q = gt6DUpdateDualTV(q, new_enh_sol, lambda, use_c_function)
%
if (~exist('use_c_function', 'var'))
use_c_function = true;
end
if (~exist('num_threads', 'var'))
num_threads = 1;
end
sES = gtMathsSumCellVolumes(new_enh_sol) / (6 * numel(new_enh_sol));
dsES = gtMathsGradient(sES);
if (use_c_function)
q = gt6DUpdateDualTV_c(q, dsES, lambda);
q = gt6DUpdateDualTV_c(q, dsES, lambda, num_threads);
else
for n = 1:numel(q)
q{n} = q{n} + dsES{n};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment