Just wondering how to install the runtime env. to a seperate place, just like libso, lib etc. For example,
- Installing whole complete enviroments on a ‘compilation node’
- But the runtime enviroment will be installed on a shared filesystem where log nodes and computing nodes can see
- Users have to make the compilation job on the ‘compilation node’
- Users only can run the application compiled by PGI compiler on login nodes and computing nodes but not making the compilation with PGI compiler
My question is
How to make this sort of installation ?
Thanks for your time
Users have the permission to copy the contents of the REDIST
directory from the PGI installation to target execution systems for
the purpose of running pgi compiled programs.
To dynamically link libraries at runtime, you need to first link the
libraries to create the executable. On the execution machine, you will
need the PGI runtime libraries available to dynamically load,
in either a ‘path’ added to $LD_LIBRARY_PATH, or a “-rpath ‘path’” added at
link time to the executable.
For Linux systems, you may want to link with
which will attempt to link all the PGI libraries statically, and the non-PGI
libraries dynamically linked at runtime. This will require no
movement of runtime libs to the target machine.
To avoid problems that may occur when moving from a Linux system with
libnuma properly installed, to one without, we suggest compiling/linking with
which removes the concern.
Thanks for response
Just wanted to see if I understood correctly
Choosing ’ Network install’ while install PGI compiler on the ‘Compilation node’ to install a whole complete env.
Choosing the default local path /opt/pgi for installation directory
Choosing the shared filesystem, such as /my/shared/filesystem/path where log nodes & computing nodes can see, for the shared objects
Copying all stuffs in /opt/pgi/REDIST to /my/shared/filesystem/path
Libs under lib & libso are not necessary for runtime
PS, how to set the ‘-mp=nonuma’ and '-Bstatic_pgi ’ for the default compilation options instead explicitly specified from command line every time?
Appreciate your time
Just did above 5 steps to install PGI.
And tested with this 'hello ’ fortran code
print *, 'hello'
end program hello
There is no compiling and running issue on the ‘Compilation Node’
But got a runtime error on target execution system ‘log Nods’.
Illegal instruction (core dumped)
Tried with both of these, none of them worked.
pgf90 -mp=nonuma -Bstatic_pgi hello.f90
pgf90 -mp=nonuma hello.f90
Did I still miss certain things?
What are the CPU architectures of the “Compilation Node” and the “log Nodes”?
An illegal instruction typically means that you’re running a binary that includes new instructions that are not supported on older hardware. For example, running a binary built for Sandy-Bridge (which supports AVX instructions) on a Nehalem (which does not support AVX).
The solution is to use the target processor flag (-tp) to specify which architecture(s) should be used when generating the binary. You can specify more than one processor and multiple versions of routines (where applicable) will be created for each target processor. Or you can target the just the architecture of the “log Node” or a generic 64-bit processor (-tp=px-64). Please see “pgfortran -help -tp” for a complete list of target processors.
Hope this helps,
Sorry for forgetting CPU arch. issue, E7-4820 doesn’t support AVX.
Compilation Nodes : E5-4607
Computing Nodes : E5-2630
Log Nodes : E7-4820
After specifying -tp=p7, it worked perfectly for all kinds of nodes.
Just two more questions
How to set “-tp=7 -mp=nonuma Bstatic_pgi” as default compilation options for my situation?
Since I have seperate compilation and runtime environment and different CPU arch. Any suggestion for the default options for the compiler?
Appreciating your time