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 <[email protected]> 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.
>