1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- # -*- coding: utf-8; mode: Python -*-
- # SConstruct for ra/bench
- # (c) Daniel Llorens - 2015-2016, 2018-2019
- # This library is free software; you can redistribute it and/or modify it under
- # the terms of the GNU Lesser General Public License as published by the Free
- # Software Foundation; either version 3 of the License, or (at your option) any
- # later version.
- # FIXME Shared pieces with {examples,test,docs}/SConstruct
- import os, string, atexit
- from os.path import join, abspath
- import imp
- ra = imp.load_source('ra', '../config/ra.py')
- # FIXME pick BLAS flags from here.
- try:
- Import('top')
- except:
- top = { 'skip_summary': False, 'sanitize': False, 'use_blas': False }
- raflags = ra.flags(top['sanitize'])
- vars = Variables()
- vars.AddVariables(PathVariable('variant_dir', 'build directory', '.', PathVariable.PathIsDirCreate))
- env = Environment(options=vars,
- ENV=dict([(k, os.environ[k] if k in os.environ else '')
- for k in ['PATH', 'HOME', 'TERM', 'LD_RUN_PATH', 'DYLD_LIBRARY_PATH',
- 'RPATH', 'LIBRARY_PATH', 'TEXINPUTS', 'GCC_COLORS', 'BOOST_ROOT']]))
- variant_dir = env['variant_dir']
- for var, default in [('CC', 'gcc'), ('CXX', 'g++'), ('FORTRAN', 'gfortran')]:
- ra.take_from_environ(env, var, default=default)
- for var in ['FORTRANFLAGS', 'LINKFLAGS', 'CCFLAGS', 'CXXFLAGS']:
- ra.take_from_environ(env, var, wrapper=lambda x: x.split())
- for var in ['RPATH', 'LIBPATH']:
- ra.take_from_environ(env, var, wrapper=lambda x: [x])
- arch = os.popen('../config/config.guess').read()
- cppcomp = os.popen('%s --version' % env['CXX']).read()
- if (arch.find('apple-darwin') >= 0) and (cppcomp.find('g++') >= 0):
- archflags=['-march=native', '-Wa,-q']
- else:
- archflags=['-march=native']
- env.Prepend(CPPPATH=['..', '.'],
- CCFLAGS=archflags if str(env['CCFLAGS']).strip()=='' else '',
- CXXFLAGS=raflags['CXXFLAGS'],
- LINKFLAGS=raflags['LINKFLAGS'])
- if top['use_blas']:
- print("[%s] BLAS will be used." % Dir('.').path)
- env_blas = ra.blas_flags(Configure, env, arch)
- env_blas.Append(CPPDEFINES={'RA_USE_BLAS': 1})
- else:
- env_blas = env
- print("[%s] BLAS won't be used." % Dir('.').path)
- [ra.to_test_ra(env_blas, variant_dir)(bench)
- for bench in ['bench-gemm']]
- tester = ra.to_test_ra(env, variant_dir)
- [tester(bench)
- for bench in ['bench-reduce-sqrm',
- 'bench-gemv', 'bench-sum-rows', 'bench-sum-cols',
- 'bench-pack', 'bench-from',
- 'bench-stencil1', 'bench-stencil2', 'bench-stencil3',
- 'bench-optimize', 'bench-tensorindex',
- 'bench-iterator', 'bench-at',
- 'bench-dot'
- ]]
- if not top['skip_summary']:
- atexit.register(lambda: ra.print_summary(GetBuildFailures, 'ra/bench'))
|