Skip to content
Snippets Groups Projects
Select Git revision
  • 8ca8e91728c59ef426da91ca7fac37fe75806ea8
  • master default
  • bing_issues#190_tf2
  • bing_tf2_convert
  • bing_issue#189_train_modular
  • simon_#172_integrate_weatherbench
  • develop
  • bing_issue#188_restructure_ambs
  • yan_issue#100_extract_prcp_data
  • bing_issue#170_data_preprocess_training_tf1
  • Gong2022_temperature_forecasts
  • bing_issue#186_clean_GMD1_tag
  • yan_issue#179_integrate_GZAWS_data_onfly
  • bing_issue#178_runscript_bug_postprocess
  • michael_issue#187_bugfix_setup_runscript_template
  • bing_issue#180_bugs_postprpocess_meta_postprocess
  • yan_issue#177_repo_for_CLGAN_gmd
  • bing_issue#176_integrate_weather_bench
  • michael_issue#181_eval_era5_forecasts
  • michael_issue#182_eval_subdomain
  • michael_issue#119_warmup_Horovod
  • bing_issue#160_test_zam347
  • ambs_v1
  • ambs_gmd_nowcasting_v1.0
  • GMD1
  • modular_booster_20210203
  • new_structure_20201004_v1.0
  • old_structure_20200930
28 results

plots_GMD.ipynb

Blame
  • numexpr.py 4.95 KiB
    ##
    # Copyright 2019-2021 Ghent University
    #
    # This file is part of EasyBuild,
    # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
    # with support of Ghent University (http://ugent.be/hpc),
    # the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be),
    # Flemish Research Foundation (FWO) (http://www.fwo.be/en)
    # and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
    #
    # https://github.com/easybuilders/easybuild
    #
    # EasyBuild is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation v2.
    #
    # EasyBuild is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with EasyBuild.  If not, see <http://www.gnu.org/licenses/>.
    ##
    """
    EasyBuild support for building and installing numexpr, implemented as an easyblock
    """
    import os
    from distutils.version import LooseVersion
    
    from easybuild.easyblocks.generic.pythonpackage import PythonPackage
    from easybuild.tools.filetools import write_file
    from easybuild.tools.modules import get_software_root, get_software_version
    from easybuild.tools.systemtools import get_cpu_features
    
    
    class EB_numexpr(PythonPackage):
        """Support for building/installing numexpr."""
    
        @staticmethod
        def extra_options():
            """Override some custom easyconfig parameters specifically for numexpr."""
            extra_vars = PythonPackage.extra_options()
    
            extra_vars['download_dep_fail'][0] = True
            extra_vars['use_pip'][0] = True
    
            return extra_vars
    
        def __init__(self, *args, **kwargs):
            """Initialisation of custom class variables for numexpr."""
            super(EB_numexpr, self).__init__(*args, **kwargs)
    
            self.imkl_root = None
    
        def configure_step(self):
            """Custom configuration procedure for numexpr."""
            super(EB_numexpr, self).configure_step()
    
            self.imkl_root = get_software_root('imkl')
    
            # if Intel MKL is available, set up site.cfg such that the right VML library is used;
            # this makes a *big* difference in terms of performance;
            # see also https://github.com/pydata/numexpr/blob/master/site.cfg.example
            if self.imkl_root:
    
                # figure out which VML library to link to
                cpu_features = get_cpu_features()
                if 'avx512f' in cpu_features:
                    mkl_vml_lib = 'mkl_vml_avx512'
                elif 'avx2' in cpu_features:
                    mkl_vml_lib = 'mkl_vml_avx2'
                elif 'avx' in cpu_features:
                    mkl_vml_lib = 'mkl_vml_avx'
                else:
                    # use default kernels as fallback for non-AVX systems
                    mkl_vml_lib = 'mkl_vml_def'
    
                mkl_ver = get_software_version('imkl')
    
                if LooseVersion(mkl_ver) >= LooseVersion('2021'):
                    mkl_lib_dirs = [
                        os.path.join(self.imkl_root, 'mkl',
                                     'latest', 'lib', 'intel64'),
                    ]
                    mkl_include_dirs = os.path.join(
                        self.imkl_root, 'mkl', 'latest', 'include')
                    mkl_libs = ['mkl_intel_lp64',
                                'mkl_intel_thread', 'mkl_core', 'iomp5']
                else:
                    mkl_lib_dirs = [
                        os.path.join(self.imkl_root, 'mkl', 'lib', 'intel64'),
                        os.path.join(self.imkl_root, 'lib', 'intel64'),
                    ]
                    mkl_include_dirs = os.path.join(
                        self.imkl_root, 'mkl', 'include')
                    mkl_libs = ['mkl_intel_lp64', 'mkl_intel_thread',
                                'mkl_core', 'mkl_def', mkl_vml_lib, 'iomp5']
    
                site_cfg_txt = '\n'.join([
                    "[mkl]",
                    "include_dirs = %s" % mkl_include_dirs,
                    "library_dirs = %s" % os.pathsep.join(
                        mkl_lib_dirs + self.toolchain.get_variable('LDFLAGS', typ=list)),
                ])
    
                if LooseVersion(self.version) >= LooseVersion("2.8.0"):
                    site_cfg_txt = '\n'.join([
                        site_cfg_txt,
                        "libraries = %s" % os.pathsep.join(mkl_libs),
                    ])
                else:
                    site_cfg_txt = '\n'.join([
                        site_cfg_txt,
                        "mkl_libs = %s" % ', '.join(mkl_libs),
                    ])
                write_file('site.cfg', site_cfg_txt)
    
        def sanity_check_step(self):
            """Custom sanity check for numexpr."""
    
            custom_commands = []
    
            # if Intel MKL is available, make sure VML is used
            if self.imkl_root:
                custom_commands.append(
                    "python -c 'import numexpr; assert(numexpr.use_vml)'")
    
            return super(EB_numexpr, self).sanity_check_step(custom_commands=custom_commands)