- There are two desktop PC with the following processors: Intel Core i5 4570 (Haswell) and Intel Core i5 3330 (Ivy Bridge).
- Use MKL 2019.0.1, build 20180928.
- The app use PARDISO with the following settings: MKL_INT _mtype = 11; MKL_INT _nrhs = 1; MKL_INT _iparm1 = 2; MKL_INT _iparm3 = 0; MKL_INT _iparm4 = 2; MKL_INT _iparm7 = -1; MKL_INT _iparm9 = 13; MKL_INT _iparm10 = 1; MKL_INT _iparm12 = 1; MKL_INT _iparm20 = 2; MKL_INT _iparm23 = 0; MKL_INT _iparm33 = 1; MKL_INT _iparm34 = 1; mkl_domain_set_num_threads(1, MKL_DOMAIN_PARDISO);
- Call the mkl_cbwr_set(MKL_CBWR_SSE2) and next PARDISO.
- The native library was build using Microsoft Visual Studio 2017 (v141)
- The mkl_intel_lp64.lib, mkl_intel_thread.lib, mkl_core.lib used as additional dependencies.
- The app runs on both PC.
- The calculation result is different. See attached files.
Please suggest a solution to my problem.
I prepared the initial data files and the source files. JMatrix.csv is Jacobian, PowerUnbalance.csv is rhs vector. The software implementation you will find in PardisoProvider.cpp. You have to use
int Initialization(int n, int nrhs, Monitel::MathNative::Pardiso::Block2x2 * a, int * ja, int * ia, float *executionTime);
int Factorization(int n, Monitel::MathNative::Pardiso::Block2x2 * a, int * ja, int * ia, float *converterTime, float *factorizationTime, int PivotingPerturbation = 13);
int Solve(double * rhs, double * solution, float *executionTime);
in order to reproduce bug.
I suppose we solved the problem. We added to
the next code:
#if defined (_WIN64)
We use Microsoft Visual Studio 2017 (v.15.9.2). The platform toolset is v141. You have to add links to addational files in \include and \lib folders in order to use PardisoProvider::ConvertMatrix method. We use MKL static libraries (mkl_intel_lp64.lib
mkl_core.lib), but you could use "Use Intel MKL" property for using MKL in the app. I have attached PerfCounter.h and PerfCounter.cpp also. It's necessary for PardisoProvider.cpp.
I couldn't build these project. There is not main function into sources you sent. Is that possible to simplify the case? reading from scv file into CSR format and calling pardiso...