Determine/document support for PrgEnv-{nvidia,nvhpc}

Issue #568 resolved
Paul Hargrove created an issue

The Nvidia compilers (derived from PGI) are part of the Cray Programming Environment on some HPE Cray EX systems. I have seen this under both PrgEnv-nvidia and PrgEnv-nvhpc names on different systems, but have yet to determine if this a true distinction (as with PrgEnv-amd vs PrgEnv-aocc) or if one is simple an alias for the other

Regardless of the naming of the PrgEnv, we do not currently claim to support these C/C++ compilers. The importance of these compilers on HPE Cray EX systems means we should consider adding them to our supported list.

We have a good history for PrgEnv-nvidia on Perlmutter and less for PrgEnv-nvhpc on Polaris. That should be enough to form some judgements on the stability of these compilers. So, sorting out the relationship between the two PrgEnv might be the only open issue here.

Comments (4)

  1. Dan Bonachea

    Regarding PrgEnv-{nvidia,nvhpc} equivalence, the modules for each are effectively identical:

    perlmutter$ diff -C3 -r /opt/cray/pe/lmod/modulefiles/core/PrgEnv-nv*
    
    diff -C3 -r /opt/cray/pe/lmod/modulefiles/core/PrgEnv-nvhpc/8.3.3.lua /opt/cray/pe/lmod/modulefiles/core/PrgEnv-nvidia/8.3.3.lua
    *** /opt/cray/pe/lmod/modulefiles/core/PrgEnv-nvhpc/8.3.3.lua   Thu Mar 17 12:49:40 2022
    --- /opt/cray/pe/lmod/modulefiles/core/PrgEnv-nvidia/8.3.3.lua  Thu Mar 17 12:49:39 2022
    ***************
    *** 1,6 ****
      --[[
    
    !     file PrgEnv-nvhpc module
    
          (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
    
    --- 1,6 ----
      --[[
    
    !     file PrgEnv-nvidia module
    
          (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
    
    ***************
    *** 117,124 ****
    
    
      -- template variables ----------------------------------------------------------
    ! local PRGENV      = "nvhpc"
    ! local PRGENV_UC   = "NVHPC"
      local PE_ENV      = "NVIDIA"
      local MODULE_LIST = get_module_list() 
      --------------------------------------------------------------------------------
    --- 117,124 ----
    
    
      -- template variables ----------------------------------------------------------
    ! local PRGENV      = "nvidia"
    ! local PRGENV_UC   = "NVIDIA"
      local PE_ENV      = "NVIDIA"
      local MODULE_LIST = get_module_list() 
      --------------------------------------------------------------------------------
    ***************
    *** 131,140 ****
      -- standered Lmod functions --
    
      help([[
    !     The PrgEnv-nvhpc modulefile loads the  Programming Environment, 
    !     which includes the NVIDIA HPC compiler suite. 
          This modulefile defines the system paths and environment variables 
    !     needed to build an application using NVHPC for supported 
          Cray systems.    
    
          This module loads the following modules:
    --- 131,140 ----
      -- standered Lmod functions --
    
      help([[
    !     The PrgEnv-nvidia modulefile loads the Nvidia Programming Environment, 
    !     which includes the NVIDIA compiler suite. 
          This modulefile defines the system paths and environment variables 
    !     needed to build an application using Nvidia for supported 
          Cray systems.    
    
          This module loads the following modules:
    ***************
    *** 149,156 ****
      -- environment modifications --
      setenv       ("PE_ENV",            PE_ENV )
    
    ! if (not isloaded("nvhpc")) then
    !     load("nvhpc")
      end
      load("craype")
      for module in string.gmatch(MODULE_LIST, "%S+") do
    --- 149,156 ----
      -- environment modifications --
      setenv       ("PE_ENV",            PE_ENV )
    
    ! if (not isloaded("nvidia")) then
    !     load("nvidia")
      end
      load("craype")
      for module in string.gmatch(MODULE_LIST, "%S+") do
    

    Diffing the compiler modules:

    diff -C3 -r /opt/cray/pe/lmod/modulefiles/core/nv*
    

    shows some minor differences in the CPATH and LD_LIBRARY_PATH, most notably nvhpc pulls in NVSHMEM while nvidia does not. However these notably appear to have been hand-edited, so I suspect the difference is accidental

  2. Paul Hargrove reporter
    • changed status to open

    I am planning to document these two PrgEnv as supported in the 2023.3.0 release, based on the absence of any PrgEnv-specific issues in our testing history on Perlmutter and Polaris.

  3. Paul Hargrove reporter

    Support AMD and Nvidia PrgEnvs on HPE Cray EX

    This commit updates INSTALL.md and utils/system-checks.sh to document support for PrgEnv-{amd,aocc,nvidia,nvhpc} with floor complier versions corresponding to the range we've been able to test. Logic in utils/system-checks.sh issues our standard "has not been validated" message if a too-old compiler is detected.

    Resolves issue #525: Determine/document support for PrgEnv-{amd,aocc} Resolves issue #568: Determine/document support for PrgEnv-{nvidia,nvhpc}

    → <<cset 95af5927ca2b>>

  4. Log in to comment