Version 10 (modified by 17 years ago) (diff) | ,
---|
FORTRAN applications
F2X
One option is to use f2c to convert your FORTRAN program to C. M.F. Somers has created a BOINC-enabled f2c library that simplifies this process.
Windows: cygwin
Include the file 'boinc_api_fortran.C' in the api/Makefile.am, but comment out the 'zip' calls, to avoid the linking with 'libboinc_zip.a'
To link it is necessary to include the 'winmm.dll' library (-lwinmm).
Windows: Visual Studio
Note: there is a working example similar to the following (based on outdated BOINC code); see also its README.
Start by creating a new FORTRAN project. Add all the FORTRAN specific files, then add all the files needed for the BOINC library (e.g. boinc_api.C
). Make sure that BOINC and the FORTRAN files are compiled using the same type of standard libraries. i.e. if the BOINC is compiled with the debug multithreaded DLL libraries, make sure the FORTRAN files are compiled with the DLL setting.
For every BOINC function you want to call from Fortran you must add an interface and subroutine:
INTERFACE SUBROUTINE boinc_finish(status) END SUBROUTINE boinc_finish END INTERFACE
Remember to declare the type of arguments. INTEGER status
You must then tell the compiler that the function you are interfacing is a C routine. You do this by adding the statement:
!DEC$ ATTRIBUTES C :: boinc_finish
The interface will end up looking like this:
INTERFACE SUBROUTINE boinc_finish(status) !DEC$ ATTRIBUTES C :: boinc_finish !DEC$ ATTRIBUTES ALIAS : '?boinc_finish@@YAHH@Z' :: boinc__finish INTEGER status END SUBROUTINE boinc_finish END INTERFACE
You can now call the BOINC function in FORTRAN.
call boinc_finish(0)
Intel FORTRAN compiler
-ax<codes>
generate codes specialized for processors specified by <codes>
while also generating generic IA-32 code. <codes>
includes one or more of the following characters:
- K
- Intel Pentium III and compatible Intel processors
- W
- Intel Pentium 4 and compatible Intel processors
- N
- Intel Pentium 4 and compatible Intel processors. Enables new optimizations in addition to Intel processor-specific optimizations
- P
- Intel Core(TM) Duo processors, Intel Core(TM) Solo processors, Intel Pentium 4 and compatible Intel processors with Streaming SIMD Extensions 3 (SSE3) instruction support
- B
- Intel Pentium M and compatible Intel processors
You should not use the -x
options!
Instructions from Martin Korth
(can someone please integrate these with the above?)
Under Linux:
- Compile BOINC libs the standard way (you need
boinc.a
,boinc_api.a
, and for graphics alsoboinc_graphics_lib.a
). - Compile
boinc_api_fortran.o
. - Compile own graphics lib if needed.
- Compile app files (for us:
ifort -O2 ...' and 'icc -O2 ...
). - Link application (for us:
ifort -static-libcxa ...
).
Link with: boinc_api_fortran.o
, boinc.a
, boinc_api.a
, boinc_graphics_lib.a
, C-(runtime)-libs
(dl
, nsl
, gcc_s
, stdc++
, pthread
, m
, c
, ... - as they are not default for the Fortran compiler), and own graphics lib.
Under Windows:
- Compile BOINC libs the standard way (you need
libboinc.lib
,libboincapi.lib
). - Compile
boinc_api_fortran.o
(at the moment I still use my old solution with an interface for every Fortran function). - Compile own graphics lib if needed.
- Compile app files (for us:
ifort /nologo /MT /O2 ...
andcl /nologo /MT /O2 ...
) - 'nmake' makes life easier ... - Link application (for us
ifort /nologo /MT ...
).
Link with: libboinc.lib
, libboincapi.lib
, own graphics lib, gdi32.lib
user32.lib
opengl32.lib
glu32.lib
advapi32.lib
delayimp.lib
freetype.lib
glut32.lib
(you may need /link /nodefaultlib:libc.lib
).
Example from David Braun
Instructions:
../fortran/configure '--with-boinc=/usr/people/dbraun/src/boinc/build-5.9.3' \ '--with-boinc_src=/usr/people/dbraun/src/bo
Attachments (1)
-
fortran.tar.gz (1.1 MB) - added by 17 years ago.
FORTRAN example from David Braun
Download all attachments as: .zip