Boris,

     There is nothing obviously wrong with what you outline, so let's dive down 
into the code with the debugger and see what is happening.

PetscSetMKL_PARDISOThreads() set from options is called when the command line 
option is provided, and this calls 

PETSC_EXTERN void PetscSetMKL_PARDISOThreads(int threads)
{
  mkl_domain_set_num_threads(threads, MKL_DOMAIN_PARDISO);
}

so in the debugger can you check that mkl_domain_set_num_threads() gets called 
with your requested number of threads?

BTW: Since you are hardwiring the use of Pardiso in the code with function 
calls you couldsimply call PetscSetMKL_PARDISOThreads() directly
after your line of code

PCFactorSetMatSolverType(subPc, MATSOLVERMKL_PARDISO);       set solver for LU

instead of feeding it in through the options database.

Let us know how this turns out

  Barry





> On Sep 27, 2024, at 7:24 AM, Voinov, Boris <boris.voi...@intel.com> wrote:
> 
> Hello,
>  
> Could you please help me to figure out what’s wrong with the way I’m trying 
> to make mkl pardiso use the number of threads more than one while setting it 
> as a sub PC solver for ASM preconditioner.
> Here is how I do this
> Loop over block PCs {
>   PCSetType(subPc, PCLU);             set subPC type
>   PCFactorSetMatSolverType(subPc, MATSOLVERMKL_PARDISO);       set solver for 
> LU
>   SetPardisoParams("pardiso");      set mkl related options including 
> -mat_mkl_pardiso_65 equal to the desired #threads; return code after 
> PetscOptionsSetValue is ok, so I presume the option is set correctly. 
>   PCSetFromOptions(subPc);
> }
>  
> Then what I see under the debugger
> PCSetUp after a series of calls gets to MatLUFactorSymbolic_AIJMKL_PARDISO 
> which in turn calls MatSetFromOptions_MKL_PARDISO(F, A) and there
> in these lines it seems to ignore what I’ve set for -mat_mkl_pardiso_65 and 
> sets #threads to the default 1
> PetscCall(PetscOptionsInt("-mat_mkl_pardiso_65", "Suggested number of threads 
> to use within PARDISO", "None", threads, &threads, &flg));
> if (flg) PetscSetMKL_PARDISOThreads((int)threads);
>  
> This is about petsc-3.20.
> PS when I do this in a standalone code which reads a matrix and solves the 
> linear system and set -mat_mkl_pardiso_65 in the command line it’s all right 
> but I need the number of threads to be set in other way in my code.
>  
> Thank you and best regards,
> Boris
>  
> -------------------------------------------------------------
> Intel Ireland Limited (Branch)
> Collinstown Industrial Park, Leixlip, County Kildare, Ireland
> Registered Number: E902934
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 

Reply via email to