I am currently working with PARDISO to solve an iterative process that uses complex numbers; the iterative process requires that the sparse matrix be factorized only once (i.e. phase 12). My concern is about the parameters that can make the routine as efficient and fast as possible. The sparse matrix is symmetric but I receive the zero-based CSC vectors for the full matrix, so I’m using mtype 13; I’m not really sure whether it would benefit me to convert the matrix to an upper triangular representation, considering that I would have to analyze the full CSC format and get the new vectors.
The parameters I’m using are (the rest are all zeros):
iparm := 1; iparm := 3; iparm := 8; iparm := 1; iparm := 2; iparm := 1;
I set iparm := 2 because I get the CSC format and although the matrix should be symmetric, I just wanted to be sure everything is in its right place.The number of equations will vary between 20000 and 150000, which I’m aware is not a lot for a parallel sparse solver.
There is another thing that I have noticed and I’m not so sure about; when I run the PARDISO routine with 4 threads (my processor has 4 cores), I can see that the first CPU is working at full capacity and the others only show spikes (total processor load is about 21% most of the time), as if the first CPU is doing most of the work and the rest only help every now and then. Is this a normal behavior? To make everything clear, I’m using a custom made DLL that I compiled using the visual studio projects that are included with the MKL. Any help in this matter will be much appreciated.
From my point of view parameter looks nice. About performance issue - can i ask you to set msglvl to 1 and provide output here to see time spent on each step. The behaviour that you describe can take place for small system...
Thanks for the help with the parameters. I'm using PARDISO within a DLL which is called by another program (like MATLAB) and most of the studies we carry out are quasi-static simulations, so there isn't just one iterative problem. I'll try to set the msglvl to 1 and see what I get when solving only one problem; don't know if the PARDISO messages will be forwarded to the console, considering it is buried in another DLL. Last time I checked this behavior I was solving a system with 22,000 variables but if I remember correctly, I've seen this behavior with systems of up to 100,000 variables.
I made some new tests and collected the PARDISO output messages for three different systems. I have attached a summary and an individual file for each system, since it's an iterative algorithm you can see there are 4 different solve stages. There is one thing that does look strange; I'm explicitly defining the number of threads for PARDISO using MKL_Set_Num_Threads_Local and MKL_Set_Num_Threads (I don't know if it's an error to use both) but in the output message I get a strange number (e.g. 11064172). This has happened from the beginning when I started calling the SDL from delphi.