- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi everyone
I have been doing fortran programs with intel mkl for several years, but this time I faced a runtime error as:
The ordinal 242 could not be located in the dynamic link library C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019\windows\redist\intel64\mkl\mkl_intel_thread.dll
when I was trying to test sparse matrix function MKL_SPARSE_D_MV , and the test code is exactly the one I download from Intel official site. For convenience I paste the code here, and Line 66 is the function of MKL_SPARSE_D_MV , if I comment this function it runs well.
My environment is listed as follows
Windows 10 x64, Visual Studio 2017 + Intel® Parallel Studio XE 2019 Update 3, and compiled with x64 Release version.
PROGRAM SPMV ! ***************************************************************************** ! Declaration and initialization of parameters for sparse representation of ! the matrix A in CSR format: ! ***************************************************************************** USE MKL_SPBLAS IMPLICIT NONE INTEGER M, N, NNZ, i, info ! ***************************************************************************** ! Sparse representation of the matrix A ! ***************************************************************************** INTEGER, ALLOCATABLE :: csrColInd(:), csrRowPtr(:) DOUBLE PRECISION, ALLOCATABLE :: csrVal(:) ! Matrix descriptor TYPE(MATRIX_DESCR) descrA ! Sparse matrix descriptor ! CSR matrix representation TYPE(SPARSE_MATRIX_T) csrA ! Structure with sparse matrix ! ***************************************************************************** ! Declaration of local variables: ! ***************************************************************************** DOUBLE PRECISION, ALLOCATABLE :: x(:), y(:) DOUBLE PRECISION alpha, beta M = 5 N = 5 NNZ = 13 ALLOCATE(csrColInd(NNZ)) ALLOCATE(csrRowPtr(M+1)) ALLOCATE(csrVal(NNZ)) ALLOCATE(x(M)) ALLOCATE(y(M)) csrVal = (/ 1.0,-1.0,-3.0,-2.0,5.0,4.0,6.0,4.0,-4.0,2.0,7.0,8.0,-5.0 /) csrColInd = (/ 0,1,3,0,1,2,3,4,0,2,3,1,4 /) csrRowPtr = (/ 0, 3, 5, 8, 11, 13 /) x = (/ 1.0, 5.0, 1.0, 4.0, 1.0 /) y = (/ 0.0, 0.0, 0.0, 0.0, 0.0 /) alpha = 1.0 beta = 0.0 print*,'EXAMPLE PROGRAM FOR MKL_SPARSE_D_MV' print*,'---------------------------------------------------' print*,'' print*,'INPUT DATA FOR MKL_SPARSE_D_MV' print*,'WITH GENERAL SPARSE MATRIX' print*,'ALPHA =',alpha,'BETA =',beta print*,'SPARSE_OPERATION_NON_TRANSPOSE' print*,'Input vector' do i = 1, M print*,x(i) enddo ! Create CSR matrix i = MKL_SPARSE_D_CREATE_CSR(csrA,SPARSE_INDEX_BASE_ZERO,M,N,csrRowPtr,csrRowPtr(2),csrColInd,csrVal) ! Create matrix descriptor descrA % TYPE = SPARSE_MATRIX_TYPE_GENERAL ! Analyze sparse matrix; chose proper kernels and workload balancing strategy info = MKL_SPARSE_OPTIMIZE(csrA) ! Compute y = alpha * A * x + beta * y !! ############################################################# !! error from here, but when I comment following function, it runs well; info = MKL_SPARSE_D_MV(SPARSE_OPERATION_NON_TRANSPOSE,alpha,csrA,descrA,x,beta,y) !! ############################################################# ! Release internal representation of CSR matrix info = MKL_SPARSE_DESTROY(csrA) print*,'' print*,'OUTPUT DATA FOR sparseDcsrmv' do i = 1, M print*,y(i) enddo print*,'---------------------------------------------------' END PROGRAM SPMV
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I found a PC with
Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.3.203 Build 20190206
and your program ran and gave correct results.
I suspect that some of your installed MKL files may have become corrupted. Please report what you get when you change to the directory containing mkl_intel_thread.dll and type the command
certutil -hashfile mkl_intel_thread.dll MD5
On my system, I see
3a31c220105784fb60edb3354dd147f5
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I tried the earlier release 19.0.1 (Windows 10, 64 bit) on your example source, and the resulting program ran fine. I'll try to find a PC with 19.0.3 installed and try again.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you mecej4, happy to hear that.
I also found that the sparse matrix - vector multiply functions mkl_dcsrgemv, mkl_dcsrmv lead to the same runtime error.
call mkl_dcsrgemv ( 'N' , M , csrVal , csrRowPtr , csrColInd , x , y ) matdescra(1) = 'G' matdescra(4) = 'F' call mkl_dcsrmv ( 'N' , M , M , alpha , matdescra , csrVal , csrColInd , csrRowPtr , csrRowPtr(2) , x , beta , y )
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I found a PC with
Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.3.203 Build 20190206
and your program ran and gave correct results.
I suspect that some of your installed MKL files may have become corrupted. Please report what you get when you change to the directory containing mkl_intel_thread.dll and type the command
certutil -hashfile mkl_intel_thread.dll MD5
On my system, I see
3a31c220105784fb60edb3354dd147f5
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi mecej4
I see my hash code is exactly identical to yours.
I think the program linked to right DLL, because the popup error shows the DLL at the right location.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Shi,
Can you show us how you are building, linking and then running the code sample? Often when I have seen an ordinal issue like this in my own applications, it is because the export lib (ex: mkl_intel_thread_dll.lib) I linked against in my application and the runtime DLL (ex: mkl_intel_thread.dll) that is picked up are somehow incompatible, ie from different releases.
Best,
Spencer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Spencer
I 'm using VS2017 + Intel® Parallel Studio XE 2019 Update 3, and this is my setting of this fortran project using x64 Release version
- in Fortran\Libraries\Runtime Library, use Multithread DLL (/libs:dll /threads)
- in Fortran\Libraries\Use Intel Math Kernel Library, use Parallel (/Qmkl:parallel)
- In Linker\Input\Additional Dependencies, use mkl_intel_thread_dll.lib
The Command line of Compiling procedure:
/nologo /O2 /standard-semantics /module:"x64\Release\\" /object:"x64\Release\\" /Fd"x64\Release\vc150.pdb" /libs:dll /threads /Qmkl:parallel /c
The Command line of linking procedure:
/OUT:"x64\Release\Console1.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"x64\Release\Console1.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /SUBSYSTEM:CONSOLE /IMPLIB:"C:\Users\xxxx\Documents\Visual Studio 2017\Projects\Console1\Console1\x64\Release\Console1.lib" mkl_intel_thread_dll.lib
and the runtime library path is
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.3.203\windows\redist\intel64_win\mkl
where mkl_intel_thread.dll located, and this path is in the system Path variable.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi mecej4 and Spencer
Thank you for your kind replies, which inspired me to check all DLLs that exe file depended on. Finally I found that an old version of
libiomp5md.dll
located in my System32 and SysWOW64 folder, which are incompatible with my intel compiler. I replaced this file with lastest one, and the code ran fine. So next time the ordinal issue come up, I think every depended dll requires double check.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Shi J., thanks for that report -- I would not have guessed that the openMP DLL was the mismatched one.
In similar situations, I have found it useful to use the WHERE utility to locate and report a DLL whose name I specify. If it is not the one I expected to be used, I can look at the environment setup to see why, for example, an older DLL will be used instead of a newer version which is available in a different directory.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page