- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I programmed a not-so-complicated code to solve a nonlinear equation. But unfortunately all the time at initialization I receive an error in input parameters. Please tell me what's wrong. The code is below.When I comment on the result check after the strnlsp_init function, the strnlsp_check function succeeds.
#include <iostream> #include <vector> #include <iomanip> #include "mkl_rci.h" #include "mkl_types.h" #include "mkl_service.h" int main() { std::vector<float> fjac = { 0,1.0, 1,1.0, 2,1.0, 4,1.0, 5,1.0 }; std::cerr << "size fjac = " << fjac.size() << std::endl; /* n - number of function variables m - dimension of function value */ MKL_INT n = 2, m = 5; std::cerr << "n = " << n << std::endl; std::cerr << "m = " << m << std::endl; std::vector<float> fvec = { 2.1, 2.4, 2.6, 2.8, 3.0 }; std::cerr << "size fvec = " << fvec.size() << std::endl; std::vector<float> x ={ 0.0, 0.0 }; std::cerr << "size x = " << x.size() << std::endl; _TRNSP_HANDLE_t handle = nullptr; // TR solver handle /* results of input parameter checking */ MKL_INT info[6]; /* precisions for stop-criteria (see manual for more details) */ std::vector< float > eps; eps.resize(6); /* set precisions for stop-criteria */ for (int32_t i = 0; i < static_cast<int32_t>(eps.size()); ++i) { eps = 0.00001; } /* iter1 - maximum number of iterations iter2 - maximum number of iterations of calculation of trial-step */ MKL_INT iter1 = 1000, iter2 = 100; /* initial step bound */ float rs = 0.0; MKL_INT res; if(m >= n){ std::cerr << "YES\n"; } else{ std::cerr << "NO\n"; } res = strnlsp_init(&handle, &n, &m, x.data(), eps.data(), &iter1, &iter2, &rs) ; std::cerr << "res = " << res << std::endl; if(res != TR_SUCCESS) { if(res == TR_INVALID_OPTION){ std::cerr << "there was an error in the input parameters.\n"; } if(res == TR_OUT_OF_MEMORY){ std::cerr << "there was a memory error.\n"; } /* if function does not complete successfully then print error message */ std::cerr << "| error in dtrnlsp_init" << std::endl; /* Release internal Intel(R) MKL memory that might be used for computations */ /* NOTE: It is important to call the routine below to avoid memory leaks */ /* unless you disable Intel(R) MKL Memory Manager */ MKL_Free_Buffers (); return -1; } /* Checks the correctness of handle and arrays containing Jacobian matrix, objective function, lower and upper bounds, and stopping criteria. */ if (strnlsp_check (&handle, &n, &m, fjac.data(), fvec.data(), eps.data(), info) != TR_SUCCESS) { std::cerr << "info:\n"; for(int32_t i = 0; i < 6; ++i){ std::cerr << info << ","; } std::cerr << std::endl; /* if function does not complete successfully then print error message */ std::cerr << "| error in dtrnlsp_init\n" << std::endl; /* Release internal Intel(R) MKL memory that might be used for computations */ /* NOTE: It is important to call the routine below to avoid memory leaks */ /* unless you disable Intel(R) MKL Memory Manager */ MKL_Free_Buffers (); /* and exit */ return -1; } std::cerr << "info:\n"; for(int32_t i = 0; i < 6; ++i){ std::cerr << info << ","; } std::cerr << std::endl; /* solve code */ return 0; }
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Igor, which version of mkl do you use?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am checking with the latest 2019.5 version of mkl and see
size fjac = 10
n = 2
m = 5
size fvec = 5
size x = 2
YES
res, strnlsp_init = 1501
info:
0,0,0,0,4095,2,
Major version: 2019
Minor version: 0
Update version: 5
Product status: Product
Build: 20190808
Platform: Intel(R) 64 architecture
Processor optimization: Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) enabled processors
================================================================
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Gennady, i use mkl 2019.5 .
This is not a MKL issue. I compiled from under QtCreator. That was the problem. And the program was collected and started. And what is the strangest thing, the INFO parameter was 0,0,0,0,0,0. =)
Thanks for the answer.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
thanks the update

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page