|
forums.silverfrost.com Welcome to the Silverfrost forums
|
View previous topic :: View next topic |
Author |
Message |
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Thu Jan 30, 2014 6:53 pm Post subject: Compiler version problems creating app using clearwin64.dll |
|
|
Yes, Paul, I intended
INTEGER*2 IW2,IH2
and yes, Ian, I agree with you concerning the default for integer size.
Thanks for your help and explanations,
Dietmar |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2828 Location: South Pole, Antarctica
|
Posted: Fri Jan 31, 2014 12:50 am Post subject: |
|
|
Can anyone with relatively latest 64bit Intel Fortran compiler check if it still creates huge EXE files if you declare huge arrays? This is an example which produces 10K EXE file in FTN95 and is compiled in nanoseconds. What IFORT gives?
Code: |
parameter (idim1=700)
real a1(idim1,idim1,idim1)
a1(1,1,1) = 1
print*, 'size, MB=', idim1*idim1*idim1*4/10.**6
print*, a1(1,1,1)
end
|
|
|
Back to top |
|
|
JohnCampbell
Joined: 16 Feb 2006 Posts: 2560 Location: Sydney
|
Posted: Fri Jan 31, 2014 1:08 am Post subject: |
|
|
Dan,
Not latest, sorry!
It would depend on the compile options you use.
I selected /O2 and the exe is 500k, which is the minimum for any exe I produce with ifort.
FTN95 benefits from salflibc.dll
I didn't use the equivalent of /DEBUG, which might change things a bit.
Code: |
parameter (idim1=700)
real a1(idim1,idim1,idim1)
a1(1,1,1) = 1
print*, 'size, MB=', idim1*idim1*idim1*4/10.**6
print*, 'size, MB=', sizeof (a1)/2.**20
print*, a1(1,1,1)
end
ifort /Tf exe_size_test.f90 /free /O2 /QxHost
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.1.5.344 Build 20120612
Directory of c:\TEMP\Fortran\kind
31/01/2014 11:04 AM 535,552 exe_size_test.exe
31/01/2014 11:03 AM 217 exe_size_test.f90
31/01/2014 11:04 AM 485 exe_size_test.log
31/01/2014 11:04 AM 1,969 exe_size_test.obj
4 File(s) 538,223 bytes
size, MB= 1372.000
size, MB= 1308.441
1.000000
|
|
|
Back to top |
|
|
JohnCampbell
Joined: 16 Feb 2006 Posts: 2560 Location: Sydney
|
Posted: Fri Jan 31, 2014 2:39 am Post subject: |
|
|
Dan,
To show the effect of larger size:
Code: | parameter (idim1=1500)
real, allocatable, dimension(:,:,:) :: a1
allocate ( a1(idim1,idim1,idim1) )
a1(1,1,1) = 1
print*, 'size, MB=', int8(idim1)**3*4_8/10.**6
print*, 'size, MB=', sizeof (a1)/2.**20
print*, a1(1,1,1)
end
ifort /Tf exe_size_test2.f90 /free /O2 /QxHost
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.1.5.344 Build 20120612
Directory of c:\TEMP\Fortran\kind
31/01/2014 12:37 PM 479,232 exe_size_test2.exe
31/01/2014 12:37 PM 273 exe_size_test2.f90
31/01/2014 12:37 PM 1,647 exe_size_test2.log
31/01/2014 12:37 PM 2,664 exe_size_test2.obj
4 File(s) 483,816 bytes
size, MB= 13500.00
size, MB= 12874.60
1.000000
|
|
|
Back to top |
|
|
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Fri Jan 31, 2014 10:01 am Post subject: |
|
|
Dan,
I used ifort Version 14.0.1 to compile
ifort /Tf exe_size_test2.f90 /free /O2 /QxHost
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.1.139 Build 20131008
Copyright (C) 1985-2013 Intel Corporation. All rights reserved.
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
-out:exe_size_test2.exe
-subsystem:console
exe_size_test2.obj
Dirctory C:\ds\intel, Files exe* :
31.01.2014 09:41 541.696 exe_size_test2.exe
31.01.2014 09:22 206 exe_size_test2.f90
31.01.2014 09:41 2.036 exe_size_test2.obj
3 File(s), 543.938 Bytes
C:\ds\intel>exe_size_test2.exe
size, MB= 1372.000
size, MB= 1308.441
1.000000
Moreover I used your code
Code: | parameter (idim1=700)
real a1(idim1,idim1,idim1)
a1(1,1,1) = 1
print*, 'size, MB=', idim1*idim1*idim1*4/10.**6
print*, a1(1,1,1)
end |
saved as file exe_size_test3.f90 and compiled:
ifort /Tf exe_size_test3.f90 /free /O2 /QxHost
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.1.139 Build 20131008
Copyright (C) 1985-2013 Intel Corporation. All rights reserved.
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
-out:exe_size_test3.exe
-subsystem:console
exe_size_test3.obj
C:\ds\intel>dir exe_size_test3*
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: A018-14FA
Directory C:\ds\intel
31.01.2014 09:56 541.184 exe_size_test3.exe
31.01.2014 09:49 166 exe_size_test3.f90
31.01.2014 09:56 1.694 exe_size_test3.obj
3 File(s), 543.044 Bytes
C:\ds\intel>exe_size_test3.exe
size, MB= 1372.000
1.000000
Regards,
Dietmar |
|
Back to top |
|
|
DanRRight
Joined: 10 Mar 2008 Posts: 2828 Location: South Pole, Antarctica
|
Posted: Sat Feb 01, 2014 3:01 am Post subject: |
|
|
Thanks John and Dietmar. That's good, a decade ago 1 GB array created 1GB EXE.
Also, does IFORT load this entire 1GB array into memory just to assign its single element or not?
Another question - what maximum size arrays you succeeded to allocate with 64bit compiler? How fast allocation goes (how many GBs per second) ? |
|
Back to top |
|
|
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Fri Feb 14, 2014 1:35 pm Post subject: Porting help system to 64 bit |
|
|
We are trying to port the Salford clearwin online help mechanism of a Salford 32 bit Fortran application to 64 bit using Intel Fortran Compiler ifort, version 11.1, for compilation, xilink for linking and resource compilers src.exe and rc from the Intel 64 bit compile environment.
We use the following application browse.for which is based on a Salford demo application written in C.
Code: | PROGRAM FACTOR
#ifdef INTEL64
use mswin$
USE IFWIN
USE CLRWIN$
#endif
IMPLICIT NONE
#ifndef INTEL64
INCLUDE <WINDOWS.INS>
#endif
INTEGER rwinio
#ifdef INTEL64
CALL ADD_HYPERTEXT_RESOURCE$('TEXT')
rwinio=winio$('%mi[BROWSE]&');
rwinio=winio$(
* '%ca[ClearWin Browser]%mn[&File[E&xit],&Back,&History]&',
* 'EXIT','PREVIOUS_TEXT','TEXT_HISTORY')
rwinio=winio$('%bg[grey]%ww%pv%70.20ht@','INTRODUCTION')
#else
CALL ADD_HYPERTEXT_RESOURCE@('TEXT')
rwinio=winio@('%mi[BROWSE]&');
rwinio=winio@(
* '%ca[ClearWin Browser]%mn[&File[E&xit],&Back,&History]&',
* 'EXIT','PREVIOUS_TEXT','TEXT_HISTORY')
rwinio=winio@('%bg[grey]%ww%pv%70.20ht@','INTRODUCTION')
#endif
END |
The code of file browse.for to be compiled depends on define INTEL64 which is set in the compile step to produce the intel code; if define INTEL64 is not set in the compile step then the code is meant for the 32 bit Salford scenario. Using resource file browse_ctrls.rc
Code: | TEXT HYPERTEXT browse.htm
run BITMAP run.bmp
BROWSE ICON browse.ico |
and compiling it to object file browse_ctrls.obj we can link a 32 bit application browse.exe using the Salford compile environment and a 64 bit application browse.exe using the Intel 64 bit compile enviroment and Salford's clearwin64.dll.
The code makes use of a hypertext file browse.htm which supplies the texts etc. used in the help file. The hypertext file is integrated into the final executable by means of the resource compiler which generates an object file against which the final executable is linked.
For the 32 bit scenario we use Salford's resource compiler src.exe whereas for the 64 bit scenario we use the resource compiler from the INTEL64 build environment.
Application browse.exe creates a menu bar consisting of menus 'File', 'Back' and 'History'. The latter two menus provide the functionality to navigate through the help texts.
This works pretty well and as expected for both the 32 bit version and the 64 bit version with the exception of the history menu in the 64 bit case. Clicking the history menu makes the 32 bit application display a window used to navigate through the help themes. However, when clicking the
history menu in the 64 bit case, then the application crashes displaying the information window 'ClearWin+ error'
Argument no 8 of winio
should be a list-box call-back function - not string "Hfi(H..."
Here ... is a string containing some "strange" characters.
I suspect the problem might be the resource compilers. For the 32 bit scenario we use command
src browse_ctrls /binary SALFORD\browse_ctrls.obj
for the 64 bit scenario we use command
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\bin\win64\amd64\rc.exe
/fo INTEL64\debug\browse_ctrls.obj browse_ctrls
. Any comments are welcome.
Dietmar |
|
Back to top |
|
|
PaulLaidler Site Admin
Joined: 21 Feb 2005 Posts: 7934 Location: Salford, UK
|
Posted: Fri Feb 14, 2014 1:42 pm Post subject: |
|
|
There is a very good chance that this issue has been fixed in the latest download, uploaded on Wednesday of this week.
Also the new web browser control %wb may be better for your needs. |
|
Back to top |
|
|
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Fri Feb 14, 2014 3:38 pm Post subject: Porting help system to 64 bit |
|
|
Thanks Paul,
I used the chance and installed the latest download as you suggested.
With this new version my 64 bit test application worked as expected and in the same way as the 32 bit application.
Dietmar |
|
Back to top |
|
|
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Fri Jul 25, 2014 3:11 pm Post subject: Missing symbol and clearwin64.dll |
|
|
Paul,
in a previous post I addressed the problem of a symbol which caused a 64 bit application linked against clearwin64.a to crash at runtime. The application was built with the Intel Fortran compile environment (ifort + xilink). The crash occurred only for the version built without the debug flag being set. If the debug flag was set, everything worked fine and as expected.
I asked the Intel support for advice and provided Intel support with a test application. Now Intel support responded concerning the clearwin64 dlls and export libraries: "I had one of my colleagues examine your files and at least one of the DLLs was built assuming gfortran was calling them and the export libraries were clearly assuming gfortran."
I do not know if that is true, however, if so, what are these assumptions and what would I do then?
Moreover, I created map files while linking both the debug and "non debug" version of the test application. The map files differ significantly concerning the symbols SymInitialize, StackWalk64 and SymCleanup (one of which caused the crash). If you are interested I could provide them as well as the example code.
Regards,
Dietmar |
|
Back to top |
|
|
PaulLaidler Site Admin
Joined: 21 Feb 2005 Posts: 7934 Location: Salford, UK
|
Posted: Sat Jul 26, 2014 12:40 pm Post subject: |
|
|
Dietmar
Please see my reply to your private message.
Thanks for the offer to send the files but I don't think that we could make use of them at the moment. |
|
Back to top |
|
|
DietmarSiepmann
Joined: 03 Jun 2013 Posts: 279
|
Posted: Wed Aug 20, 2014 11:32 am Post subject: Clearwin64 and MSVC 2008 |
|
|
Paul,
concerning the problem linking a 64 bit binary with Intel Fortran and using clearwin64 we are still facing runtime problems for the non debug version. Now Intel support asked:
"Do you know which version of Microsoft C++ was used to build clearwin64. Since I'm able to build and run under VS 2012 and 2013, I'm wondering if the version that was used to build clearwin64 is not compatible with the libraries that come with VS 2008 and 2010."
I used clearwin64 dlls and libs dated from 12th February 2014 when creating the binary in question. And I am using MSVC 2008.
Could you please tell me if the clearwin64 stuff is compatible to the dlls and libraries that come with MSVC 2008?
Thanks and regards,
Dietmar |
|
Back to top |
|
|
PaulLaidler Site Admin
Joined: 21 Feb 2005 Posts: 7934 Location: Salford, UK
|
Posted: Wed Aug 20, 2014 1:36 pm Post subject: |
|
|
The relevant version is Visual Studio 2010. |
|
Back to top |
|
|
dgurok
Joined: 26 May 2011 Posts: 66
|
Posted: Wed Sep 28, 2016 8:40 am Post subject: |
|
|
Dear Paul,
we use still ClearWin+ 64-bit with the Intel Fortran 64-bit Compiler.
We have the problem, that some graphic routines are missing in clrwin.f95. So I tried to adapted them but I run into an exception calling them.
I dont know if my ported declaration of "create_polygon@" and "fill_polygon@" for 64-bit is correct.
Thats the code that I am using in file clrwin.f95 (64-bit):
Code: |
!-------------------------------------------
interface
subroutine create_polygon$(x,y,n,hwnd,ierr) bind(C,Name='__win_create_polygon_l')
use ISO_C_BINDING
integer(C_INT)::x(*),y(*)
integer(C_INT),value::n
integer(C_LONG_LONG)::hwnd
integer(C_INT)::ierr
end subroutine create_polygon$
end interface
!-------------------------------------------
interface
subroutine fill_polygon$(hwnd,col,ierr) bind(C,Name='__win_fill_polygon_l')
use ISO_C_BINDING
integer(C_LONG_LONG),value::hwnd
integer(C_INT),value::col
integer(C_INT)::ierr
end subroutine fill_polygon$
end interface
!-------------------------------------------
|
I changed hwnd from C_LONG_LONG to C_INT but the effect is the same.
Is there a chance to get it working? |
|
Back to top |
|
|
dgurok
Joined: 26 May 2011 Posts: 66
|
Posted: Wed Sep 28, 2016 10:47 am Post subject: |
|
|
With the newest clearwin64.dll I get the message during the execute of create_polygon$:
ALLOCATE_POLYGON_HANDLE@ has not been ported to the current platform.
So, we can't use these routines? |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|