- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I put the sample code from horst.haasitp.fzk.de in a VS project to test it. I will also use MKL routines for a current project and therefore have to be sure that it works fine.
I modified the original code marginal and running in debug mode everything is fine, with and without the PAUSE and with single and double precision.
here my source code:
[fortran]program MKL_test ! USE lapack95 ! implicit none ! real(kind(1.d0)) :: a(3,3),b(3) !real :: a(3,3),b(3) integer :: piv(3) ! ! a(1:3,1) = [ 2.5,-1.0,-1.0] a(1:3,2) = [-1.0, 2.5,-1.0] a(1:3,3) = [-1.0,-1.0, 2.5] b = [ 1.0, 2.0, 3.0] call getrf(a,piv) write(*,*) 'a=' write(*,*) a write(*,*) 'b=' write(*,*) b write(*,*) 'piv=' write(*,*) piv !pause 'initial' call getrs(a,piv,b) write(*,*) b end program MKL_test[/fortran]
And that is what I get as result:
a=
2.50000000000000 -0.400000000000000 -0.400000000000000
-1.00000000000000 2.10000000000000 -0.666666666666667
-1.00000000000000 -1.40000000000000 1.16666666666667
b=
1.00000000000000 2.00000000000000 3.00000000000000
piv=
1 2 3
3.71428571428571 4.00000000000000 4.28571428571428
However, in my installation everything seems to work fine.
Kind regards,
Johannes
edit:
linker settings:
/OUT:"Debug\MKL_test.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\mkl\lib\ia32" /MANIFEST /MANIFESTFILE:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.pdb" /SUBSYSTEM:CONSOLE /IMPLIB:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.lib" mkl_lapack95.lib
fortran settings:
/nologo /debug:full /Od /I"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\mkl\include\ia32" /warn:interfaces /module:"Debug\" /object:"Debug\" /Fd"Debug\vc100.pdb" /traceback /check:bounds /libs:static /threads /dbglibs /Qmkl:sequential /c
all other settings are default
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fortran95 Interface Conventions
Fortran95 interface to LAPACK is implemented through wrappers that call respective FORTRAN77 routines. This interface uses such features of Fortran95 as assumed-shape arrays and optional arguments to provide simplified calls to LAPACK routines with fewer arguments.
Note
For LAPACK, Intel MKL offers two types of Fortran95 interfaces:
- using mkl_lapack.fi only through include mkl_lapack.fi statement. Such interfaces allow you to make use of the original LAPACK routines with all their arguments
- using lapack.f90 that includes improved interfaces. This file is used to generate the module files lapack95.mod and f95_precision.mod. The module files mkl95_lapack.mod and mkl95_precision.mod are also generated. See also section Fortran95 interfaces and wrappers to LAPACK and BLAS of Intel MKL User's Guide for details. The module files are used to process the FORTRAN use clauses referencing the LAPACK interface: use lapack95 (or an equivalent use mkl95_lapack) and use f95_precision (or an equivalent use mkl95_precision).
And
Fortran 95:
call getrs( a, ipiv, b [, trans] [,info] )
Description
This routine is declared in mkl_lapack.fi for FORTRAN 77 interface, in lapack.f90 for Fortran 95 interface, and in mkl_lapack.h for C interface.
Before calling this routine, you must call ?getrf to compute the LU factorization of A.
Specific details for the routine getrs interface are as follows:
- a
Holds the matrix A of size (n, n).
- b
Holds the matrix B of size (n, nrhs).
- ipiv
Holds the vector of length n.
- trans
Must be 'N', 'C', or 'T'. The default value is 'N'.
But it is still not clear to me what to do.
Thank you in advance for your help.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The second part is how to call the routines provided in Lapack-95 and MKL to perform the calculations just described. Here is an example.
[fortran]program main USE lapack95 implicit none real a(3,3),b(3) integer piv(3) data a/2.5,-1.0,-1.0, & -1.0, 2.5,-1.0, & -1.0,-1.0, 2.5/ data b/1.0, 2.0, 3.0/ ! call getrf(a,piv) ! call getrs(a,piv,b) write(*,*)b end program main [/fortran] Compile and run:
[bash]x:> ifort /Qmkl xgetrs.f90 mkl_lapack95.lib x:> xgetrs 3.714287 4.000001 4.285715 [/bash]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using Microsoft Visual Studio. In the directories of my computer, I found lapack95.mod and mkl_lapack95.lib. How should I configure the Project Property Pages?
I did
Fortran > General > Additional Include Directories: set as the directory with lapack95.mod
Fortran > Libraries > Use Intel Math Kernel Library: set as Sequential (/Qmkl:sequential)
Linker > General > Additional Library Directories: set as the directory with mkl_lapack95.lib
But I got followingerror messages when build:
Error1 error LNK2019: unresolved external symbol _SGETRF_F95 referenced in function _MAIN__mkltest.obj
Error2 error LNK2019: unresolved external symbol _SGETRS1_F95 referenced in function _MAIN__mkltest.obj
Error3 fatal error LNK1120: 2 unresolved externalsDebug\mkltest.exe
May I ask your help to solve this problem.
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Linker > General > Additional Library Directories: set as the directory with mkl_lapack95.lib
That only specifies the directory to search. You must also specify mkl_lapack95.lib as an additional library to use when linking.
Linker > Command Line > Additional Options: mkl_lapack95.lib
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I did what you told me, it still has trouble with following error messages
Error1 error LNK2019: unresolved external symbol _XERBLA referenced in function _SGETRF_F95mkl_lapack95.lib(sgetrf.obj)
Error2 error LNK2001: unresolved external symbol _XERBLAmkl_lapack95.lib(sgetrs1.obj)
Error3 fatal error LNK1120: 1 unresolved externalsDebug\mkltest.exe
I need your further help.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
you could also ad both the *.mod and the *.lib file directly into the project (solution explorer -> project tree -> Source Files -> right click and Add existing item). This is not elegant but should work.
If there are still link errors, your LAPACK routine requires maybe not only the mkl_lapack95.lib.
Kind regards,
Johannes
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It doesn't work. Compile is fine, but there are still link errors. It is hard to test every *.lib file in the folder one by one
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
maybe you should then stay at Steve's and mecej4's suggestions and set the properties right. I guess the routines in the mkl_lapack95.lib call other routines in e.g. mkl_blas95.lib and so on. Maybe it is enough to ad these libs also into the linker property settings (if you know, in which lib are which subroutines/ functions...).
An example for the right property settings may be found in the some sample projects for visual studio in your installation folder (C:\Program Files (x86)\Intel\Composer XE 2011 SP1\mkl\tools\builder\MSVS_Projects\VS2010\.). These are C++ versions...
Kind regards,
Johannes
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This thread illustrates how a trivial example of compiling a program using a simple command becomes difficult to provide help for when the user uses a comprehensive IDE with numerous settings and we have not been told which settings have been used.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
After adding all files of *.lib into Property Pages > Linker > Input > Additional Dependencies, I was able to make the executable.But it has then another problem when run.
source file:
1 program main
2 USE lapack95
3 implicit none
4 real a(3,3),b(3)
5integer piv(3)
6 data a/2.5,-1.0,-1.0, &
7 -1.0, 2.5,-1.0, &
8 -1.0,-1.0, 2.5/
9 data b/1.0, 2.0, 3.0/
10call getrf(a,piv)
11write(*,*) 'a='
12 write(*,*) a
13 write(*,*) 'b='
14 write(*,*) b
15write(*,*) 'piv='
16 write(*,*) piv
17 pause 'initial'
18 call getrs(a,piv,b)
19 write(*,*) b
20 end program main
execution result:
a=
2.500000 -0.4000000 -0.4000000 -1.000000 2.100000
-0.6666667 -1.000000 -1.400000 1.166667
b=
1.000000 2.000000 3.000000
piv=
1 2 3
initial
forrtl: severe (157): Program Exception - access violation
Image PC Routine Line Source
mkltest.exe 004AB546 Unknown Unknown Unknown
mkltest.exe 00401452 _MAIN__ 18 mkltest.f90
mkltest.exe 004AD903 Unknown Unknown Unknown
mkltest.exe 0044D3D7 Unknown Unknown Unknown
mkltest.exe 0044D2AF Unknown Unknown Unknown
kernel32.dll 7C817077 Unknown Unknown Unknown
From above result (until line 17 pause 'initial'), it seems that call getrf works,the problem appears when call getrs. I could not fix the problem. Many thanks if you can help me.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I put the sample code from horst.haasitp.fzk.de in a VS project to test it. I will also use MKL routines for a current project and therefore have to be sure that it works fine.
I modified the original code marginal and running in debug mode everything is fine, with and without the PAUSE and with single and double precision.
here my source code:
[fortran]program MKL_test ! USE lapack95 ! implicit none ! real(kind(1.d0)) :: a(3,3),b(3) !real :: a(3,3),b(3) integer :: piv(3) ! ! a(1:3,1) = [ 2.5,-1.0,-1.0] a(1:3,2) = [-1.0, 2.5,-1.0] a(1:3,3) = [-1.0,-1.0, 2.5] b = [ 1.0, 2.0, 3.0] call getrf(a,piv) write(*,*) 'a=' write(*,*) a write(*,*) 'b=' write(*,*) b write(*,*) 'piv=' write(*,*) piv !pause 'initial' call getrs(a,piv,b) write(*,*) b end program MKL_test[/fortran]
And that is what I get as result:
a=
2.50000000000000 -0.400000000000000 -0.400000000000000
-1.00000000000000 2.10000000000000 -0.666666666666667
-1.00000000000000 -1.40000000000000 1.16666666666667
b=
1.00000000000000 2.00000000000000 3.00000000000000
piv=
1 2 3
3.71428571428571 4.00000000000000 4.28571428571428
However, in my installation everything seems to work fine.
Kind regards,
Johannes
edit:
linker settings:
/OUT:"Debug\MKL_test.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\mkl\lib\ia32" /MANIFEST /MANIFESTFILE:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.pdb" /SUBSYSTEM:CONSOLE /IMPLIB:"D:\Arbeitsverzeichnis_Jo\Fortran\MKL_test\Debug\MKL_test.lib" mkl_lapack95.lib
fortran settings:
/nologo /debug:full /Od /I"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\mkl\include\ia32" /warn:interfaces /module:"Debug\" /object:"Debug\" /Fd"Debug\vc100.pdb" /traceback /check:bounds /libs:static /threads /dbglibs /Qmkl:sequential /c
all other settings are default
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It looks like that you are also in Germany. Thank you very much for your help.
I found finally that I need both mkl_lapack95.lib and mkl_intel_c.lib and then I could get the correct result. If I input more *.lib files, it could run into the problem that I mentioned in earlier messages.
Best regards
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

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