Intel prefixes (#7469)
Consolidate prefix calculation logic for intel packages into the IntelPackage class. Add documentation on installing Intel packages with Spack an (alternatively) adding them as external packages in Spack.
This commit is contained in:
parent
e860307c31
commit
a86f22d755
@ -596,6 +596,9 @@ name or compiler specifier to their left in the spec.
|
||||
If the compiler spec is omitted, Spack will choose a default compiler
|
||||
based on site policies.
|
||||
|
||||
|
||||
.. _basic-variants:
|
||||
|
||||
^^^^^^^^
|
||||
Variants
|
||||
^^^^^^^^
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -484,6 +484,9 @@ simple package. For example:
|
||||
|
||||
$ spack install zlib%gcc@5.3.0
|
||||
|
||||
|
||||
.. _vendor-specific-compiler-configuration:
|
||||
|
||||
--------------------------------------
|
||||
Vendor-Specific Compiler Configuration
|
||||
--------------------------------------
|
||||
|
@ -479,6 +479,9 @@ you will prevent the generation of module files for any package that
|
||||
is compiled with ``gcc@4.4.7``, with the only exception of any ``gcc``
|
||||
or any ``llvm`` installation.
|
||||
|
||||
|
||||
.. _modules-naming-scheme:
|
||||
|
||||
"""""""""""""""""""""""""""
|
||||
Customize the naming scheme
|
||||
"""""""""""""""""""""""""""
|
||||
|
@ -2759,6 +2759,8 @@ is handy when a package supports additional variants like
|
||||
|
||||
variant('openmp', default=True, description="Enable OpenMP support.")
|
||||
|
||||
.. _blas_lapack_scalapack:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Blas, Lapack and ScaLapack libraries
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -325,6 +325,8 @@ license server, you can set this in ``compilers.yaml`` as follows:
|
||||
...
|
||||
|
||||
|
||||
.. _configs-tutorial-package-prefs:
|
||||
|
||||
-------------------------------
|
||||
Configuring Package Preferences
|
||||
-------------------------------
|
||||
|
660
lib/spack/spack/build_systems/README-intel.rst
Normal file
660
lib/spack/spack/build_systems/README-intel.rst
Normal file
@ -0,0 +1,660 @@
|
||||
====================================
|
||||
Development Notes on Intel Packages
|
||||
====================================
|
||||
|
||||
These are notes for concepts and development of
|
||||
lib/spack/spack/build_systems/intel.py .
|
||||
|
||||
For documentation on how to *use* ``IntelPackage``, see
|
||||
lib/spack/docs/build_systems/intelpackage.rst .
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Installation and path handling as implemented in ./intel.py
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
***************************************************************************
|
||||
Prefix differences between Spack-external and Spack-internal installations
|
||||
***************************************************************************
|
||||
|
||||
|
||||
Problem summary
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
For Intel packages that were installed external to Spack, ``self.prefix`` will
|
||||
be a *component-specific* path (e.g. to an MKL-specific dir hierarchy), whereas
|
||||
for a package installed by Spack itself, ``self.prefix`` will be a
|
||||
*vendor-level* path that holds one or more components (or parts thereof), and
|
||||
must be further qualified down to a particular desired component.
|
||||
|
||||
It is possible that a similar conceptual difference is inherent to other
|
||||
package families that use a common vendor-style installer.
|
||||
|
||||
|
||||
Description
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Spack makes packages available through two routes, let's call them A and B:
|
||||
|
||||
A. Packages pre-installed external to Spack and configured *for* Spack
|
||||
B. Packages built and installed *by* Spack.
|
||||
|
||||
For a user who is interested in building end-user applications, it should not
|
||||
matter through which route any of its dependent packages has been installed.
|
||||
Most packages natively support a ``prefix`` concept which unifies the two
|
||||
routes just fine.
|
||||
|
||||
Intel packages, however, are more complicated because they consist of a number
|
||||
of components that are released as a suite of varying extent, like "Intel
|
||||
Parallel Studio *Foo* Edition", or subsetted into products like "MKL" or "MPI",
|
||||
each of which also contain libraries from other components like the compiler
|
||||
runtime and multithreading libraries. For this reason, an Intel package is
|
||||
"anchored" during installation at a directory level higher than just the
|
||||
user-facing directory that has the conventional hierarchy of ``bin``, ``lib``,
|
||||
and others relevant for the end-product.
|
||||
|
||||
As a result, internal to Spack, there is a conceptual difference in what
|
||||
``self.prefix`` represents for the two routes.
|
||||
|
||||
For route A, consider MKL installed outside of Spack. It will likely be one
|
||||
product component among other products, at one particular release among others
|
||||
that are installed in sibling or cousin directories on the local system.
|
||||
Therefore, the path given to Spack in ``packages.yaml`` should be a
|
||||
*product-specific and fully version-specific* directory. E.g., for an
|
||||
``intel-mkl`` package, ``self.prefix`` should look like::
|
||||
|
||||
/opt/intel/compilers_and_libraries_2018.1.163/linux/mkl
|
||||
|
||||
In this route, the interaction point with the user is encapsulated in an
|
||||
environment variable which will be (in pseudo-code)::
|
||||
|
||||
MKLROOT := {self.prefix}
|
||||
|
||||
For route B, a Spack-based installation of MKL will be placed in the directory
|
||||
given to the ``./install.sh`` script of Intel's package distribution. This
|
||||
directory is taken to be the *vendor*-specific anchor directory, playing the
|
||||
same role as the default ``/opt/intel``. In this case, ``self.prefix`` will
|
||||
be::
|
||||
|
||||
$SPACK_ROOT/opt/spack/linux-centos6-x86_64/gcc-4.9.3/intel-mkl-2018.1.163-<HASH>
|
||||
|
||||
However, now the environment variable will have to be constructed as *several
|
||||
directory levels down*::
|
||||
|
||||
MKLROOT := {self.prefix}/compilers_and_libraries_2018.1.163/linux/mkl
|
||||
|
||||
A recent post on the Spack mailing list illustrates the confusion when route A
|
||||
was taken while route B was the only one that was coded in Spack:
|
||||
https://groups.google.com/d/msg/spack/x28qlmqPAys/Ewx6220uAgAJ
|
||||
|
||||
|
||||
Solution
|
||||
~~~~~~~~~
|
||||
|
||||
Introduce a series of functions which will return the appropriate
|
||||
directories, regardless of whether the Intel package has been installed
|
||||
external or internal to Spack:
|
||||
|
||||
========================== ==================================================
|
||||
Function Example return values
|
||||
-------------------------- --------------------------------------------------
|
||||
normalize_suite_dir() Spack-external installation:
|
||||
/opt/intel/compilers_and_libraries_2018.1.163
|
||||
Spack-internal installation:
|
||||
$SPACK_ROOT/...<HASH>/compilers_and_libraries_2018.1.163
|
||||
-------------------------- --------------------------------------------------
|
||||
normalize_path('mkl') <suite_dir>/linux/mkl
|
||||
component_bin_dir() <suite_dir>/linux/mkl/bin
|
||||
component_lib_dir() <suite_dir>/linux/mkl/lib/intel64
|
||||
-------------------------- --------------------------------------------------
|
||||
normalize_path('mpi') <suite_dir>/linux/mpi
|
||||
component_bin_dir('mpi') <suite_dir>/linux/mpi/intel64/bin
|
||||
component_lib_dir('mpi') <suite_dir>/linux/mpi/intel64/lib
|
||||
========================== ==================================================
|
||||
|
||||
|
||||
*********************************
|
||||
Analysis of directory layouts
|
||||
*********************************
|
||||
|
||||
Let's look at some sample directory layouts, using ``ls -lF``,
|
||||
but focusing on names and symlinks only.
|
||||
|
||||
Spack-born installation of ``intel-mkl@2018.1.163``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
::
|
||||
|
||||
$ ls -l <prefix>
|
||||
|
||||
bin/
|
||||
- compilervars.*sh (symlinked) ONLY
|
||||
|
||||
compilers_and_libraries -> compilers_and_libraries_2018
|
||||
- generically-named entry point, stable across versions (one hopes)
|
||||
|
||||
compilers_and_libraries_2018/
|
||||
- vaguely-versioned dirname, holding a stub hierarchy --ignorable
|
||||
|
||||
$ ls -l compilers_and_libraries_2018/linux/
|
||||
bin - actual compilervars.*sh (reg. files) ONLY
|
||||
documentation -> ../../documentation_2018/
|
||||
lib -> ../../compilers_and_libraries_2018.1.163/linux/compiler/lib/
|
||||
mkl -> ../../compilers_and_libraries_2018.1.163/linux/mkl/
|
||||
pkg_bin -> ../../compilers_and_libraries_2018.1.163/linux/bin/
|
||||
samples -> ../../samples_2018/
|
||||
tbb -> ../../compilers_and_libraries_2018.1.163/linux/tbb/
|
||||
|
||||
compilers_and_libraries_2018.1.163/
|
||||
- Main "product" + a minimal set of libs from related products
|
||||
|
||||
$ ls -l compilers_and_libraries_2018.1.163/linux/
|
||||
bin/ - compilervars.*sh, link_install*sh ONLY
|
||||
mkl/ - Main Product ==> to be assigned to MKLROOT
|
||||
compiler/ - lib/intel64_lin/libiomp5* ONLY
|
||||
tbb/ - tbb/lib/intel64_lin/gcc4.[147]/libtbb*.so* ONLY
|
||||
|
||||
parallel_studio_xe_2018 -> parallel_studio_xe_2018.1.038/
|
||||
parallel_studio_xe_2018.1.038/
|
||||
- Alternate product packaging - ignorable
|
||||
|
||||
$ ls -l parallel_studio_xe_2018.1.038/
|
||||
bin/ - actual psxevars.*sh (reg. files)
|
||||
compilers_and_libraries_2018 -> <full_path>/comp...aries_2018.1.163
|
||||
documentation_2018 -> <full_path_prefix>/documentation_2018
|
||||
samples_2018 -> <full_path_prefix>/samples_2018
|
||||
...
|
||||
|
||||
documentation_2018/
|
||||
samples_2018/
|
||||
lib -> compilers_and_libraries/linux/lib/
|
||||
mkl -> compilers_and_libraries/linux/mkl/
|
||||
tbb -> compilers_and_libraries/linux/tbb/
|
||||
- auxiliaries and convenience links
|
||||
|
||||
Spack-external installation of Intel-MPI 2018
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For MPI, the layout is slightly different than MKL. The prefix will have to
|
||||
include an architecture directory (typically ``intel64``), which then contains
|
||||
bin/, lib/, ..., all without further architecture branching. The environment
|
||||
variable ``I_MPI_ROOT`` from the API documentation, however, must be the
|
||||
package's top directory, not including the architecture.
|
||||
|
||||
FIXME: For MANPATH, need the parent dir.
|
||||
|
||||
::
|
||||
|
||||
$ ls -lF /opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/
|
||||
bin64 -> intel64/bin/
|
||||
etc64 -> intel64/etc/
|
||||
include64 -> intel64/include/
|
||||
lib64 -> intel64/lib/
|
||||
|
||||
benchmarks/
|
||||
binding/
|
||||
intel64/
|
||||
man/
|
||||
test/
|
||||
|
||||
The package contains an MPI-2019 preview; Curiously, its release notes contain
|
||||
the tag: "File structure clean-up." I could not find further documentation on
|
||||
this, however, so it is unclear what, if any, changes will make it to release.
|
||||
|
||||
https://software.intel.com/en-us/articles/restoring-legacy-path-structure-on-intel-mpi-library-2019
|
||||
|
||||
::
|
||||
|
||||
$ ls -lF /opt/intel/compilers_and_libraries_2018.1.163/linux/mpi_2019/
|
||||
binding/
|
||||
doc/
|
||||
imb/
|
||||
intel64/
|
||||
man/
|
||||
test/
|
||||
|
||||
Spack-external installation of Intel Parallel Studio 2018
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This is the main product bundle that I actually downloaded and installed on my
|
||||
system. Its nominal installation directory mostly holds merely symlinks
|
||||
to components installed in sibling dirs::
|
||||
|
||||
$ ls -lF /opt/intel/parallel_studio_xe_2018.1.038/
|
||||
advisor_2018 -> /opt/intel/advisor_2018/
|
||||
clck_2018 -> /opt/intel/clck/2018.1/
|
||||
compilers_and_libraries_2018 -> /opt/intel/comp....aries_2018.1.163/
|
||||
documentation_2018 -> /opt/intel/documentation_2018/
|
||||
ide_support_2018 -> /opt/intel/ide_support_2018/
|
||||
inspector_2018 -> /opt/intel/inspector_2018/
|
||||
itac_2018 -> /opt/intel/itac/2018.1.017/
|
||||
man -> /opt/intel/man/
|
||||
samples_2018 -> /opt/intel/samples_2018/
|
||||
vtune_amplifier_2018 -> /opt/intel/vtune_amplifier_2018/
|
||||
|
||||
psxevars.csh -> ./bin/psxevars.csh*
|
||||
psxevars.sh -> ./bin/psxevars.sh*
|
||||
bin/ - *vars.*sh scripts + sshconnectivity.exp ONLY
|
||||
|
||||
licensing/
|
||||
uninstall*
|
||||
|
||||
The only relevant regular files are ``*vars.*sh``, but those also just churn
|
||||
through the subordinate vars files of the components.
|
||||
|
||||
Installation model
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Intel packages come with an ``install.sh`` script that is normally run
|
||||
interactively (in either text or GUI mode) but can run unattended with a
|
||||
``--silent <file>`` option, which is of course what Spack uses.
|
||||
|
||||
Format of configuration file
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The configuration file is conventionally called ``silent.cfg`` and has a simple
|
||||
``token=value`` syntax. Before using the configuration file, the installer
|
||||
calls ``<staging_dir>/pset/check.awk`` to validate it. Example paths to the
|
||||
validator are::
|
||||
|
||||
.../l_mkl_2018.1.163/pset/check.awk .
|
||||
.../parallel_studio_xe_2018_update1_cluster_edition/pset/check.awk
|
||||
|
||||
The tokens that are accepted in the configuration file vary between packages.
|
||||
Tokens not supported for a given package **will cause the installer to stop
|
||||
and fail.** This is particularly relevant for license-related tokens, which are
|
||||
accepted only for packages that actually require a license.
|
||||
|
||||
Reference: [Intel's documentation](https://software.intel.com/en-us/articles/configuration-file-format)
|
||||
|
||||
See also: https://software.intel.com/en-us/articles/silent-installation-guide-for-intel-parallel-studio-xe-composer-edition-for-os-x
|
||||
|
||||
The following is from ``.../parallel_studio_xe_2018_update1_cluster_edition/pset/check.awk``:
|
||||
|
||||
* Tokens valid for all packages encountered::
|
||||
|
||||
ACCEPT_EULA {accept, decline}
|
||||
CONTINUE_WITH_OPTIONAL_ERROR {yes, no}
|
||||
PSET_INSTALL_DIR {/opt/intel, , filepat}
|
||||
CONTINUE_WITH_INSTALLDIR_OVERWRITE {yes, no}
|
||||
COMPONENTS {ALL, DEFAULTS, , anythingpat}
|
||||
PSET_MODE {install, repair, uninstall}
|
||||
NONRPM_DB_DIR {, filepat}
|
||||
|
||||
SIGNING_ENABLED {yes, no}
|
||||
ARCH_SELECTED {IA32, INTEL64, ALL}
|
||||
|
||||
* Mentioned but unexplained in ``check.awk``::
|
||||
|
||||
NO_VALIDATE (?!)
|
||||
|
||||
* Only for licensed packages::
|
||||
|
||||
ACTIVATION_SERIAL_NUMBER {, snpat}
|
||||
ACTIVATION_LICENSE_FILE {, lspat, filepat}
|
||||
ACTIVATION_TYPE {exist_lic, license_server,
|
||||
license_file, trial_lic,
|
||||
|
||||
PHONEHOME_SEND_USAGE_DATA {yes, no}
|
||||
serial_number}
|
||||
|
||||
* Only for Amplifier (obviously)::
|
||||
|
||||
AMPLIFIER_SAMPLING_DRIVER_INSTALL_TYPE {build, kit}
|
||||
AMPLIFIER_DRIVER_ACCESS_GROUP {, anythingpat, vtune}
|
||||
AMPLIFIER_DRIVER_PERMISSIONS {, anythingpat, 666}
|
||||
AMPLIFIER_LOAD_DRIVER {yes, no}
|
||||
AMPLIFIER_C_COMPILER {, filepat, auto, none}
|
||||
AMPLIFIER_KERNEL_SRC_DIR {, filepat, auto, none}
|
||||
AMPLIFIER_MAKE_COMMAND {, filepat, auto, none}
|
||||
AMPLIFIER_INSTALL_BOOT_SCRIPT {yes, no}
|
||||
AMPLIFIER_DRIVER_PER_USER_MODE {yes, no}
|
||||
|
||||
* Only for MKL and Studio::
|
||||
|
||||
CLUSTER_INSTALL_REMOTE {yes, no}
|
||||
CLUSTER_INSTALL_TEMP {, filepat}
|
||||
CLUSTER_INSTALL_MACHINES_FILE {, filepat}
|
||||
|
||||
* "backward compatibility" (?)::
|
||||
|
||||
INSTALL_MODE {RPM, NONRPM}
|
||||
download_only {yes}
|
||||
download_dir {, filepat}
|
||||
|
||||
|
||||
Details for licensing tokens
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Quoted from
|
||||
https://software.intel.com/en-us/articles/configuration-file-format,
|
||||
for reference:
|
||||
|
||||
[ed. note: As of 2018-05, the page incorrectly references ``ACTIVATION``, which
|
||||
was used only until about 2012; this is corrected to ``ACTIVATION_TYPE`` here.]
|
||||
|
||||
...
|
||||
|
||||
``ACTIVATION_TYPE=exist_lic``
|
||||
This directive tells the install program to look for an existing
|
||||
license during the install process. This is the preferred method for
|
||||
silent installs. Take the time to register your serial number and get
|
||||
a license file (see below). Having a license file on the system
|
||||
simplifies the process. In addition, as an administrator it is good
|
||||
practice to know WHERE your licenses are saved on your system.
|
||||
License files are plain text files with a .lic extension. By default
|
||||
these are saved in /opt/intel/licenses which is searched by default.
|
||||
If you save your license elsewhere, perhaps under an NFS folder, set
|
||||
environment variable **INTEL_LICENSE_FILE** to the full path to your
|
||||
license file prior to starting the installation or use the
|
||||
configuration file directive ``ACTIVATION_LICENSE_FILE`` to specify the
|
||||
full pathname to the license file.
|
||||
|
||||
Options for ``ACTIVATION_TYPE`` are ``{ exist_lic, license_file, server_lic,
|
||||
serial_number, trial_lic }``
|
||||
|
||||
``exist_lic``
|
||||
directs the installer to search for a valid license on the server.
|
||||
Searches will utilize the environment variable **INTEL_LICENSE_FILE**,
|
||||
search the default license directory /opt/intel/licenses, or use the
|
||||
``ACTIVATION_LICENSE_FILE`` directive to find a valid license file.
|
||||
|
||||
``license_file``
|
||||
is similar to exist_lic but directs the installer to use
|
||||
``ACTIVATION_LICENSE_FILE`` to find the license file.
|
||||
|
||||
``server_lic``
|
||||
is similar to exist_lic and exist_lic but directs the installer that
|
||||
this is a client installation and a floating license server will be
|
||||
contacted to active the product. This option will contact your
|
||||
floating license server on your network to retrieve the license
|
||||
information. BEFORE using this option make sure your client is
|
||||
correctly set up for your network including all networking, routing,
|
||||
name service, and firewall configuration. Insure that your client has
|
||||
direct access to your floating license server and that firewalls are
|
||||
set up to allow TCP/IP access for the 2 license server ports.
|
||||
server_lic will use **INTEL_LICENSE_FILE** containing a port@host format
|
||||
OR a client license file. The formats for these are described here
|
||||
https://software.intel.com/en-us/articles/licensing-setting-up-the-client-floating-license
|
||||
|
||||
``serial_number``
|
||||
directs the installer to use directive ``ACTIVATION_SERIAL_NUMBER`` for
|
||||
activation. This method will require the installer to contact an
|
||||
external Intel activation server over the Internet to confirm your
|
||||
serial number. Due to user and company firewalls, this method is more
|
||||
complex and hence error prone of the available activation methods. We
|
||||
highly recommend using a license file or license server for activation
|
||||
instead.
|
||||
|
||||
``trial_lic``
|
||||
is used only if you do not have an existing license and intend to
|
||||
temporarily evaluate the compiler. This method creates a temporary
|
||||
trial license in Trusted Storage on your system.
|
||||
|
||||
...
|
||||
|
||||
*******************
|
||||
vars files
|
||||
*******************
|
||||
|
||||
Intel's product packages contain a number of shell initialization files let's call them vars files.
|
||||
|
||||
There are three kinds:
|
||||
|
||||
#. Component-specific vars files, such as `mklvars` or `tbbvars`.
|
||||
#. Toplevel vars files such as "psxevars". They will scan for all
|
||||
component-specific vars files associated with the product, and source them
|
||||
if found.
|
||||
#. Symbolic links to either of them. Links may appear under a different name
|
||||
for backward compatibility.
|
||||
|
||||
At present, IntelPackage class is only concerned with the toplevel vars files,
|
||||
generally found in the product's toplevel bin/ directory.
|
||||
|
||||
For reference, here is an overview of the names and locations of the vars files
|
||||
in the 2018 product releases, as seen for Spack-native installation. NB: May be
|
||||
incomplete as some components may have been omitted during installation.
|
||||
|
||||
Names of vars files seen::
|
||||
|
||||
$ cd opt/spack/linux-centos6-x86_64
|
||||
$ find intel* -name \*vars.sh -printf '%f\n' | sort -u | nl
|
||||
1 advixe-vars.sh
|
||||
2 amplxe-vars.sh
|
||||
3 apsvars.sh
|
||||
4 compilervars.sh
|
||||
5 daalvars.sh
|
||||
6 debuggervars.sh
|
||||
7 iccvars.sh
|
||||
8 ifortvars.sh
|
||||
9 inspxe-vars.sh
|
||||
10 ippvars.sh
|
||||
11 mklvars.sh
|
||||
12 mpivars.sh
|
||||
13 pstlvars.sh
|
||||
14 psxevars.sh
|
||||
15 sep_vars.sh
|
||||
16 tbbvars.sh
|
||||
|
||||
Names and locations of vars files, sorted by Spack package name::
|
||||
|
||||
$ cd opt/spack/linux-centos6-x86_64
|
||||
$ find intel* -name \*vars.sh -printf '%y\t%-15f\t%h\n' \
|
||||
| cut -d/ -f1,4- \
|
||||
| sed '/iccvars\|ifortvars/d; s,/,\t\t,; s,\.sh,,; s, */\(intel[/-]\),\1,' \
|
||||
| sort -k3,3 -k2,2 \
|
||||
| nl \
|
||||
| awk '{printf "%6i %-2s %-16s %-24s %s\n", $1, $2, $3, $4, $5}'
|
||||
|
||||
--------------------------------------------------------------------------------------------------------
|
||||
item no.
|
||||
file or link
|
||||
name of vars file
|
||||
Spack package name
|
||||
dir relative to Spack install dir
|
||||
--------------------------------------------------------------------------------------------------------
|
||||
|
||||
1 f mpivars intel compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin
|
||||
2 f mpivars intel compilers_and_libraries_2018.1.163/linux/mpirt/bin/ia32_lin
|
||||
3 f tbbvars intel compilers_and_libraries_2018.1.163/linux/tbb/bin
|
||||
4 f pstlvars intel compilers_and_libraries_2018.1.163/linux/pstl/bin
|
||||
5 f compilervars intel compilers_and_libraries_2018.1.163/linux/bin
|
||||
6 f compilervars intel compilers_and_libraries_2018/linux/bin
|
||||
7 l compilervars intel bin
|
||||
8 f daalvars intel-daal compilers_and_libraries_2018.2.199/linux/daal/bin
|
||||
9 f psxevars intel-daal parallel_studio_xe_2018.2.046/bin
|
||||
10 l psxevars intel-daal parallel_studio_xe_2018.2.046
|
||||
11 f compilervars intel-daal compilers_and_libraries_2018.2.199/linux/bin
|
||||
12 f compilervars intel-daal compilers_and_libraries_2018/linux/bin
|
||||
13 l compilervars intel-daal bin
|
||||
14 f ippvars intel-ipp compilers_and_libraries_2018.2.199/linux/ipp/bin
|
||||
15 f psxevars intel-ipp parallel_studio_xe_2018.2.046/bin
|
||||
16 l psxevars intel-ipp parallel_studio_xe_2018.2.046
|
||||
17 f compilervars intel-ipp compilers_and_libraries_2018.2.199/linux/bin
|
||||
18 f compilervars intel-ipp compilers_and_libraries_2018/linux/bin
|
||||
19 l compilervars intel-ipp bin
|
||||
20 f mklvars intel-mkl compilers_and_libraries_2018.2.199/linux/mkl/bin
|
||||
21 f psxevars intel-mkl parallel_studio_xe_2018.2.046/bin
|
||||
22 l psxevars intel-mkl parallel_studio_xe_2018.2.046
|
||||
23 f compilervars intel-mkl compilers_and_libraries_2018.2.199/linux/bin
|
||||
24 f compilervars intel-mkl compilers_and_libraries_2018/linux/bin
|
||||
25 l compilervars intel-mkl bin
|
||||
26 f mpivars intel-mpi compilers_and_libraries_2018.2.199/linux/mpi_2019/intel64/bin
|
||||
27 f mpivars intel-mpi compilers_and_libraries_2018.2.199/linux/mpi/intel64/bin
|
||||
28 f psxevars intel-mpi parallel_studio_xe_2018.2.046/bin
|
||||
29 l psxevars intel-mpi parallel_studio_xe_2018.2.046
|
||||
30 f compilervars intel-mpi compilers_and_libraries_2018.2.199/linux/bin
|
||||
31 f compilervars intel-mpi compilers_and_libraries_2018/linux/bin
|
||||
32 l compilervars intel-mpi bin
|
||||
33 f apsvars intel-parallel-studio vtune_amplifier_2018.1.0.535340
|
||||
34 l apsvars intel-parallel-studio performance_snapshots_2018.1.0.535340
|
||||
35 f ippvars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/ipp/bin
|
||||
36 f ippvars intel-parallel-studio composer_xe_2015.6.233/ipp/bin
|
||||
37 f mklvars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/mkl/bin
|
||||
38 f mklvars intel-parallel-studio composer_xe_2015.6.233/mkl/bin
|
||||
39 f mpivars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin
|
||||
40 f mpivars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/mpirt/bin/ia32_lin
|
||||
41 f tbbvars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/tbb/bin
|
||||
42 f tbbvars intel-parallel-studio composer_xe_2015.6.233/tbb/bin
|
||||
43 f daalvars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/daal/bin
|
||||
44 f pstlvars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/pstl/bin
|
||||
45 f psxevars intel-parallel-studio parallel_studio_xe_2018.1.038/bin
|
||||
46 l psxevars intel-parallel-studio parallel_studio_xe_2018.1.038
|
||||
47 f sep_vars intel-parallel-studio vtune_amplifier_2018.1.0.535340
|
||||
48 f sep_vars intel-parallel-studio vtune_amplifier_2018.1.0.535340/target/android_v4.1_x86_64
|
||||
49 f advixe-vars intel-parallel-studio advisor_2018.1.1.535164
|
||||
50 f amplxe-vars intel-parallel-studio vtune_amplifier_2018.1.0.535340
|
||||
51 f inspxe-vars intel-parallel-studio inspector_2018.1.1.535159
|
||||
52 f compilervars intel-parallel-studio compilers_and_libraries_2018.1.163/linux/bin
|
||||
53 f compilervars intel-parallel-studio compilers_and_libraries_2018/linux/bin
|
||||
54 l compilervars intel-parallel-studio bin
|
||||
55 f debuggervars intel-parallel-studio debugger_2018/bin
|
||||
|
||||
|
||||
********************
|
||||
MPI linkage
|
||||
********************
|
||||
|
||||
|
||||
Library selection
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the Spack code so far, the library selections for MPI are:
|
||||
|
||||
::
|
||||
|
||||
libnames = ['libmpifort', 'libmpi']
|
||||
if 'cxx' in self.spec.last_query.extra_parameters:
|
||||
libnames = ['libmpicxx'] + libnames
|
||||
return find_libraries(libnames,
|
||||
root=self.component_lib_dir('mpi'),
|
||||
shared=True, recursive=False)
|
||||
|
||||
The problem is that there are multiple library versions under ``component_lib_dir``::
|
||||
|
||||
$ cd $I_MPI_ROOT
|
||||
$ find . -name libmpi.so | sort
|
||||
./intel64/lib/debug/libmpi.so
|
||||
./intel64/lib/debug_mt/libmpi.so
|
||||
./intel64/lib/libmpi.so
|
||||
./intel64/lib/release/libmpi.so
|
||||
./intel64/lib/release_mt/libmpi.so
|
||||
|
||||
"mt" refers to multi-threading, not in the explicit sense but in the sense of being thread-safe::
|
||||
|
||||
$ mpiifort -help | grep mt
|
||||
-mt_mpi link the thread safe version of the Intel(R) MPI Library
|
||||
|
||||
Well, why should we not inspect what the canonical script does? The wrapper
|
||||
has its own hardcoded "prefix=..." and can thus tell us what it will do, from a
|
||||
*wiped environment* no less!::
|
||||
|
||||
$ env - intel64/bin/mpiicc -show hello.c | ld-unwrap-args
|
||||
icc 'hello.c' \
|
||||
-I/opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/include \
|
||||
-L/opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/lib/release_mt \
|
||||
-L/opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/lib \
|
||||
-Xlinker --enable-new-dtags \
|
||||
-Xlinker -rpath=/opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/lib/release_mt \
|
||||
-Xlinker -rpath=/opt/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/lib \
|
||||
-Xlinker -rpath=/opt/intel/mpi-rt/2017.0.0/intel64/lib/release_mt \
|
||||
-Xlinker -rpath=/opt/intel/mpi-rt/2017.0.0/intel64/lib \
|
||||
-lmpifort \
|
||||
-lmpi \
|
||||
-lmpigi \
|
||||
-ldl \
|
||||
-lrt \
|
||||
-lpthread
|
||||
|
||||
|
||||
MPI Wrapper options
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For reference, here's the wrapper's builtin help output::
|
||||
|
||||
$ mpiifort -help
|
||||
Simple script to compile and/or link MPI programs.
|
||||
Usage: mpiifort [options] <files>
|
||||
----------------------------------------------------------------------------
|
||||
The following options are supported:
|
||||
-fc=<name> | -f90=<name>
|
||||
specify a FORTRAN compiler name: i.e. -fc=ifort
|
||||
-echo print the scripts during their execution
|
||||
-show show command lines without real calling
|
||||
-config=<name> specify a configuration file: i.e. -config=ifort for mpif90-ifort.conf file
|
||||
-v print version info of mpiifort and its native compiler
|
||||
-profile=<name> specify a profile configuration file (an MPI profiling
|
||||
library): i.e. -profile=myprofile for the myprofile.cfg file.
|
||||
As a special case, lib<name>.so or lib<name>.a may be used
|
||||
if the library is found
|
||||
-check_mpi link against the Intel(R) Trace Collector (-profile=vtmc).
|
||||
-static_mpi link the Intel(R) MPI Library statically
|
||||
-mt_mpi link the thread safe version of the Intel(R) MPI Library
|
||||
-ilp64 link the ILP64 support of the Intel(R) MPI Library
|
||||
-no_ilp64 disable ILP64 support explicitly
|
||||
-fast the same as -static_mpi + pass -fast option to a compiler.
|
||||
-t or -trace
|
||||
link against the Intel(R) Trace Collector
|
||||
-trace-imbalance
|
||||
link against the Intel(R) Trace Collector imbalance library
|
||||
(-profile=vtim)
|
||||
-dynamic_log link against the Intel(R) Trace Collector dynamically
|
||||
-static use static linkage method
|
||||
-nostrip turn off the debug information stripping during static linking
|
||||
-O enable optimization
|
||||
-link_mpi=<name>
|
||||
link against the specified version of the Intel(R) MPI Library
|
||||
All other options will be passed to the compiler without changing.
|
||||
----------------------------------------------------------------------------
|
||||
The following environment variables are used:
|
||||
I_MPI_ROOT the Intel(R) MPI Library installation directory path
|
||||
I_MPI_F90 or MPICH_F90
|
||||
the path/name of the underlying compiler to be used
|
||||
I_MPI_FC_PROFILE or I_MPI_F90_PROFILE or MPIF90_PROFILE
|
||||
the name of profile file (without extension)
|
||||
I_MPI_COMPILER_CONFIG_DIR
|
||||
the folder which contains configuration files *.conf
|
||||
I_MPI_TRACE_PROFILE
|
||||
specify a default profile for the -trace option
|
||||
I_MPI_CHECK_PROFILE
|
||||
specify a default profile for the -check_mpi option
|
||||
I_MPI_CHECK_COMPILER
|
||||
enable compiler setup checks
|
||||
I_MPI_LINK specify the version of the Intel(R) MPI Library
|
||||
I_MPI_DEBUG_INFO_STRIP
|
||||
turn on/off the debug information stripping during static linking
|
||||
I_MPI_FCFLAGS
|
||||
special flags needed for compilation
|
||||
I_MPI_LDFLAGS
|
||||
special flags needed for linking
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
|
||||
Side Note: MPI version divergence in 2015 release
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The package `intel-parallel-studio@cluster.2015.6` contains both a full MPI
|
||||
development version in `$prefix/impi` and an MPI Runtime under the
|
||||
`composer_xe*` suite directory. Curiously, these have *different versions*,
|
||||
with a release date nearly 1 year apart::
|
||||
|
||||
$ $SPACK_ROOT/...uaxaw7/impi/5.0.3.049/intel64/bin/mpiexec --version
|
||||
Intel(R) MPI Library for Linux* OS, Version 5.0 Update 3 Build 20150804 (build id: 12452)
|
||||
Copyright (C) 2003-2015, Intel Corporation. All rights reserved.
|
||||
|
||||
$ $SPACK_ROOT/...uaxaw7/composer_xe_2015.6.233/mpirt/bin/intel64/mpiexec --version
|
||||
Intel(R) MPI Library for Linux* OS, Version 5.0 Update 1 Build 20140709
|
||||
Copyright (C) 2003-2014, Intel Corporation. All rights reserved.
|
||||
|
||||
I'm not sure what to make of it.
|
||||
|
||||
|
||||
**************
|
||||
macOS support
|
||||
**************
|
||||
|
||||
- On macOS, the Spack methods here only include support to integrate an
|
||||
externally installed MKL.
|
||||
|
||||
- URLs in child packages will be Linux-specific; macOS download packages
|
||||
are located in differently numbered dirs and are named m_*.dmg.
|
File diff suppressed because it is too large
Load Diff
@ -22,10 +22,7 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class IntelDaal(IntelPackage):
|
||||
@ -57,36 +54,3 @@ class IntelDaal(IntelPackage):
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8687/l_daal_2016.2.181.tgz")
|
||||
|
||||
provides('daal')
|
||||
|
||||
@property
|
||||
def license_required(self):
|
||||
# The Intel libraries are provided without requiring a license as of
|
||||
# version 2017.2. Trying to specify the license will fail. See:
|
||||
# https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
|
||||
if self.version >= Version('2017.2'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source daal/bin/daalvars.sh intel64
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
daalvars = os.path.join(self.prefix.daal.bin, 'daalvars.sh')
|
||||
|
||||
if os.path.isfile(daalvars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
daalvars, 'intel64'))
|
||||
|
@ -22,10 +22,7 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class IntelIpp(IntelPackage):
|
||||
@ -49,40 +46,8 @@ class IntelIpp(IntelPackage):
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11031/l_ipp_2017.1.132.tgz")
|
||||
version('2017.0.098', 'e7be757ebe351d9f9beed7efdc7b7118',
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9663/l_ipp_2017.0.098.tgz")
|
||||
# built from parallel_studio_xe_2016.3.067
|
||||
version('9.0.3.210', '0e1520dd3de7f811a6ef6ebc7aa429a3',
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9067/l_ipp_9.0.3.210.tgz")
|
||||
|
||||
provides('ipp')
|
||||
|
||||
@property
|
||||
def license_required(self):
|
||||
# The Intel libraries are provided without requiring a license as of
|
||||
# version 2017.2. Trying to specify the license will fail. See:
|
||||
# https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
|
||||
if self.version >= Version('2017.2'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source ipp/bin/ippvars.sh intel64
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
ippvars = os.path.join(self.prefix.ipp.bin, 'ippvars.sh')
|
||||
|
||||
if os.path.isfile(ippvars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
ippvars, 'intel64'))
|
||||
|
@ -22,11 +22,9 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import os
|
||||
import sys
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class IntelMkl(IntelPackage):
|
||||
@ -52,8 +50,10 @@ class IntelMkl(IntelPackage):
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11024/l_mkl_2017.1.132.tgz")
|
||||
version('2017.0.098', '3cdcb739ab5ab1e047eb130b9ffdd8d0',
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9662/l_mkl_2017.0.098.tgz")
|
||||
# built from parallel_studio_xe_2016.3.x
|
||||
version('11.3.3.210', 'f72546df27f5ebb0941b5d21fd804e34',
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9068/l_mkl_11.3.3.210.tgz")
|
||||
# built from parallel_studio_xe_2016.2.062
|
||||
version('11.3.2.181', '536dbd82896d6facc16de8f961d17d65',
|
||||
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8711/l_mkl_11.3.2.181.tgz")
|
||||
|
||||
@ -62,7 +62,7 @@ class IntelMkl(IntelPackage):
|
||||
variant(
|
||||
'threads', default='none',
|
||||
description='Multithreading support',
|
||||
values=('openmp', 'none'),
|
||||
values=('openmp', 'tbb', 'none'),
|
||||
multi=False
|
||||
)
|
||||
|
||||
@ -74,166 +74,3 @@ class IntelMkl(IntelPackage):
|
||||
if sys.platform == 'darwin':
|
||||
# there is no libmkl_gnu_thread on macOS
|
||||
conflicts('threads=openmp', when='%gcc')
|
||||
|
||||
@property
|
||||
def license_required(self):
|
||||
# The Intel libraries are provided without requiring a license as of
|
||||
# version 2017.2. Trying to specify the license will fail. See:
|
||||
# https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
|
||||
if self.version >= Version('2017.2'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
@property
|
||||
def blas_libs(self):
|
||||
spec = self.spec
|
||||
prefix = self.prefix
|
||||
shared = '+shared' in spec
|
||||
|
||||
if '+ilp64' in spec:
|
||||
mkl_integer = ['libmkl_intel_ilp64']
|
||||
else:
|
||||
mkl_integer = ['libmkl_intel_lp64']
|
||||
|
||||
mkl_threading = ['libmkl_sequential']
|
||||
|
||||
omp_libs = LibraryList([])
|
||||
|
||||
if spec.satisfies('threads=openmp'):
|
||||
if '%intel' in spec:
|
||||
mkl_threading = ['libmkl_intel_thread']
|
||||
omp_threading = ['libiomp5']
|
||||
|
||||
if sys.platform != 'darwin':
|
||||
omp_root = prefix.compilers_and_libraries.linux.lib.intel64
|
||||
else:
|
||||
omp_root = prefix.lib
|
||||
omp_libs = find_libraries(
|
||||
omp_threading, root=omp_root, shared=shared)
|
||||
elif '%gcc' in spec:
|
||||
mkl_threading = ['libmkl_gnu_thread']
|
||||
|
||||
gcc = Executable(self.compiler.cc)
|
||||
libgomp = gcc('--print-file-name', 'libgomp.{0}'.format(
|
||||
dso_suffix), output=str)
|
||||
omp_libs = LibraryList(libgomp)
|
||||
|
||||
# TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
|
||||
|
||||
if sys.platform != 'darwin':
|
||||
mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
|
||||
else:
|
||||
mkl_root = prefix.mkl.lib
|
||||
|
||||
mkl_libs = find_libraries(
|
||||
mkl_integer + mkl_threading + ['libmkl_core'],
|
||||
root=mkl_root,
|
||||
shared=shared
|
||||
)
|
||||
|
||||
# Intel MKL link line advisor recommends these system libraries
|
||||
system_libs = find_system_libraries(
|
||||
['libpthread', 'libm', 'libdl'],
|
||||
shared=shared
|
||||
)
|
||||
|
||||
return mkl_libs + omp_libs + system_libs
|
||||
|
||||
@property
|
||||
def lapack_libs(self):
|
||||
return self.blas_libs
|
||||
|
||||
@property
|
||||
def scalapack_libs(self):
|
||||
libnames = ['libmkl_scalapack']
|
||||
|
||||
# Intel MKL does not directly depend on mpi but the scalapack
|
||||
# interface does and the corresponding BLACS library changes
|
||||
# depending on the MPI implementation we are using. We need then to
|
||||
# inspect the root package which asked for Scalapack and check which
|
||||
# MPI it depends on.
|
||||
root = self.spec.root
|
||||
if sys.platform == 'darwin' and '^mpich' in root:
|
||||
# MKL 2018 supports only MPICH on darwin
|
||||
libnames.append('libmkl_blacs_mpich')
|
||||
elif '^openmpi' in root:
|
||||
libnames.append('libmkl_blacs_openmpi')
|
||||
elif '^mpich@1' in root:
|
||||
libnames.append('libmkl_blacs')
|
||||
elif '^mpich@2:' in root:
|
||||
libnames.append('libmkl_blacs_intelmpi')
|
||||
elif '^mvapich2' in root:
|
||||
libnames.append('libmkl_blacs_intelmpi')
|
||||
elif '^mpt' in root:
|
||||
libnames.append('libmkl_blacs_sgimpt')
|
||||
elif '^intel-mpi' in root:
|
||||
libnames.append('libmkl_blacs_intelmpi')
|
||||
else:
|
||||
raise InstallError('No MPI found for scalapack')
|
||||
|
||||
integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
|
||||
mkl_root = self.prefix.mkl.lib if sys.platform == 'darwin' else \
|
||||
self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
|
||||
|
||||
shared = True if '+shared' in self.spec else False
|
||||
|
||||
libs = find_libraries(
|
||||
['{0}_{1}'.format(l, integer) for l in libnames],
|
||||
root=mkl_root,
|
||||
shared=shared
|
||||
)
|
||||
|
||||
return libs
|
||||
|
||||
@property
|
||||
def headers(self):
|
||||
prefix = self.spec.prefix
|
||||
if sys.platform != 'darwin':
|
||||
include_dir = prefix.compilers_and_libraries.linux.mkl.include
|
||||
else:
|
||||
include_dir = prefix.include
|
||||
|
||||
cblas_h = join_path(include_dir, 'mkl_cblas.h')
|
||||
lapacke_h = join_path(include_dir, 'mkl_lapacke.h')
|
||||
return HeaderList([cblas_h, lapacke_h])
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
# set up MKLROOT for everyone using MKL package
|
||||
if sys.platform == 'darwin':
|
||||
mkl_lib = self.prefix.mkl.lib
|
||||
mkl_root = self.prefix.mkl
|
||||
else:
|
||||
mkl_lib = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
|
||||
mkl_root = self.prefix.compilers_and_libraries.linux.mkl
|
||||
|
||||
spack_env.set('MKLROOT', mkl_root)
|
||||
spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_lib)
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source mkl/bin/mklvars.sh intel64
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
mklvars = os.path.join(self.prefix.mkl.bin, 'mklvars.sh')
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
if os.path.isfile(mklvars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
mklvars))
|
||||
else:
|
||||
if os.path.isfile(mklvars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
mklvars, 'intel64'))
|
||||
|
@ -22,10 +22,7 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class IntelMpi(IntelPackage):
|
||||
@ -49,95 +46,21 @@ class IntelMpi(IntelPackage):
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11334/l_mpi_2017.2.174.tgz')
|
||||
version('2017.1.132', 'd5e941ac2bcf7c5576f85f6bcfee4c18',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11014/l_mpi_2017.1.132.tgz')
|
||||
# built from parallel_studio_xe_2016.3.068
|
||||
version('5.1.3.223', '4316e78533a932081b1a86368e890800',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz')
|
||||
|
||||
provides('mpi')
|
||||
|
||||
@property
|
||||
def license_required(self):
|
||||
# The Intel libraries are provided without requiring a license as of
|
||||
# version 2017.2. Trying to specify the license will fail. See:
|
||||
# https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
|
||||
if self.version >= Version('2017.2'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
@property
|
||||
def mpi_libs(self):
|
||||
mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
|
||||
query_parameters = self.spec.last_query.extra_parameters
|
||||
libraries = ['libmpifort', 'libmpi']
|
||||
|
||||
if 'cxx' in query_parameters:
|
||||
libraries = ['libmpicxx'] + libraries
|
||||
|
||||
return find_libraries(
|
||||
libraries, root=mpi_root, shared=True, recursive=True
|
||||
)
|
||||
|
||||
@property
|
||||
def mpi_headers(self):
|
||||
# recurse from self.prefix will find too many things for all the
|
||||
# supported sub-architectures like 'mic'
|
||||
mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
|
||||
return find_headers('mpi', root=mpi_root, recursive=False)
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
spack_env.set('I_MPI_CC', spack_cc)
|
||||
spack_env.set('I_MPI_CXX', spack_cxx)
|
||||
spack_env.set('I_MPI_F77', spack_fc)
|
||||
spack_env.set('I_MPI_F90', spack_f77)
|
||||
spack_env.set('I_MPI_FC', spack_fc)
|
||||
|
||||
def setup_dependent_package(self, module, dep_spec):
|
||||
# Intel comes with 2 different flavors of MPI wrappers:
|
||||
#
|
||||
# * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
|
||||
# the Intel compilers.
|
||||
# * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
|
||||
# compilers to wrap using I_MPI_CC and friends. By default,
|
||||
# wraps around the GCC compilers.
|
||||
#
|
||||
# In theory, these should be equivalent as long as I_MPI_CC
|
||||
# and friends are set to point to the Intel compilers, but in
|
||||
# practice, mpicc fails to compile some applications while
|
||||
# mpiicc works.
|
||||
bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
|
||||
|
||||
if self.compiler.name == 'intel':
|
||||
self.spec.mpicc = bindir.mpiicc
|
||||
self.spec.mpicxx = bindir.mpiicpc
|
||||
self.spec.mpifc = bindir.mpiifort
|
||||
self.spec.mpif77 = bindir.mpiifort
|
||||
else:
|
||||
self.spec.mpicc = bindir.mpicc
|
||||
self.spec.mpicxx = bindir.mpicxx
|
||||
self.spec.mpifc = bindir.mpif90
|
||||
self.spec.mpif77 = bindir.mpif77
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source compilers_and_libraries/linux/mpi/intel64/bin/mpivars.sh
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
mpivars = os.path.join(
|
||||
self.prefix.compilers_and_libraries.linux.mpi.intel64.bin,
|
||||
'mpivars.sh')
|
||||
|
||||
if os.path.isfile(mpivars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
mpivars))
|
||||
def setup_dependent_environment(self, *args):
|
||||
# Handle in callback, conveying client's compilers in additional arg.
|
||||
# CAUTION - DUP code in:
|
||||
# ../intel-mpi/package.py
|
||||
# ../intel-parallel-studio/package.py
|
||||
self._setup_dependent_env_callback(*args, compilers_of_client={
|
||||
'CC': spack_cc,
|
||||
'CXX': spack_cxx,
|
||||
'F77': spack_f77,
|
||||
'F90': spack_fc,
|
||||
'FC': spack_fc,
|
||||
})
|
||||
|
@ -22,11 +22,7 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import glob
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class IntelParallelStudio(IntelPackage):
|
||||
@ -34,80 +30,85 @@ class IntelParallelStudio(IntelPackage):
|
||||
|
||||
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
|
||||
|
||||
version('professional.2018.3', 'e0fb828de0a5f238f775b6122cc7e2c5',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12999/parallel_studio_xe_2018_update3_professional_edition.tgz')
|
||||
version('cluster.2018.3', '7112837d20a100b895d9cd9ba9b6748d',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12998/parallel_studio_xe_2018_update3_cluster_edition.tgz')
|
||||
version('composer.2018.3', '234223cc470717c2095456d9f048d690',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
|
||||
version('professional.2018.1', '91669ff7afbfd07868a429a122c90357',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12375/parallel_studio_xe_2018_update1_professional_edition.tgz')
|
||||
version('cluster.2018.1', '9c007011e0e3fc72747b58756fbf01cd',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12374/parallel_studio_xe_2018_update1_cluster_edition.tgz')
|
||||
version('composer.2018.1', '28cb807126d713350f4aa6f9f167448a',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
|
||||
version('professional.2018.0', '9a233854e9218937bc5f46f02b3c7542',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12062/parallel_studio_xe_2018_professional_edition.tgz')
|
||||
version('cluster.2018.0', 'fa9baeb83dd2e8e4a464e3db38f28d0f',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12058/parallel_studio_xe_2018_cluster_edition.tgz')
|
||||
version('composer.2018.0', '31ba768fba6e7322957b03feaa3add28',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
|
||||
version('cluster.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
|
||||
version('professional.2017.4', '27398416078e1e4005afced3e9a6df7e',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
|
||||
version('cluster.2017.4', '27398416078e1e4005afced3e9a6df7e',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
|
||||
version('composer.2017.4', 'd03d351809e182c481dc65e07376d9a2',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
|
||||
version('professional.2017.3', '691874735458d3e88fe0bcca4438b2a9',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
|
||||
version('cluster.2017.3', '691874735458d3e88fe0bcca4438b2a9',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
|
||||
version('composer.2017.3', '52344df122c17ddff3687f84ceb21623',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
|
||||
version('professional.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
|
||||
version('cluster.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
|
||||
version('composer.2017.2', '2891ab1ece43eb61b6ab892f07c47f01',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
|
||||
version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
|
||||
version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
|
||||
version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
|
||||
version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
|
||||
version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
|
||||
version('composer.2017.0', 'b67da0065a17a05f110ed1d15c3c6312',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
|
||||
version('professional.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
|
||||
version('cluster.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
|
||||
version('composer.2016.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
|
||||
version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
|
||||
version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
|
||||
version('composer.2016.3', '3208eeabee951fc27579177b593cefe9',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
|
||||
version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
|
||||
version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
|
||||
version('composer.2016.2', '1133fb831312eb519f7da897fec223fa',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
|
||||
version('professional.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
|
||||
version('cluster.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
|
||||
version('composer.2015.6', 'da9f8600c18d43d58fba0488844f79c9',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
|
||||
# As of 2016, the product comes in three "editions" that vary by scope.
|
||||
#
|
||||
# In Spack, select the edition via the version number in the spec, e.g.:
|
||||
# intel-parallel-studio@cluster.2018
|
||||
|
||||
# Cluster Edition (top tier; all components included)
|
||||
version('cluster.2018.3', '7112837d20a100b895d9cd9ba9b6748d', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12998/parallel_studio_xe_2018_update3_cluster_edition.tgz')
|
||||
version('cluster.2018.2', '3b8d93a3fa10869dde024b739b96a9c4', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12717/parallel_studio_xe_2018_update2_cluster_edition.tgz')
|
||||
version('cluster.2018.1', '9c007011e0e3fc72747b58756fbf01cd', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12374/parallel_studio_xe_2018_update1_cluster_edition.tgz')
|
||||
version('cluster.2018.0', 'fa9baeb83dd2e8e4a464e3db38f28d0f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12058/parallel_studio_xe_2018_cluster_edition.tgz')
|
||||
#
|
||||
version('cluster.2017.7', '158461b000b31f0ef8169b6f0277bfb5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12856/parallel_studio_xe_2017_update7.tgz')
|
||||
version('cluster.2017.6', 'b0bbddeec3e78a84b967c9ca70dade77', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12534/parallel_studio_xe_2017_update6.tgz')
|
||||
version('cluster.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
|
||||
version('cluster.2017.4', '27398416078e1e4005afced3e9a6df7e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
|
||||
version('cluster.2017.3', '691874735458d3e88fe0bcca4438b2a9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
|
||||
version('cluster.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
|
||||
version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
|
||||
version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
|
||||
#
|
||||
version('cluster.2016.4', '16a641a06b156bb647c8a56e71f3bb33', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
|
||||
version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
|
||||
version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
|
||||
version('cluster.2016.1', '83b260ef3fcfd4e30afbeb7eb31b6b20', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8365/parallel_studio_xe_2016_update1.tgz')
|
||||
version('cluster.2016.0', '00b4de9727a906a3aff468c26dd3f89c', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/7997/parallel_studio_xe_2016.tgz')
|
||||
#
|
||||
version('cluster.2015.6', 'd460f362c30017b60f85da2e51ad25bf', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
|
||||
version('cluster.2015.1', '542b78c86beff9d7b01076a7be9c6ddc', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4992/parallel_studio_xe_2015_update1.tgz')
|
||||
|
||||
# Professional Edition (middle tier; excluded: MPI/TAC/Cluster Checker)
|
||||
#
|
||||
# NB: Pre-2018 download packages for Professional are the same as for
|
||||
# Cluster; differences manifest only in the tokens present in the license
|
||||
# file delivered as part of the purchase.
|
||||
version('professional.2018.3', 'e0fb828de0a5f238f775b6122cc7e2c5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12999/parallel_studio_xe_2018_update3_professional_edition.tgz')
|
||||
version('professional.2018.2', '91ed14aeb6157d60a0ec39929d0bc778', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12718/parallel_studio_xe_2018_update2_professional_edition.tgz')
|
||||
version('professional.2018.1', '91669ff7afbfd07868a429a122c90357', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12375/parallel_studio_xe_2018_update1_professional_edition.tgz')
|
||||
version('professional.2018.0', '9a233854e9218937bc5f46f02b3c7542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12062/parallel_studio_xe_2018_professional_edition.tgz')
|
||||
#
|
||||
version('professional.2017.7', '158461b000b31f0ef8169b6f0277bfb5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12856/parallel_studio_xe_2017_update7.tgz')
|
||||
version('professional.2017.6', 'b0bbddeec3e78a84b967c9ca70dade77', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12534/parallel_studio_xe_2017_update6.tgz')
|
||||
version('professional.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
|
||||
version('professional.2017.4', '27398416078e1e4005afced3e9a6df7e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
|
||||
version('professional.2017.3', '691874735458d3e88fe0bcca4438b2a9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
|
||||
version('professional.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
|
||||
version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
|
||||
version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
|
||||
#
|
||||
version('professional.2016.4', '16a641a06b156bb647c8a56e71f3bb33', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
|
||||
version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
|
||||
version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
|
||||
version('professional.2016.1', '83b260ef3fcfd4e30afbeb7eb31b6b20', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8365/parallel_studio_xe_2016_update1.tgz')
|
||||
version('professional.2016.0', '00b4de9727a906a3aff468c26dd3f89c', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/7997/parallel_studio_xe_2016.tgz')
|
||||
#
|
||||
version('professional.2015.6', 'd460f362c30017b60f85da2e51ad25bf', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
|
||||
version('professional.2015.1', '542b78c86beff9d7b01076a7be9c6ddc', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4992/parallel_studio_xe_2015_update1.tgz')
|
||||
|
||||
# Composer Edition (basic tier; excluded: MPI/..., Advisor/Inspector/Vtune)
|
||||
version('composer.2018.3', '234223cc470717c2095456d9f048d690', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
|
||||
version('composer.2018.2', '76f820f53de4c1ff998229c983cf4f53', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12722/parallel_studio_xe_2018_update2_composer_edition.tgz')
|
||||
version('composer.2018.1', '28cb807126d713350f4aa6f9f167448a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
|
||||
version('composer.2018.0', '31ba768fba6e7322957b03feaa3add28', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
|
||||
#
|
||||
version('composer.2017.7', '4c02a4a29a8f2424f31baa23116a1001', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12860/parallel_studio_xe_2017_update7_composer_edition.tgz')
|
||||
version('composer.2017.6', 'd96cce0c3feef20091efde458f581a9f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12538/parallel_studio_xe_2017_update6_composer_edition.tgz')
|
||||
# version('composer.2017.5', -- TBD --
|
||||
version('composer.2017.4', 'd03d351809e182c481dc65e07376d9a2', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
|
||||
version('composer.2017.3', '52344df122c17ddff3687f84ceb21623', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
|
||||
version('composer.2017.2', '2891ab1ece43eb61b6ab892f07c47f01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
|
||||
version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
|
||||
version('composer.2017.0', 'b67da0065a17a05f110ed1d15c3c6312', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
|
||||
#
|
||||
version('composer.2016.4', '2bc9bfc9be9c1968a6e42efb4378f40e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
|
||||
version('composer.2016.3', '3208eeabee951fc27579177b593cefe9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
|
||||
version('composer.2016.2', '1133fb831312eb519f7da897fec223fa', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
|
||||
#
|
||||
# Pre-2016, the only product was "Composer XE"; dir structure is different.
|
||||
version('composer.2015.6', 'da9f8600c18d43d58fba0488844f79c9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
|
||||
version('composer.2015.1', '85beae681ae56411a8e791a7c44a5c0a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4933/l_compxe_2015.1.133.tgz')
|
||||
|
||||
# Generic Variants
|
||||
variant('rpath', default=True,
|
||||
@ -151,373 +152,46 @@ class IntelParallelStudio(IntelPackage):
|
||||
variant('vtune', default=False,
|
||||
description='Install the Intel VTune Amplifier XE')
|
||||
|
||||
provides('daal', when='+daal')
|
||||
provides('daal', when='+daal')
|
||||
provides('ipp', when='+ipp')
|
||||
|
||||
provides('ipp', when='+ipp')
|
||||
provides('mkl', when='+mkl')
|
||||
provides('blas', when='+mkl')
|
||||
provides('lapack', when='+mkl')
|
||||
provides('scalapack', when='+mkl')
|
||||
|
||||
provides('mkl', when='+mkl')
|
||||
provides('blas', when='+mkl')
|
||||
provides('lapack', when='+mkl')
|
||||
provides('scalapack', when='+mkl')
|
||||
provides('mpi', when='+mpi')
|
||||
provides('tbb', when='+tbb')
|
||||
|
||||
provides('mpi', when='+mpi')
|
||||
# For TBB, static linkage is not and has never been supported by Intel:
|
||||
# https://www.threadingbuildingblocks.org/faq/there-version-tbb-provides-statically-linked-libraries
|
||||
conflicts('+tbb', when='~shared')
|
||||
|
||||
provides('tbb', when='+tbb')
|
||||
|
||||
# The following components are not available in the Composer Edition
|
||||
conflicts('+advisor', when='@composer.0:composer.9999')
|
||||
conflicts('+clck', when='@composer.0:composer.9999')
|
||||
conflicts('+inspector', when='@composer.0:composer.9999')
|
||||
conflicts('+itac', when='@composer.0:composer.9999')
|
||||
conflicts('+mpi', when='@composer.0:composer.9999')
|
||||
conflicts('+vtune', when='@composer.0:composer.9999')
|
||||
|
||||
@property
|
||||
def blas_libs(self):
|
||||
spec = self.spec
|
||||
prefix = self.prefix
|
||||
shared = '+shared' in spec
|
||||
|
||||
if '+ilp64' in spec:
|
||||
mkl_integer = ['libmkl_intel_ilp64']
|
||||
else:
|
||||
mkl_integer = ['libmkl_intel_lp64']
|
||||
|
||||
mkl_threading = ['libmkl_sequential']
|
||||
|
||||
omp_libs = LibraryList([])
|
||||
|
||||
if spec.satisfies('threads=openmp'):
|
||||
if '%intel' in spec:
|
||||
mkl_threading = ['libmkl_intel_thread']
|
||||
omp_threading = ['libiomp5']
|
||||
|
||||
omp_root = prefix.compilers_and_libraries.linux.lib.intel64
|
||||
omp_libs = find_libraries(
|
||||
omp_threading, root=omp_root, shared=shared)
|
||||
elif '%gcc' in spec:
|
||||
mkl_threading = ['libmkl_gnu_thread']
|
||||
|
||||
gcc = Executable(self.compiler.cc)
|
||||
omp_libs = gcc('--print-file-name', 'libgomp.{0}'.format(
|
||||
dso_suffix), output=str)
|
||||
omp_libs = LibraryList(omp_libs)
|
||||
|
||||
# TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
|
||||
|
||||
mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
|
||||
|
||||
mkl_libs = find_libraries(
|
||||
mkl_integer + mkl_threading + ['libmkl_core'],
|
||||
root=mkl_root,
|
||||
shared=shared
|
||||
)
|
||||
|
||||
# Intel MKL link line advisor recommends these system libraries
|
||||
system_libs = find_system_libraries(
|
||||
['libpthread', 'libm', 'libdl'],
|
||||
shared=shared
|
||||
)
|
||||
|
||||
return mkl_libs + omp_libs + system_libs
|
||||
|
||||
@property
|
||||
def lapack_libs(self):
|
||||
return self.blas_libs
|
||||
|
||||
@property
|
||||
def scalapack_libs(self):
|
||||
libnames = ['libmkl_scalapack']
|
||||
if self.spec.satisfies('^openmpi'):
|
||||
libnames.append('libmkl_blacs_openmpi')
|
||||
elif self.spec.satisfies('^mpich@1'):
|
||||
libnames.append('libmkl_blacs')
|
||||
elif self.spec.satisfies('^mpich@2:'):
|
||||
libnames.append('libmkl_blacs_intelmpi')
|
||||
elif self.spec.satisfies('^mvapich2'):
|
||||
libnames.append('libmkl_blacs_intelmpi')
|
||||
elif self.spec.satisfies('^mpt'):
|
||||
libnames.append('libmkl_blacs_sgimpt')
|
||||
# TODO: ^intel-parallel-studio can mean intel mpi, a compiler or a lib
|
||||
# elif self.spec.satisfies('^intel-parallel-studio'):
|
||||
# libnames.append('libmkl_blacs_intelmpi')
|
||||
else:
|
||||
raise InstallError('No MPI found for scalapack')
|
||||
|
||||
integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
|
||||
mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
|
||||
shared = True if '+shared' in self.spec else False
|
||||
|
||||
libs = find_libraries(
|
||||
['{0}_{1}'.format(l, integer) for l in libnames],
|
||||
root=mkl_root,
|
||||
shared=shared
|
||||
)
|
||||
return libs
|
||||
|
||||
@property
|
||||
def mpi_libs(self):
|
||||
mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
|
||||
query_parameters = self.spec.last_query.extra_parameters
|
||||
libraries = ['libmpifort', 'libmpi']
|
||||
|
||||
if 'cxx' in query_parameters:
|
||||
libraries = ['libmpicxx'] + libraries
|
||||
|
||||
return find_libraries(
|
||||
libraries, root=mpi_root, shared=True, recursive=True
|
||||
)
|
||||
|
||||
@property
|
||||
def mpi_headers(self):
|
||||
# recurse from self.prefix will find too many things for all the
|
||||
# supported sub-architectures like 'mic'
|
||||
mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
|
||||
return find_headers('mpi', root=mpi_root, recursive=False)
|
||||
|
||||
@property
|
||||
def components(self):
|
||||
spec = self.spec
|
||||
edition = self.version[0]
|
||||
|
||||
# Intel(R) Compilers
|
||||
components = [
|
||||
# Common files
|
||||
'intel-comp-',
|
||||
'intel-openmp',
|
||||
|
||||
# C/C++
|
||||
'intel-icc',
|
||||
|
||||
# Fortran
|
||||
'intel-ifort',
|
||||
|
||||
# Parallel Studio Documentation and Licensing Files
|
||||
'intel-psxe',
|
||||
]
|
||||
|
||||
# Intel(R) Parallel Studio XE Suite Files and Documentation
|
||||
if edition == 'cluster':
|
||||
components.append('intel-icsxe')
|
||||
elif edition == 'professional':
|
||||
components.extend(['intel-ips', 'intel-ipsc', 'intel-ipsf'])
|
||||
elif edition == 'composer':
|
||||
components.extend([
|
||||
'intel-compxe', 'intel-ccompxe', 'intel-fcompxe'
|
||||
])
|
||||
|
||||
# Intel(R) Data Analytics Acceleration Library
|
||||
if '+daal' in spec:
|
||||
components.append('intel-daal')
|
||||
|
||||
# Intel(R) Debugger for Heterogeneous Compute
|
||||
if '+gdb' in spec:
|
||||
components.append('intel-gdb')
|
||||
|
||||
# Intel(R) Integrated Performance Primitives
|
||||
if '+ipp' in spec:
|
||||
components.extend(['intel-ipp', 'intel-crypto-ipp'])
|
||||
|
||||
# Intel(R) Math Kernel Library
|
||||
if '+mkl' in spec:
|
||||
components.append('intel-mkl')
|
||||
|
||||
# Intel(R) MPI Library
|
||||
if '+mpi' in spec:
|
||||
components.extend(['intel-mpi', 'intel-mpirt', 'intel-imb'])
|
||||
|
||||
# Intel(R) Threading Building Blocks
|
||||
if '+tbb' in spec:
|
||||
components.append('intel-tbb')
|
||||
|
||||
# Intel(R) Advisor
|
||||
if '+advisor' in spec:
|
||||
components.append('intel-advisor')
|
||||
|
||||
# Intel(R) Cluster Checker
|
||||
if '+clck' in spec:
|
||||
components.append('intel_clck')
|
||||
|
||||
# Intel(R) Inspector
|
||||
if '+inspector' in spec:
|
||||
components.append('intel-inspector')
|
||||
|
||||
# Intel(R) Trace Analyzer and Collector
|
||||
if '+itac' in spec:
|
||||
components.extend(['intel-itac', 'intel-ta', 'intel-tc'])
|
||||
|
||||
# Intel(R) VTune(TM) Amplifier XE
|
||||
if '+vtune' in spec:
|
||||
components.append('intel-vtune-amplifier')
|
||||
|
||||
return components
|
||||
|
||||
@property
|
||||
def bin_dir(self):
|
||||
"""The relative path to the bin directory with symlinks resolved."""
|
||||
|
||||
bin_path = os.path.join(self.prefix.bin, 'icc')
|
||||
absolute_path = os.path.realpath(bin_path) # resolve symlinks
|
||||
relative_path = os.path.relpath(absolute_path, self.prefix)
|
||||
return os.path.dirname(relative_path)
|
||||
|
||||
@property
|
||||
def lib_dir(self):
|
||||
"""The relative path to the lib directory with symlinks resolved."""
|
||||
|
||||
lib_path = os.path.join(self.prefix.lib, 'intel64', 'libimf.a')
|
||||
absolute_path = os.path.realpath(lib_path) # resolve symlinks
|
||||
relative_path = os.path.relpath(absolute_path, self.prefix)
|
||||
return os.path.dirname(relative_path)
|
||||
|
||||
@property
|
||||
def license_files(self):
|
||||
spec = self.spec
|
||||
year = self.version[1]
|
||||
|
||||
directories = [
|
||||
'Licenses',
|
||||
self.bin_dir
|
||||
]
|
||||
|
||||
if '+advisor' in spec:
|
||||
advisor_dir = 'advisor_xe/licenses'
|
||||
|
||||
if year >= 2017:
|
||||
advisor_dir = 'advisor/licenses'
|
||||
|
||||
directories.append(advisor_dir)
|
||||
|
||||
if '+inspector' in spec:
|
||||
inspector_dir = 'inspector_xe/licenses'
|
||||
|
||||
if year >= 2017:
|
||||
inspector_dir = 'inspector/licenses'
|
||||
|
||||
directories.append(inspector_dir)
|
||||
|
||||
if '+itac' in spec:
|
||||
itac_dir = 'itac_{0}'.format(year)
|
||||
|
||||
directories.append(itac_dir)
|
||||
|
||||
if '+vtune' in spec:
|
||||
vtune_dir = 'vtune_amplifier_xe/licenses'
|
||||
|
||||
if year >= 2018:
|
||||
vtune_dir = 'vtune_amplifier/licenses'
|
||||
|
||||
directories.append(vtune_dir)
|
||||
|
||||
return [os.path.join(dir, 'license.lic') for dir in directories]
|
||||
|
||||
@run_after('install')
|
||||
def filter_compiler_wrappers(self):
|
||||
spec = self.spec
|
||||
|
||||
if '+mpi' in spec:
|
||||
if '~newdtags' in spec:
|
||||
wrappers = [
|
||||
'mpif77', 'mpif90', 'mpigcc', 'mpigxx',
|
||||
'mpiicc', 'mpiicpc', 'mpiifort'
|
||||
]
|
||||
wrapper_paths = []
|
||||
for root, dirs, files in os.walk(spec.prefix):
|
||||
for name in files:
|
||||
if name in wrappers:
|
||||
wrapper_paths.append(os.path.join(spec.prefix,
|
||||
root, name))
|
||||
for wrapper in wrapper_paths:
|
||||
filter_file('-Xlinker --enable-new-dtags', ' ',
|
||||
wrapper, string=True)
|
||||
|
||||
@run_after('install')
|
||||
def rpath_configuration(self):
|
||||
spec = self.spec
|
||||
|
||||
if '+rpath' in spec:
|
||||
lib_dir = os.path.join(self.prefix, self.lib_dir)
|
||||
for compiler in ['icc', 'icpc', 'ifort']:
|
||||
cfgfilename = os.path.join(
|
||||
self.prefix, self.bin_dir, '{0}.cfg'.format(compiler))
|
||||
cfgfilename = os.path.abspath(cfgfilename)
|
||||
with open(cfgfilename, 'w') as f:
|
||||
f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
|
||||
|
||||
@run_after('install')
|
||||
def fix_psxevars(self):
|
||||
"""Newer versions (>2016) of Intel Parallel Studio have a bug in the
|
||||
``psxevars.sh`` script."""
|
||||
|
||||
bindir = glob.glob(join_path(
|
||||
self.prefix, 'parallel_studio*', 'bin'))[0]
|
||||
bindir = os.path.abspath(bindir)
|
||||
if self.version[1] > 2016:
|
||||
filter_file('^SCRIPTPATH=.*', 'SCRIPTPATH={0}'.format(self.prefix),
|
||||
os.path.join(bindir, 'psxevars.sh'),
|
||||
os.path.join(bindir, 'psxevars.csh'))
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
if '+mpi' in self.spec:
|
||||
spack_env.set('I_MPI_CC', spack_cc)
|
||||
spack_env.set('I_MPI_CXX', spack_cxx)
|
||||
spack_env.set('I_MPI_F77', spack_fc)
|
||||
spack_env.set('I_MPI_F90', spack_f77)
|
||||
spack_env.set('I_MPI_FC', spack_fc)
|
||||
|
||||
# set up MKLROOT for everyone using MKL package
|
||||
if '+mkl' in self.spec:
|
||||
mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64 # noqa
|
||||
|
||||
spack_env.set('MKLROOT', self.prefix)
|
||||
spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_root)
|
||||
|
||||
def setup_dependent_package(self, module, dep_spec):
|
||||
if '+mpi' in self.spec:
|
||||
# Intel comes with 2 different flavors of MPI wrappers:
|
||||
#
|
||||
# * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
|
||||
# the Intel compilers.
|
||||
# * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
|
||||
# compilers to wrap using I_MPI_CC and friends. By default,
|
||||
# wraps around the GCC compilers.
|
||||
#
|
||||
# In theory, these should be equivalent as long as I_MPI_CC
|
||||
# and friends are set to point to the Intel compilers, but in
|
||||
# practice, mpicc fails to compile some applications while
|
||||
# mpiicc works.
|
||||
bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
|
||||
|
||||
if self.compiler.name == 'intel':
|
||||
self.spec.mpicc = bindir.mpiicc
|
||||
self.spec.mpicxx = bindir.mpiicpc
|
||||
self.spec.mpifc = bindir.mpiifort
|
||||
self.spec.mpif77 = bindir.mpiifort
|
||||
else:
|
||||
self.spec.mpicc = bindir.mpicc
|
||||
self.spec.mpicxx = bindir.mpicxx
|
||||
self.spec.mpifc = bindir.mpif90
|
||||
self.spec.mpif77 = bindir.mpif77
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source parallel_studio_xe_2017/bin/psxevars.sh intel64
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
psxevars = glob.glob(join_path(
|
||||
self.prefix, 'parallel_studio*', 'bin', 'psxevars.sh'))
|
||||
|
||||
if psxevars:
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
psxevars[0], 'intel64'))
|
||||
conflicts('+clck', when='@professional.0:professional.9999')
|
||||
conflicts('+itac', when='@professional.0:professional.9999')
|
||||
conflicts('+mpi', when='@professional.0:professional.9999')
|
||||
|
||||
# The following components are not available before 2016
|
||||
conflicts('+daal', when='@professional.0:professional.2015.7')
|
||||
conflicts('+daal', when='@cluster.0:cluster.2015.7')
|
||||
conflicts('+daal', when='@composer.0:composer.2015.7')
|
||||
|
||||
def setup_dependent_environment(self, *args):
|
||||
# Handle in callback, conveying client's compilers in additional arg.
|
||||
# CAUTION - DUP code in:
|
||||
# ../intel-mpi/package.py
|
||||
# ../intel-parallel-studio/package.py
|
||||
self._setup_dependent_env_callback(*args, compilers_of_client={
|
||||
'CC': spack_cc,
|
||||
'CXX': spack_cxx,
|
||||
'F77': spack_f77,
|
||||
'F90': spack_fc,
|
||||
'FC': spack_fc,
|
||||
})
|
||||
|
@ -22,10 +22,7 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
from spack.environment import EnvironmentModifications
|
||||
|
||||
|
||||
class Intel(IntelPackage):
|
||||
@ -33,82 +30,31 @@ class Intel(IntelPackage):
|
||||
|
||||
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
|
||||
|
||||
version('18.0.3', '234223cc470717c2095456d9f048d690',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
|
||||
version('18.0.1', '28cb807126d713350f4aa6f9f167448a',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
|
||||
version('18.0.0', '31ba768fba6e7322957b03feaa3add28',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
|
||||
version('17.0.4', 'd03d351809e182c481dc65e07376d9a2',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
|
||||
version('17.0.3', '52344df122c17ddff3687f84ceb21623',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
|
||||
version('17.0.2', '2891ab1ece43eb61b6ab892f07c47f01',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
|
||||
version('17.0.1', '1f31976931ed8ec424ac7c3ef56f5e85',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
|
||||
version('17.0.0', 'b67da0065a17a05f110ed1d15c3c6312',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
|
||||
version('16.0.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
|
||||
version('16.0.3', '3208eeabee951fc27579177b593cefe9',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
|
||||
version('16.0.2', '1133fb831312eb519f7da897fec223fa',
|
||||
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
|
||||
# Same as in ../intel-parallel-studio/package.py, Composer Edition,
|
||||
# but the version numbering in Spack differs.
|
||||
version('18.0.3', '234223cc470717c2095456d9f048d690', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
|
||||
version('18.0.2', '76f820f53de4c1ff998229c983cf4f53', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12722/parallel_studio_xe_2018_update2_composer_edition.tgz')
|
||||
version('18.0.1', '28cb807126d713350f4aa6f9f167448a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
|
||||
version('18.0.0', '31ba768fba6e7322957b03feaa3add28', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
|
||||
#
|
||||
version('17.0.7', '4c02a4a29a8f2424f31baa23116a1001', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12860/parallel_studio_xe_2017_update7_composer_edition.tgz')
|
||||
version('17.0.6', 'd96cce0c3feef20091efde458f581a9f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12538/parallel_studio_xe_2017_update6_composer_edition.tgz')
|
||||
# version('17.0.5', -- TBD --
|
||||
version('17.0.4', 'd03d351809e182c481dc65e07376d9a2', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
|
||||
version('17.0.3', '52344df122c17ddff3687f84ceb21623', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
|
||||
version('17.0.2', '2891ab1ece43eb61b6ab892f07c47f01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
|
||||
version('17.0.1', '1f31976931ed8ec424ac7c3ef56f5e85', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
|
||||
version('17.0.0', 'b67da0065a17a05f110ed1d15c3c6312', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
|
||||
#
|
||||
version('16.0.4', '2bc9bfc9be9c1968a6e42efb4378f40e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
|
||||
version('16.0.3', '3208eeabee951fc27579177b593cefe9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
|
||||
version('16.0.2', '1133fb831312eb519f7da897fec223fa', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
|
||||
#
|
||||
# Grandfathered release; different directory structure.
|
||||
version('15.0.6', 'da9f8600c18d43d58fba0488844f79c9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
|
||||
version('15.0.1', '85beae681ae56411a8e791a7c44a5c0a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4933/l_compxe_2015.1.133.tgz')
|
||||
|
||||
variant('rpath', default=True, description='Add rpath to .cfg files')
|
||||
|
||||
components = [
|
||||
# Common files
|
||||
'intel-comp-',
|
||||
'intel-openmp',
|
||||
|
||||
# C/C++
|
||||
'intel-icc',
|
||||
|
||||
# Fortran
|
||||
'intel-ifort',
|
||||
]
|
||||
|
||||
@property
|
||||
def license_files(self):
|
||||
return [
|
||||
'Licenses/license.lic',
|
||||
join_path('compilers_and_libraries', 'linux', 'bin',
|
||||
'intel64', 'license.lic')
|
||||
]
|
||||
|
||||
@run_after('install')
|
||||
def rpath_configuration(self):
|
||||
if '+rpath' in self.spec:
|
||||
bin_dir = join_path(self.prefix, 'compilers_and_libraries',
|
||||
'linux', 'bin', 'intel64')
|
||||
lib_dir = join_path(self.prefix, 'compilers_and_libraries',
|
||||
'linux', 'compiler', 'lib', 'intel64_lin')
|
||||
for compiler in ['icc', 'icpc', 'ifort']:
|
||||
cfgfilename = join_path(bin_dir, '{0}.cfg'.format(compiler))
|
||||
with open(cfgfilename, 'w') as f:
|
||||
f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
"""Adds environment variables to the generated module file.
|
||||
|
||||
These environment variables come from running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source bin/compilervars.sh intel64
|
||||
"""
|
||||
# NOTE: Spack runs setup_environment twice, once pre-build to set up
|
||||
# the build environment, and once post-installation to determine
|
||||
# the environment variables needed at run-time to add to the module
|
||||
# file. The script we need to source is only present post-installation,
|
||||
# so check for its existence before sourcing.
|
||||
# TODO: At some point we should split setup_environment into
|
||||
# setup_build_environment and setup_run_environment to get around
|
||||
# this problem.
|
||||
compilervars = os.path.join(self.prefix.bin, 'compilervars.sh')
|
||||
|
||||
if os.path.isfile(compilervars):
|
||||
run_env.extend(EnvironmentModifications.from_sourcing_file(
|
||||
compilervars, 'intel64'))
|
||||
# Since the current package is a subset of 'intel-parallel-studio',
|
||||
# all remaining Spack actions are handled in the package class.
|
||||
|
Loading…
Reference in New Issue
Block a user