- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fortran and C applications that make calls to DSS (Direct Sparse Solver) produce huge EXE files on Windows when recent versions of Intel compilers and MKL are used, if static libraries are selected (/MT) rather than dynamic libraries (/MD). I noticed this problem when there was a noticeable delay before such a program, built from 35 lines of source code, ran and gave results from solving a set of five simultaneous linear equations. I happened to look at the HDD activity lights on my laptop, and then I checked the EXE size (all values given are byte counts).
Compiler EXE Size (/MD) EXE Size (/MT) NOTE ------------ ---------------- ------------------- --------- CVF 6.6 36,864 831,488 32-bit, CXML 11.1.70 14,336 7,812,608 32-bit 14.0.4 18,944 44,312,064 LP64 15.0.4 19,968 53,190,656 LP64 16.0.0 23,040 61,577,216 LP64
Even if it is felt that nothing is amiss, it would be nice for users to be aware of the huge EXE sizes produced when DSS routines are called and static libraries are used.
Here is the test program, which is a simplified version of one of the examples provided with MKL.
PROGRAM DSS_test
USe mkl_dss
IMPLICIT NONE
C
INTEGER, PARAMETER :: nRows=5, nCols=5, nNonZeros=9, nRhs=1
INTEGER :: rowIndex(nRows + 1) = [ 1, 6, 7, 8, 9, 10 ]
INTEGER :: columns(nNonZeros) = [ 1, 2, 3, 4, 5, 2, 3, 4, 5 ]
DOUBLE PRECISION ::
1 values(nNonZeros) = [9.,1.5,6.,.75,3.,0.5,12.,0.625,16.],
2 rhs(nRows) = [ 1., 2., 3., 4., 5. ]
DOUBLE PRECISION solution(nRows)
INTEGER*8 handle
INTEGER i, error, buf,idum(1)
C
error = dss_create(handle, MKL_DSS_DEFAULTS)
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
C
error = dss_define_structure( handle, MKL_DSS_SYMMETRIC,
& rowIndex, nRows, nCols, columns, nNonZeros )
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
error = dss_reorder( handle, MKL_DSS_DEFAULTS, idum)
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
error = dss_factor_real( handle, MKL_DSS_DEFAULTS, VALUES)
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
error = dss_solve_real( handle, MKL_DSS_DEFAULTS, rhs, nRhs,
& solution)
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
error = dss_delete( handle, MKL_DSS_DEFAULTS )
IF (error .NE. MKL_DSS_SUCCESS ) GO TO 999
WRITE(*,'(10ES12.4)') (solution(i), i = 1, nCols)
STOP
999 WRITE(*,*) "DSS error code ", error
STOP 1
1000 END PROGRAM
For speeding up the compilations, I used the following module, compiled once, instead of having include 'mkl_dss.fi' in my program source:
module mkl_dss
c
implicit none
include 'mkl_dss.fi'
c
end module
Link Copied
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page