Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 3ffb44d8 authored by hhakim's avatar hhakim
Browse files

Make verbose mode available for hierarchical2020 (cpp core and py/matfaust wrappers).

parent 9d591246
Branches
Tags
No related merge requests found
......@@ -163,7 +163,7 @@ int main(int argc, char* argv[])
// parameter setting
Faust::Params<FPP,Cpu,FPP2> params;
init_params_from_matiofile<FPP,Cpu,FPP2>(params,configFilename.c_str(),"params");
params.Display();
// params.Display();
// matrix to be factorized
Faust::MatDense<FPP,Cpu> matrix, imatrix;
......@@ -181,7 +181,8 @@ int main(int argc, char* argv[])
vector<Faust::StoppingCriterion<Real<FPP>>> sc = {200,200};
Real<FPP> lambda;
auto th = Faust::hierarchical(matrix, sc, fac_cons, res_cons, lambda, params.isUpdateWayR2L,
params.isFactSideLeft, /*use_csr */ true, /*packing_RL default to true*/true);
params.isFactSideLeft, /*use_csr */ true, /*packing_RL default to true*/true,
/* compute_norms_on_arrays */false, FAUST_PRECISION, FAUST_NORM2_MAX_ITER, /* is_verbose default to false */ true);
cout << "lambda=" << lambda << endl;
th->multiply(lambda);
th->display();
......
......@@ -14,7 +14,37 @@ namespace Faust
const bool use_csr=true, const bool packing_RL=true,
const bool compute_2norm_on_array=false,
const Real<FPP> norm2_threshold=FAUST_PRECISION,
const unsigned int norm2_max_iter=FAUST_NORM2_MAX_ITER);
const unsigned int norm2_max_iter=FAUST_NORM2_MAX_ITER,
const bool is_verbose=false);
}
// this macro is only for hierarchical
#define DISPLAY_PARAMS() \
if(is_verbose)\
{\
std::cout << "Faust::hierarchical2020 parameters:" << endl;\
std::cout << "nfacts: " << fac_constraints.size()+1 << endl;\
std::cout << "verbose: " << is_verbose << endl;\
std::cout << "updateway R2L: " << is_update_way_R2L << endl;\
std::cout << "init_lambda: " << lambda << endl;\
std::cout << "is_fact_side_left: " << is_fact_side_left << endl;\
std::cout << "stop_crit_2facts: " << sc[0].get_crit() << endl;\
std::cout << "stop_crit_global: " << sc[1].get_crit() << endl;\
std::cout << "norm2_threshold: " << norm2_threshold << endl;\
std::cout << "norm2_max_iter: " << norm2_max_iter << endl;\
std::cout << "packing_RL:" << packing_RL << endl;\
std::cout << "use_csr:" << use_csr << endl;\
std::cout << "constraints: " << fac_constraints.size() << endl;\
cout << "FACTORS:" << endl;\
for(int i=0;i<fac_constraints.size();i++)\
fac_constraints[i]->Display();\
cout << "RESIDUUMS:" << endl;\
for(int i=0;i<res_constraints.size();i++)\
res_constraints[i]->Display();\
}
// std::cout << "is_constant_step_size: " << is_constant_step_size << endl;\
// std::cout << "step_size: " << step_size << endl;\
#include "faust_hierarchical.hpp"
#endif
......@@ -9,7 +9,7 @@ Faust::TransformHelper<FPP,DEVICE>* Faust::hierarchical(const Faust::MatDense<FP
const bool use_csr, const bool packing_RL,
const bool compute_2norm_on_array,
const Real<FPP> norm2_threshold,
const unsigned int norm2_max_iter)
const unsigned int norm2_max_iter, const bool is_verbose)
{
auto S = new Faust::TransformHelper<FPP,DEVICE>(); // A is copied
S->push_back(&A);
......@@ -20,13 +20,10 @@ Faust::TransformHelper<FPP,DEVICE>* Faust::hierarchical(const Faust::MatDense<FP
Faust::MatSparse<FPP,DEVICE> * tmp_sparse;
std::vector<Faust::MatGeneric<FPP,DEVICE>*> Si_vec;
std::vector<Faust::ConstraintGeneric*> Si_cons;
Real<FPP> lambda_ = 1;
Real<FPP> lambda_ = lambda;
Real<FPP> glo_lambda = 1;
if(sc.size() < 2) throw runtime_error("Faust::hierarchical() needs 2 StoppingCriterion objects (for local and global opt.)");
// std::cout << "Faust::hierarchical sc[0] =" << sc[0].get_crit() << std::endl;
// std::cout << "Faust::hierarchical sc[1] =" << sc[1].get_crit() << std::endl;
// std::cout << "Faust::hierarchical packing_RL =" << packing_RL << " use_csr=" << use_csr << std::endl;
// std::cout << "Faust::hierarchical norm2_max_iter=" << norm2_max_iter << " norm2_threshold=" << norm2_threshold << std::endl;
DISPLAY_PARAMS();
for(int i=0;i < fac_constraints.size();i++)
{
cout << "Faust::hierarchical: " << i+1 << endl;
......
......@@ -89,7 +89,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
auto *params = mxArray2FaustParams<SCALAR,FPP2>(matlab_params);
FPP2 lambda;
FPP2 lambda = params->init_lambda;
try{
//DisplayParams(params);
......@@ -101,7 +101,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
// cout << "params->norm2_threshold=" << params->norm2_threshold << endl;
bool compute_2norm_on_arrays = false;
std::vector<Faust::StoppingCriterion<Real<SCALAR>>> sc = {params->stop_crit_2facts.get_crit(), params->stop_crit_global.get_crit()};
auto th = Faust::hierarchical(matrix, sc, fac_cons, res_cons, lambda, params->isUpdateWayR2L, params->isFactSideLeft, params->use_csr, params->packing_RL, compute_2norm_on_arrays, params->norm2_threshold, params->norm2_max_iter);
auto th = Faust::hierarchical(matrix, sc, fac_cons, res_cons, lambda, params->isUpdateWayR2L, params->isFactSideLeft, params->use_csr, params->packing_RL, compute_2norm_on_arrays, params->norm2_threshold, params->norm2_max_iter, params->isVerbose);
auto th_times_lambda = th->multiply(lambda);
delete th;
......
......@@ -218,7 +218,9 @@ cdef extern from "FaustFact.h":
is_update_way_R2L, bool
is_fact_side_left, bool
use_csr, bool packing_RL,
unsigned int norm2_max_iter, double norm2_threshold)
unsigned int norm2_max_iter,
double norm2_threshold, bool
is_verbose)
cdef extern from "FaustFactGivensFGFT.h":
......
......@@ -137,7 +137,7 @@ template<typename FPP, typename FPP2>
FaustCoreCpp<FPP>* fact_hierarchical_fft(FPP* U, FPP* L, unsigned int num_rows, unsigned int num_cols, PyxParamsHierarchicalFactFFT<FPP, FPP2>* p, FPP* out_lambda_D);
template<typename FPP>
FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned int num_cols, /*unsigned int nites*/ PyxStoppingCriterion<double>* sc, PyxConstraintGeneric** constraints, unsigned int num_cons, unsigned int num_facts, double* out_buf, bool is_update_way_R2L, bool is_fact_side_left, bool use_csr, bool packing_RL, unsigned int norm2_max_iter, double norm2_threshold);
FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned int num_cols, /*unsigned int nites*/ PyxStoppingCriterion<double>* sc, PyxConstraintGeneric** constraints, unsigned int num_cons, unsigned int num_facts, double* out_buf, bool is_update_way_R2L, bool is_fact_side_left, bool use_csr, bool packing_RL, unsigned int norm2_max_iter, double norm2_threshold, bool is_verbose);
#include "FaustFact.hpp"
......
......@@ -487,7 +487,7 @@ FaustCoreCpp<FPP>* fact_hierarchical_gen(FPP* mat, FPP* mat2, unsigned int num_r
}
template<typename FPP>
FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned int num_cols, /* unsigned int nites*/PyxStoppingCriterion<double>* sc, PyxConstraintGeneric** constraints, unsigned int num_cons, unsigned int num_facts, double* inout_lambda, bool is_update_way_R2L, bool is_fact_side_left, bool use_csr, bool packing_RL, unsigned int norm2_max_iter, double norm2_threshold)
FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned int num_cols, /* unsigned int nites*/PyxStoppingCriterion<double>* sc, PyxConstraintGeneric** constraints, unsigned int num_cons, unsigned int num_facts, double* inout_lambda, bool is_update_way_R2L, bool is_fact_side_left, bool use_csr, bool packing_RL, unsigned int norm2_max_iter, double norm2_threshold, bool is_verbose)
{
FaustCoreCpp<FPP>* core = nullptr;
Faust::MatDense<FPP,Cpu> inMat(mat, num_rows, num_cols);
......@@ -501,31 +501,30 @@ FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned in
PyxConstraintInt* cons_int;
PyxConstraintScalar<double>* cons_real;
PyxConstraintMat<FPP>* cons_mat;
bool is_verbose = false; // TODO: should be an argument
for(int i=0; i < num_cons;i++)
{
// corresponding object
if(constraints[i]->is_int_constraint())
{
cons_int = static_cast<PyxConstraintInt*>(constraints[i]);
if(is_verbose)
cout << "constraint[" << i << "]->parameter: " << cons_int->parameter << endl;
// if(is_verbose)
// cout << "constraint[" << i << "]->parameter: " << cons_int->parameter << endl;
tmp_cons = new Faust::ConstraintInt<FPP,Cpu>(static_cast<faust_constraint_name>(constraints[i]->name), cons_int->parameter, constraints[i]->num_rows, constraints[i]->num_cols);
cons.push_back(tmp_cons);
}
else if(constraints[i]->is_real_constraint())
{
cons_real = static_cast<PyxConstraintScalar<double>*>(constraints[i]);
if(is_verbose)
cout << "constraint[" << i << "]->parameter: " << cons_real->parameter << endl;
// if(is_verbose)
// cout << "constraint[" << i << "]->parameter: " << cons_real->parameter << endl;
tmp_cons = new Faust::ConstraintFPP<FPP,Cpu,double>(static_cast<faust_constraint_name>(constraints[i]->name), cons_real->parameter, constraints[i]->num_rows, constraints[i]->num_cols);
cons.push_back(tmp_cons);
}
else if(constraints[i]->is_mat_constraint())
{
cons_mat = static_cast<PyxConstraintMat<FPP>*>(constraints[i]);
if(is_verbose)
cout << "constraint[" << i << "]->parameter: " << cons_mat->parameter[0] << endl;
// if(is_verbose)
// cout << "constraint[" << i << "]->parameter: " << cons_mat->parameter[0] << endl;
Faust::MatDense<FPP, Cpu> P;
if(constraints[i]->num_rows * constraints[i]->num_cols == cons_mat->parameter_sz)
P = Faust::MatDense<FPP, Cpu>(cons_mat->parameter, constraints[i]->num_rows, constraints[i]->num_cols);
......@@ -558,7 +557,7 @@ FaustCoreCpp<FPP>* hierarchical2020(FPP* mat, unsigned int num_rows, unsigned in
packing_RL,
/* compute_2norm_on_array*/ false,
norm2_threshold,
norm2_max_iter);
norm2_max_iter, is_verbose);
th_times_lambda = th->multiply(inout_lambda[0]);
delete th;
th = th_times_lambda;
......
......@@ -2006,7 +2006,6 @@ cdef class FaustFact:
packing_RL = p.packing_RL
norm2_max_iter = p.norm2_max_iter
norm2_threshold = p.norm2_threshold
nites = p.stop_crits[0].num_its
cdef PyxStoppingCriterion[double]* cpp_stop_crits
cpp_stop_crits = <PyxStoppingCriterion[double]*>\
PyMem_Malloc(sizeof(PyxStoppingCriterion[double])*2)
......@@ -2027,6 +2026,7 @@ cdef class FaustFact:
" complex matrices.")
# store only lambda as a return from Palm4MSA algo
_out_buf = np.array([0], dtype=M.dtype)
_out_buf[0] = p.init_lambda;
Mview=M
outbufview = _out_buf
......@@ -2072,7 +2072,6 @@ cdef class FaustFact:
core.core_faust_dbl = \
FaustCoreCy.hierarchical2020[double](&Mview[0,0], M_num_rows,
M_num_cols,
#nites,
cpp_stop_crits,
cpp_constraints,
num_constraints,
......@@ -2082,7 +2081,8 @@ cdef class FaustFact:
is_fact_side_left,
use_csr, packing_RL,
norm2_max_iter,
norm2_threshold)
norm2_threshold,
p.is_verbose)
core._isReal = True
for i in range(0,num_constraints):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment