- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Can anyone provide a simple example to solve the symmetric
positive-definite system with multiple right hand side with dsgmrhs
(Fortran 90)?
I tried to follow the instruction of link advisor. Below are the libraries that were linked.
libmkl_gf.a, libmkl_intel_thread.a, libmkl_core.a, libmkl_lapack.a, libmkl_solver.a, liomp5, lpthread
But when I try to compile my code I got the following:
/usr/local/intel/mkl/10.1.0.015/lib/32/libmkl_solver.a(dcgmrhs.o): In function `dcgmrhs_':
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa3): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xcc): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x112): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x18b): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x4b4): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x5e3): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x624): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x6a2): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x6ea): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x748): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x827): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x8fb): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x923): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa09): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa7c): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xaa5): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xaeb): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xb0d): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xbf3): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xcc7): undefined reference to `dcopy_'
I tried to follow the instruction of link advisor. Below are the libraries that were linked.
libmkl_gf.a, libmkl_intel_thread.a, libmkl_core.a, libmkl_lapack.a, libmkl_solver.a, liomp5, lpthread
But when I try to compile my code I got the following:
/usr/local/intel/mkl/10.1.0.015/lib/32/libmkl_solver.a(dcgmrhs.o): In function `dcgmrhs_':
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa3): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xcc): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x112): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x18b): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x4b4): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x5e3): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x624): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x6a2): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x6ea): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x748): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x827): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x8fb): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0x923): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa09): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xa7c): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xaa5): undefined reference to `dscal_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xaeb): undefined reference to `daxpy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xb0d): undefined reference to `dnrm2_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xbf3): undefined reference to `dcopy_'
../../../../solvers_is/kernel/default/dcgmrhs.f:(.text+0xcc7): undefined reference to `dcopy_'
Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
An example would not be of much help (although you could try cg_mrhs.f in the .../mkl/examples/solverf/source directory --this is in the MKL version distributed with the 12.1 Fortran compiler), since your problem is with linking. Libraries are searched in the order listed, and your list of libraries shows libmkl_solver.a appearing after libmkl_core.a. This would cause the BLAS routines needed by the solver routines to go unresolved.
The Link Line Advisor gave me this:
$(MKLROOT)/lib/32/libmkl_solver.a -Wl,--start-group $(MKLROOT)/lib/32/libmkl_intel.a $(MKLROOT)/lib/32/libmkl_intel_thread.a $(MKLROOT)/lib/32/libmkl_core.a -Wl,--end-group -openmp -lpthread
However, the much simpler command
$ ifort -mkl cg_mrhs.f
may suffice, depending on the compiler version that you use.
The Link Line Advisor gave me this:
$(MKLROOT)/lib/32/libmkl_solver.a -Wl,--start-group $(MKLROOT)/lib/32/libmkl_intel.a $(MKLROOT)/lib/32/libmkl_intel_thread.a $(MKLROOT)/lib/32/libmkl_core.a -Wl,--end-group -openmp -lpthread
However, the much simpler command
$ ifort -mkl cg_mrhs.f
may suffice, depending on the compiler version that you use.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for the quick respond mecej4!
The problem was really in the order of libraries to link
The problem was really in the order of libraries to link
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The other question is that according to the MKL userguide if ipar(10)=1 the routine dcgmrhs should perform user defined stopped test by settinh RCI_request=2
call dcgmrhs_init(N, xi1, 3, xi, 1, RCI_request, ipar, dpar, tmp)
xi1 = 0._DP
call dcgmrhs_check(N, xi1, 3, xi, RCI_request, ipar, dpar, tmp)
1 print*,ipar(10)
call dcgmrhs(N, xi1, 3, xi, RCI_request, ipar, dpar, tmp)
print*,ipar(10)
print*,RCI_request
when I run this it prints RCI_request=1 first (after that as written in userguide I multiply a matrix by tmp(:,1) and copy to tmp(:,2)), the RCI_request=0 instead of 2. But how it is possible as ipar(10)=1?
I haven't this problem when use dcg, it sets RCI_request=3 normally
call dcgmrhs_init(N, xi1, 3, xi, 1, RCI_request, ipar, dpar, tmp)
xi1 = 0._DP
call dcgmrhs_check(N, xi1, 3, xi, RCI_request, ipar, dpar, tmp)
1 print*,ipar(10)
call dcgmrhs(N, xi1, 3, xi, RCI_request, ipar, dpar, tmp)
print*,ipar(10)
print*,RCI_request
when I run this it prints RCI_request=1 first (after that as written in userguide I multiply a matrix by tmp(:,1) and copy to tmp(:,2)), the RCI_request=0 instead of 2. But how it is possible as ipar(10)=1?
I haven't this problem when use dcg, it sets RCI_request=3 normally
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
problem solved after initialization of ipar and dpar arrays

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