Add SPEC CPU 2017 benchmarks
This commit is contained in:
parent
b7a6225971
commit
a9350da4b8
@ -11,6 +11,10 @@ final: prev:
|
|||||||
rvb-clang = final.callPackage ./pkgs/rvb/default.nix { stdenv = final.stdenvClangEpi; };
|
rvb-clang = final.callPackage ./pkgs/rvb/default.nix { stdenv = final.stdenvClangEpi; };
|
||||||
stream = final.callPackage ./pkgs/stream/default.nix { };
|
stream = final.callPackage ./pkgs/stream/default.nix { };
|
||||||
|
|
||||||
|
spec-cpu-tools = final.callPackage ./pkgs/spec-cpu/tools.nix { };
|
||||||
|
spec-cpu = final.callPackage ./pkgs/spec-cpu/default.nix { };
|
||||||
|
spec-cpu-clang = final.callPackage ./pkgs/spec-cpu/default.nix { stdenv = final.stdenvClangEpi; };
|
||||||
|
|
||||||
blis = ((prev.blis.override {
|
blis = ((prev.blis.override {
|
||||||
blas64 = true;
|
blas64 = true;
|
||||||
withArchitecture = "generic";
|
withArchitecture = "generic";
|
||||||
|
66
pkgs/spec-cpu/Makefile
Normal file
66
pkgs/spec-cpu/Makefile
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
include Makefile.in
|
||||||
|
|
||||||
|
HPC_BENCHMARKS_DIRS=\
|
||||||
|
axpy \
|
||||||
|
jacobi-2d \
|
||||||
|
somier \
|
||||||
|
# Require submodules:
|
||||||
|
# fft \
|
||||||
|
# fftp \
|
||||||
|
# Require vehave:
|
||||||
|
# lulesh \
|
||||||
|
# Missing compare_array_double:
|
||||||
|
# gemm \
|
||||||
|
# Broken, not found:
|
||||||
|
# spmv
|
||||||
|
|
||||||
|
DESKTOP_BENCHMARKS_DIRS=\
|
||||||
|
blackscholes \
|
||||||
|
canneal \
|
||||||
|
particlefilter \
|
||||||
|
pathfinder \
|
||||||
|
streamcluster \
|
||||||
|
swaptions
|
||||||
|
|
||||||
|
MICRO_BENCHMARKS_DIRS=\
|
||||||
|
BuffCopyUnit \
|
||||||
|
BuffCopyStrided \
|
||||||
|
BuffCopyIndexed \
|
||||||
|
FpuMicroKernel \
|
||||||
|
InstrNopBalance \
|
||||||
|
MemArithBalance \
|
||||||
|
LatencyVrgather
|
||||||
|
|
||||||
|
.PHONY: default all clean $(HPC_BENCHMARKS_DIRS) $(MICRO_BENCHMARKS_DIRS)
|
||||||
|
|
||||||
|
default:
|
||||||
|
@cd common; make; cd ..
|
||||||
|
@$(foreach dir,$(HPC_BENCHMARKS_DIRS),${MAKE} -C hpc_benchmarks/$(dir);)
|
||||||
|
@$(foreach dir,$(DESKTOP_BENCHMARKS_DIRS),${MAKE} -C desktop_benchmarks/$(dir);)
|
||||||
|
@$(foreach dir,$(MICRO_BENCHMARKS_DIRS),${MAKE} -C micro_benchmarks/$(dir);)
|
||||||
|
|
||||||
|
all:
|
||||||
|
@cd common; make all; cd ..
|
||||||
|
@$(foreach dir,$(HPC_BENCHMARKS_DIRS),${MAKE} -C hpc_benchmarks/$(dir) all ;)
|
||||||
|
@$(foreach dir,$(DESKTOP_BENCHMARKS_DIRS),${MAKE} -C desktop_benchmarks/$(dir) all ;)
|
||||||
|
@$(foreach dir,$(MICRO_BENCHMARKS_DIRS),${MAKE} -C micro_benchmarks/$(dir) all ;)
|
||||||
|
|
||||||
|
fftp:
|
||||||
|
${MAKE} -C third_party fftw
|
||||||
|
${MAKE} -C hpc_benchmarks/fftp all
|
||||||
|
${MAKE} -C hpc_benchmarks/fftp/test all
|
||||||
|
|
||||||
|
spmv-ellpack:
|
||||||
|
rm -rf hpc_benchmarks/spmv-ellpack/spmv/build
|
||||||
|
mkdir -p hpc_benchmarks/spmv-ellpack/spmv/build
|
||||||
|
cd hpc_benchmarks/spmv-ellpack/spmv/build;\
|
||||||
|
../configure riscv;\
|
||||||
|
INDEX64=1 EPI_EXT=07 PATH=${EPI_LLVM_HOME}/bin:${PATH} make
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@cd common; make clean; cd ..
|
||||||
|
@$(foreach dir,$(HPC_BENCHMARKS_DIRS),${MAKE} -C hpc_benchmarks/$(dir) clean ;)
|
||||||
|
@$(foreach dir,$(DESKTOP_BENCHMARKS_DIRS),${MAKE} -C desktop_benchmarks/$(dir) clean ;)
|
||||||
|
@$(foreach dir,$(MICRO_BENCHMARKS_DIRS),${MAKE} -C micro_benchmarks/$(dir) clean ;)
|
||||||
|
@rm -rf hpc_benchmarks/spmv-ellpack/spmv/build
|
||||||
|
|
80
pkgs/spec-cpu/Makefile.in
Normal file
80
pkgs/spec-cpu/Makefile.in
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#Compile all benchmarks with individual settings defined in their Makefiles
|
||||||
|
|
||||||
|
_default-target: default
|
||||||
|
|
||||||
|
# RVB_ROOT defined as argument
|
||||||
|
|
||||||
|
# TODO: RVB_COMMON_DIR should substitute COMMON_DIR
|
||||||
|
COMMON_DIR=$(RVB_ROOT)/common
|
||||||
|
RVB_COMMON_DIR=$(RVB_ROOT)/common
|
||||||
|
|
||||||
|
CC=clang
|
||||||
|
CXX=clang++
|
||||||
|
|
||||||
|
# Needs EPI clang
|
||||||
|
#MEPI=-mepi
|
||||||
|
MEPI=
|
||||||
|
|
||||||
|
VREPORT_FLAGS=-Rpass=loop-vectorize -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize
|
||||||
|
#Available CFLAGS conditional compilation:
|
||||||
|
# -DUSE_MALLOC_HP, redefines the use of malloc and free
|
||||||
|
|
||||||
|
#Makefile: General compiler flags: CFLAGS, CFLAGS_<VERSION_1>, CFLAGS_<VERSION_2>, ...
|
||||||
|
#CFLAGS=-B ${LLVM_BIN} -Wall -Wextra -march=rv64g -O2 -I${RVB_COMMON_DIR}
|
||||||
|
CFLAGS=-B ${LLVM_BIN} -Wall -Wextra -O2 -I${RVB_COMMON_DIR}
|
||||||
|
LDFLAGS=
|
||||||
|
|
||||||
|
#Only scalar instructions
|
||||||
|
CFLAGS_SCALAR=${CFLAGS} -DRVB_USE_SCALAR
|
||||||
|
LDFLAGS_SCALAR=
|
||||||
|
|
||||||
|
#Vector instructions using intrinsics
|
||||||
|
CFLAGS_VECTORIAL=${CFLAGS} -fno-vectorize $(MEPI)
|
||||||
|
LDFLAGS_VECTORIAL=
|
||||||
|
|
||||||
|
# TODO: RVV should substitute VECTORIAL (?)
|
||||||
|
#Vector instructions using intrinsics
|
||||||
|
CFLAGS_RVV=${CFLAGS} -DRVB_USE_RVV -fno-vectorize $(MEPI)
|
||||||
|
LDFLAGS_RVV=${LDFLAGS}
|
||||||
|
|
||||||
|
#Vector instructions only when code is annotate
|
||||||
|
CFLAGS_EXPLICIT_AUTOVECTORIZATION=${CFLAGS} -fopenmp-simd -fno-vectorize $(MEPI) ${VREPORT_FLAGS}
|
||||||
|
LDFLAGS_EXPLICIT_AUTOVECTORIZATION=
|
||||||
|
|
||||||
|
# TODO: OMP substitutes EXPLICIT_AUTOVECTORIZATION
|
||||||
|
#Vector instructions only when code is annotate
|
||||||
|
CFLAGS_OMP=${CFLAGS} -DRVB_USE_OMP -fopenmp-simd -fno-vectorize $(MEPI) ${VREPORT_FLAGS}
|
||||||
|
LDFLAGS_OMP=${LDFLAGS}
|
||||||
|
|
||||||
|
#Vector instructions when compiler decides
|
||||||
|
CFLAGS_AUTOVECTORIZATION=${CFLAGS} -fopenmp-simd $(MEPI) ${VREPORT_FLAGS}
|
||||||
|
LDFLAGS_AUTOVECTORIZATION=
|
||||||
|
|
||||||
|
# TODO: AUTOVECT shoud substitue AUTOVECTORIZATION (?)
|
||||||
|
#Vector instructions when compiler decides
|
||||||
|
CFLAGS_AUTOVECT=${CFLAGS} -DRVB_USE_AUTOVECT -fopenmp-simd $(MEPI) ${VREPORT_FLAGS}
|
||||||
|
LDFLAGS_AUTOVECT=${LDFLAGS}
|
||||||
|
|
||||||
|
# CBLAS library compile and link flags
|
||||||
|
CFLAGS_CBLAS=${CFLAGS} -DRVB_USE_CBLAS -I${CBLAS_INC} -I${LLVM_INC}
|
||||||
|
LDFLAGS_CBLAS=${LDFLAGS} -L${CBLAS_LIB} -lblis -Wl,-rpath,${CBLAS_LIB} -fopenmp
|
||||||
|
|
||||||
|
# BARE-METAL compile and link flags
|
||||||
|
# You may consider to disable OpenPiton Stream: -DDISABLE_OPSTREAM
|
||||||
|
CFLAGS_BMETAL=${CFLAGS} -DRVB_USE_BMETAL -B ${RVB_BMETAL_DIR} \
|
||||||
|
--target=riscv64-unknown-elf \
|
||||||
|
-I../ \
|
||||||
|
-I/apps/riscv/llvm/EPI-0.7/cross/development/riscv64-unknown-linux-gnu/sysroot/usr/include \
|
||||||
|
-I/usr/include/riscv64-linux-gnu \
|
||||||
|
-I/usr/include \
|
||||||
|
-I${RVB_BMETAL_DIR}/env \
|
||||||
|
-I${RVB_BMETAL_DIR} \
|
||||||
|
-DPREALLOCATE=1 -mcmodel=medany \
|
||||||
|
-static -std=gnu99 \
|
||||||
|
-ffast-math \
|
||||||
|
-fno-common \
|
||||||
|
-fno-builtin-printf \
|
||||||
|
${RVB_BMETAL_DIR}/syscalls.c \
|
||||||
|
${RVB_BMETAL_DIR}/crt.S \
|
||||||
|
-static -nostdlib -T \
|
||||||
|
${RVB_BMETAL_DIR}/test.ld
|
59
pkgs/spec-cpu/default.nix
Normal file
59
pkgs/spec-cpu/default.nix
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, spec-cpu-tools
|
||||||
|
, libarchive
|
||||||
|
, xz
|
||||||
|
, gnutar
|
||||||
|
, gfortran
|
||||||
|
, coreutils
|
||||||
|
, requireFile
|
||||||
|
, autoPatchelfHook
|
||||||
|
, libxcrypt-legacy
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "spec-cpu";
|
||||||
|
version = "1.1.7";
|
||||||
|
src = null;
|
||||||
|
unpackPhase = "true";
|
||||||
|
# We need a working specxz binary
|
||||||
|
config = ./gcc-linux-x86.cfg;
|
||||||
|
buildPhase = ''
|
||||||
|
cp ${config} config.cfg
|
||||||
|
chmod +w config.cfg
|
||||||
|
export SPEC_NOCHECK=1
|
||||||
|
mkdir out
|
||||||
|
runcpu \
|
||||||
|
--verbose=80 \
|
||||||
|
--tune=base \
|
||||||
|
--output_root=$PWD/out \
|
||||||
|
--config=$PWD/config.cfg \
|
||||||
|
--define build_ncpus=$NIX_BUILD_CORES \
|
||||||
|
--action=runsetup \
|
||||||
|
all
|
||||||
|
'';
|
||||||
|
# 519.lbm_r
|
||||||
|
# 502.gcc_r
|
||||||
|
# all
|
||||||
|
|
||||||
|
# We only need the run directories
|
||||||
|
installPhase = ''
|
||||||
|
# Remove build/ and exe/ directories, we only need run/
|
||||||
|
rm -rf out/benchspec/CPU/*/build/
|
||||||
|
rm -rf out/benchspec/CPU/*/exe/
|
||||||
|
|
||||||
|
mkdir -p $out
|
||||||
|
cp -a out/benchspec $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
#buildInputs = [ ];
|
||||||
|
nativeBuildInputs = [ spec-cpu-tools gfortran ];
|
||||||
|
enableParallelBuilding = false;
|
||||||
|
hardeningDisable = [ "all" ];
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
meta.broken = (stdenv.buildPlatform.config != "x86_64-unknown-linux-gnu") ||
|
||||||
|
(stdenv.hostPlatform.config != "riscv64-unknown-linux-gnu") ||
|
||||||
|
(stdenv.targetPlatform.config != "riscv64-unknown-linux-gnu");
|
||||||
|
}
|
391
pkgs/spec-cpu/gcc-linux-x86.cfg
Normal file
391
pkgs/spec-cpu/gcc-linux-x86.cfg
Normal file
@ -0,0 +1,391 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# SPEC CPU(R) 2017 config for gcc/g++/gfortran on Linux x86
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Usage: (1) Copy this to a new name
|
||||||
|
# cd $SPEC/config
|
||||||
|
# cp Example-x.cfg myname.cfg
|
||||||
|
# (2) Change items that are marked 'EDIT' (search for it)
|
||||||
|
#
|
||||||
|
# SPEC tested this config file with:
|
||||||
|
# Compiler version(s): Various. See note "Older GCC" below.
|
||||||
|
# Operating system(s): Oracle Linux Server 6, 7, 8 /
|
||||||
|
# Red Hat Enterprise Linux Server 6, 7, 8
|
||||||
|
# SUSE Linux Enterprise Server 15
|
||||||
|
# Ubuntu 19.04
|
||||||
|
# Hardware: Xeon, EPYC
|
||||||
|
#
|
||||||
|
# If your system differs, this config file might not work.
|
||||||
|
# You might find a better config file at https://www.spec.org/cpu2017/results
|
||||||
|
#
|
||||||
|
# Note: Older GCC
|
||||||
|
#
|
||||||
|
# Please use the newest GCC that you can. The default version packaged with
|
||||||
|
# your operating system may be very old; look for alternate packages with a
|
||||||
|
# newer version.
|
||||||
|
#
|
||||||
|
# If you have no choice and must use an old version, here is what to expect:
|
||||||
|
#
|
||||||
|
# - "peak" tuning: Several benchmarks will fail at peak tuning if you use
|
||||||
|
# compilers older than GCC 7.
|
||||||
|
# In that case, please use base only.
|
||||||
|
# See: https://www.spec.org/cpu2017/Docs/overview.html#Q16
|
||||||
|
# https://www.spec.org/cpu2017/Docs/config.html#tune
|
||||||
|
# Peak tuning is expected to work for all or nearly all
|
||||||
|
# benchmarks as of GCC 7 or later.
|
||||||
|
# Exception:
|
||||||
|
# - See topic "628.pop2_s basepeak", below.
|
||||||
|
#
|
||||||
|
# - "base" tuning: This config file is expected to work for base tuning with
|
||||||
|
# GCC 4.8.5 or later
|
||||||
|
# Exception:
|
||||||
|
# - Compilers vintage about 4.9 may need to turn off the
|
||||||
|
# tree vectorizer, by adding to the base OPTIMIZE flags:
|
||||||
|
# -fno-tree-loop-vectorize
|
||||||
|
#
|
||||||
|
# Unexpected errors? Try reducing the optimization level, or try removing:
|
||||||
|
# -march=native
|
||||||
|
#
|
||||||
|
# Compiler issues: Contact your compiler vendor, not SPEC.
|
||||||
|
# For SPEC help: https://www.spec.org/cpu2017/Docs/techsupport.html
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
#--------- Label --------------------------------------------------------------
|
||||||
|
# Arbitrary string to tag binaries (no spaces allowed)
|
||||||
|
# Two Suggestions: # (1) EDIT this label as you try new ideas.
|
||||||
|
%ifndef %{label}
|
||||||
|
% define label "nix" # (2) Use a label meaningful to *you*.
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
#--------- Preprocessor -------------------------------------------------------
|
||||||
|
%ifndef %{bits} # EDIT to control 32 or 64 bit compilation. Or,
|
||||||
|
% define bits 64 # you can set it on the command line using:
|
||||||
|
%endif # 'runcpu --define bits=nn'
|
||||||
|
|
||||||
|
%ifndef %{build_ncpus} # EDIT to adjust number of simultaneous compiles.
|
||||||
|
% define build_ncpus 8 # Or, you can set it on the command line:
|
||||||
|
%endif # 'runcpu --define build_ncpus=nn'
|
||||||
|
|
||||||
|
# Don't change this part.
|
||||||
|
%if %{bits} == 64
|
||||||
|
% define model -m64
|
||||||
|
%elif %{bits} == 32
|
||||||
|
% define model -m32
|
||||||
|
%else
|
||||||
|
% error Please define number of bits - see instructions in config file
|
||||||
|
%endif
|
||||||
|
%if %{label} =~ m/ /
|
||||||
|
% error Your label "%{label}" contains spaces. Please try underscores instead.
|
||||||
|
%endif
|
||||||
|
%if %{label} !~ m/^[a-zA-Z0-9._-]+$/
|
||||||
|
% error Illegal character in label "%{label}". Please use only alphanumerics, underscore, hyphen, and period.
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
#--------- Global Settings ----------------------------------------------------
|
||||||
|
# For info, see:
|
||||||
|
# https://www.spec.org/cpu2017/Docs/config.html#fieldname
|
||||||
|
# Example: https://www.spec.org/cpu2017/Docs/config.html#tune
|
||||||
|
|
||||||
|
command_add_redirect = 1
|
||||||
|
flagsurl = $[top]/config/flags/gcc.xml
|
||||||
|
ignore_errors = 1
|
||||||
|
iterations = 1
|
||||||
|
label = %{label}-m%{bits}
|
||||||
|
line_width = 1020
|
||||||
|
log_line_width = 1020
|
||||||
|
makeflags = --jobs=%{build_ncpus}
|
||||||
|
mean_anyway = 1
|
||||||
|
output_format = txt,html,cfg,pdf,csv
|
||||||
|
preenv = 1
|
||||||
|
reportable = 0
|
||||||
|
tune = base,peak # EDIT if needed: set to "base" for old GCC.
|
||||||
|
# See note "Older GCC" above.
|
||||||
|
|
||||||
|
|
||||||
|
#--------- How Many CPUs? -----------------------------------------------------
|
||||||
|
# Both SPECrate and SPECspeed can test multiple chips / cores / hw threads
|
||||||
|
# - For SPECrate, you set the number of copies.
|
||||||
|
# - For SPECspeed, you set the number of threads.
|
||||||
|
# See: https://www.spec.org/cpu2017/Docs/system-requirements.html#MultipleCPUs
|
||||||
|
#
|
||||||
|
# q. How many should I set?
|
||||||
|
# a. Unknown, you will have to try it and see!
|
||||||
|
#
|
||||||
|
# To get you started, some suggestions:
|
||||||
|
#
|
||||||
|
# copies - This config file defaults to testing only 1 copy. You might
|
||||||
|
# try changing it to match the number of cores on your system,
|
||||||
|
# or perhaps the number of virtual CPUs as reported by:
|
||||||
|
# grep -c processor /proc/cpuinfo
|
||||||
|
# Be sure you have enough memory. See:
|
||||||
|
# https://www.spec.org/cpu2017/Docs/system-requirements.html#memory
|
||||||
|
#
|
||||||
|
# threads - This config file sets a starting point. You could try raising
|
||||||
|
# it. A higher thread count is much more likely to be useful for
|
||||||
|
# fpspeed than for intspeed.
|
||||||
|
#
|
||||||
|
intrate,fprate:
|
||||||
|
copies = 1 # EDIT to change number of copies (see above)
|
||||||
|
intspeed,fpspeed:
|
||||||
|
threads = 4 # EDIT to change number of OpenMP threads (see above)
|
||||||
|
|
||||||
|
|
||||||
|
#------- Compilers ------------------------------------------------------------
|
||||||
|
default:
|
||||||
|
# EDIT: The parent directory for your compiler.
|
||||||
|
# Do not include the trailing /bin/
|
||||||
|
# Do not include a trailing slash
|
||||||
|
# Examples:
|
||||||
|
# 1 On a Red Hat system, you said:
|
||||||
|
# 'yum install devtoolset-9'
|
||||||
|
# Use: % define gcc_dir "/opt/rh/devtoolset-9/root/usr"
|
||||||
|
#
|
||||||
|
# 2 You built GCC in: /disk1/mybuild/gcc-10.1.0/bin/gcc
|
||||||
|
# Use: % define gcc_dir "/disk1/mybuild/gcc-10.1.0"
|
||||||
|
#
|
||||||
|
# 3 You want: /usr/bin/gcc
|
||||||
|
# Use: % define gcc_dir "/usr"
|
||||||
|
# WARNING: See section "Older GCC" above.
|
||||||
|
#
|
||||||
|
#%ifndef %{gcc_dir}
|
||||||
|
#% define gcc_dir "@GCC_DIR@" # EDIT (see above)
|
||||||
|
#%endif
|
||||||
|
|
||||||
|
# EDIT: If your compiler version is 10 or greater, you must enable the next
|
||||||
|
# line to avoid compile errors for several FP benchmarks
|
||||||
|
#
|
||||||
|
%define GCCge10 # EDIT: remove the '#' from column 1 if using GCC 10 or later
|
||||||
|
|
||||||
|
# EDIT if needed: the preENV line adds library directories to the runtime
|
||||||
|
# path. You can adjust it, or add lines for other environment variables.
|
||||||
|
# See: https://www.spec.org/cpu2017/Docs/config.html#preenv
|
||||||
|
# and: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
|
||||||
|
#preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64
|
||||||
|
#preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64:%{ENV_LD_LIBRARY_PATH}
|
||||||
|
#SPECLANG = %{gcc_dir}/bin/
|
||||||
|
CC = %{ENV_CC} -std=c99
|
||||||
|
CXX = %{ENV_CXX} -std=c++03
|
||||||
|
FC = %{ENV_FC}
|
||||||
|
# How to say "Show me your version, please"
|
||||||
|
CC_VERSION_OPTION = --version
|
||||||
|
CXX_VERSION_OPTION = --version
|
||||||
|
FC_VERSION_OPTION = --version
|
||||||
|
|
||||||
|
default:
|
||||||
|
%if %{bits} == 64
|
||||||
|
sw_base_ptrsize = 64-bit
|
||||||
|
sw_peak_ptrsize = 64-bit
|
||||||
|
%else
|
||||||
|
sw_base_ptrsize = 32-bit
|
||||||
|
sw_peak_ptrsize = 32-bit
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
#--------- Portability --------------------------------------------------------
|
||||||
|
default: # data model applies to all benchmarks
|
||||||
|
%if %{bits} == 32
|
||||||
|
# Strongly recommended because at run-time, operations using modern file
|
||||||
|
# systems may fail spectacularly and frequently (or, worse, quietly and
|
||||||
|
# randomly) if a program does not accommodate 64-bit metadata.
|
||||||
|
EXTRA_PORTABILITY = -D_FILE_OFFSET_BITS=64
|
||||||
|
%else
|
||||||
|
EXTRA_PORTABILITY = -DSPEC_LP64
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Benchmark-specific portability (ordered by last 2 digits of bmark number)
|
||||||
|
|
||||||
|
500.perlbench_r,600.perlbench_s: #lang='C'
|
||||||
|
%if %{bits} == 32
|
||||||
|
% define suffix IA32
|
||||||
|
%else
|
||||||
|
% define suffix X64
|
||||||
|
%endif
|
||||||
|
PORTABILITY = -DSPEC_LINUX_%{suffix}
|
||||||
|
|
||||||
|
521.wrf_r,621.wrf_s: #lang='F,C'
|
||||||
|
CPORTABILITY = -DSPEC_CASE_FLAG
|
||||||
|
FPORTABILITY = -fconvert=big-endian
|
||||||
|
|
||||||
|
523.xalancbmk_r,623.xalancbmk_s: #lang='CXX'
|
||||||
|
PORTABILITY = -DSPEC_LINUX
|
||||||
|
|
||||||
|
526.blender_r: #lang='CXX,C'
|
||||||
|
PORTABILITY = -funsigned-char -DSPEC_LINUX
|
||||||
|
|
||||||
|
527.cam4_r,627.cam4_s: #lang='F,C'
|
||||||
|
PORTABILITY = -DSPEC_CASE_FLAG
|
||||||
|
|
||||||
|
628.pop2_s: #lang='F,C'
|
||||||
|
CPORTABILITY = -DSPEC_CASE_FLAG
|
||||||
|
FPORTABILITY = -fconvert=big-endian
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
# GCC workarounds that do not count as PORTABILITY
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
# The workarounds in this section would not qualify under the SPEC CPU
|
||||||
|
# PORTABILITY rule.
|
||||||
|
# - In peak, they can be set as needed for individual benchmarks.
|
||||||
|
# - In base, individual settings are not allowed; set for whole suite.
|
||||||
|
# See:
|
||||||
|
# https://www.spec.org/cpu2017/Docs/runrules.html#portability
|
||||||
|
# https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags
|
||||||
|
#
|
||||||
|
# Integer workarounds - peak
|
||||||
|
#
|
||||||
|
500.perlbench_r,600.perlbench_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/500.perlbench_r.html
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing -fno-unsafe-math-optimizations -fno-finite-math-only
|
||||||
|
502.gcc_r,602.gcc_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/502.gcc_r.html
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing -fgnu89-inline
|
||||||
|
505.mcf_r,605.mcf_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/505.mcf_r.html
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing
|
||||||
|
525.x264_r,625.x264_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/525.x264_r.html
|
||||||
|
EXTRA_CFLAGS = -fcommon
|
||||||
|
#
|
||||||
|
# Integer workarounds - base - combine the above - https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags
|
||||||
|
#
|
||||||
|
intrate,intspeed=base:
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing -fno-unsafe-math-optimizations -fno-finite-math-only -fgnu89-inline -fcommon
|
||||||
|
#
|
||||||
|
# Floating Point workarounds - peak
|
||||||
|
#
|
||||||
|
511.povray_r=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/511.povray_r.html
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing
|
||||||
|
521.wrf_r,621.wrf_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/521.wrf_r.html
|
||||||
|
% ifdef %{GCCge10} # workaround for GCC v10 (and presumably later)
|
||||||
|
EXTRA_FFLAGS = -fallow-argument-mismatch
|
||||||
|
% endif
|
||||||
|
527.cam4_r,627.cam4_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/527.cam4_r.html
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing
|
||||||
|
% ifdef %{GCCge10} # workaround for GCC v10 (and presumably later)
|
||||||
|
EXTRA_FFLAGS = -fallow-argument-mismatch
|
||||||
|
% endif
|
||||||
|
# See also topic "628.pop2_s basepeak" below
|
||||||
|
628.pop2_s=peak: # https://www.spec.org/cpu2017/Docs/benchmarks/628.pop2_s.html
|
||||||
|
% ifdef %{GCCge10} # workaround for GCC v10 (and presumably later)
|
||||||
|
EXTRA_FFLAGS = -fallow-argument-mismatch
|
||||||
|
% endif
|
||||||
|
#
|
||||||
|
# FP workarounds - base - combine the above - https://www.spec.org/cpu2017/Docs/runrules.html#BaseFlags
|
||||||
|
#
|
||||||
|
fprate,fpspeed=base:
|
||||||
|
EXTRA_CFLAGS = -fno-strict-aliasing
|
||||||
|
% ifdef %{GCCge10} # workaround for GCC v10 (and presumably later)
|
||||||
|
EXTRA_FFLAGS = -fallow-argument-mismatch
|
||||||
|
% endif
|
||||||
|
|
||||||
|
|
||||||
|
#-------- Tuning Flags common to Base and Peak --------------------------------
|
||||||
|
#
|
||||||
|
# Speed (OpenMP and Autopar allowed)
|
||||||
|
#
|
||||||
|
%if %{bits} == 32
|
||||||
|
intspeed,fpspeed:
|
||||||
|
#
|
||||||
|
# Many of the speed benchmarks (6nn.benchmark_s) do not fit in 32 bits
|
||||||
|
# If you wish to run SPECint2017_speed or SPECfp2017_speed, please use
|
||||||
|
#
|
||||||
|
# runcpu --define bits=64
|
||||||
|
#
|
||||||
|
fail_build = 1
|
||||||
|
%else
|
||||||
|
intspeed,fpspeed:
|
||||||
|
EXTRA_OPTIMIZE = -fopenmp -DSPEC_OPENMP
|
||||||
|
fpspeed:
|
||||||
|
#
|
||||||
|
# 627.cam4 needs a big stack; the preENV will apply it to all
|
||||||
|
# benchmarks in the set, as required by the rules.
|
||||||
|
#
|
||||||
|
preENV_OMP_STACKSIZE = 120M
|
||||||
|
%endif
|
||||||
|
|
||||||
|
#-------- Base Tuning Flags ----------------------------------------------
|
||||||
|
# EDIT if needed -- If you run into errors, you may need to adjust the
|
||||||
|
# optimization - for example you may need to remove
|
||||||
|
# the -march=native. See topic "Older GCC" above.
|
||||||
|
#
|
||||||
|
default=base: # flags for all base
|
||||||
|
OPTIMIZE = -g -O3 -march=native
|
||||||
|
|
||||||
|
|
||||||
|
#-------- Peak Tuning Flags ----------------------------------------------
|
||||||
|
default=peak:
|
||||||
|
OPTIMIZE = -g -Ofast -march=native -flto
|
||||||
|
PASS1_FLAGS = -fprofile-generate
|
||||||
|
PASS2_FLAGS = -fprofile-use
|
||||||
|
|
||||||
|
# 628.pop2_s basepeak: Depending on the interplay of several optimizations,
|
||||||
|
# 628.pop2_s might not validate with peak tuning. Use the base
|
||||||
|
# version instead. See:
|
||||||
|
# https:// www.spec.org/cpu2017/Docs/benchmarks/628.pop2_s.html
|
||||||
|
628.pop2_s=peak:
|
||||||
|
basepeak = yes
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Tester and System Descriptions - EDIT all sections below this point
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# For info about any field, see
|
||||||
|
# https://www.spec.org/cpu2017/Docs/config.html#fieldname
|
||||||
|
# Example: https://www.spec.org/cpu2017/Docs/config.html#hw_memory
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#--------- EDIT to match your version -----------------------------------------
|
||||||
|
default:
|
||||||
|
sw_compiler001 = C/C++/Fortran: Version 10.1.0 of GCC, the
|
||||||
|
sw_compiler002 = GNU Compiler Collection
|
||||||
|
|
||||||
|
#--------- EDIT info about you ------------------------------------------------
|
||||||
|
# To understand the difference between hw_vendor/sponsor/tester, see:
|
||||||
|
# https://www.spec.org/cpu2017/Docs/config.html#test_sponsor
|
||||||
|
intrate,intspeed,fprate,fpspeed: # Important: keep this line
|
||||||
|
hw_vendor = My Corporation
|
||||||
|
tester = My Corporation
|
||||||
|
test_sponsor = My Corporation
|
||||||
|
license_num = nnn (Your SPEC license number)
|
||||||
|
# prepared_by = # Ima Pseudonym # Whatever you like: is never output
|
||||||
|
|
||||||
|
|
||||||
|
#--------- EDIT system availability dates -------------------------------------
|
||||||
|
intrate,intspeed,fprate,fpspeed: # Important: keep this line
|
||||||
|
# Example # Brief info about field
|
||||||
|
hw_avail = # Nov-2099 # Date of LAST hardware component to ship
|
||||||
|
sw_avail = # Nov-2099 # Date of LAST software component to ship
|
||||||
|
fw_bios = # Version Mumble released May-2099 # Firmware information
|
||||||
|
|
||||||
|
#--------- EDIT system information --------------------------------------------
|
||||||
|
intrate,intspeed,fprate,fpspeed: # Important: keep this line
|
||||||
|
# Example # Brief info about field
|
||||||
|
# hw_cpu_name = # Intel Xeon E9-9999 v9 # chip name
|
||||||
|
hw_cpu_nominal_mhz = # 9999 # Nominal chip frequency, in MHz
|
||||||
|
hw_cpu_max_mhz = # 9999 # Max chip frequency, in MHz
|
||||||
|
# hw_disk = # 9 x 9 TB SATA III 9999 RPM # Size, type, other perf-relevant info
|
||||||
|
hw_model = # TurboBlaster 3000 # system model name
|
||||||
|
# hw_nchips = # 99 # number chips enabled
|
||||||
|
hw_ncores = # 9999 # number cores enabled
|
||||||
|
hw_ncpuorder = # 1-9 chips # Ordering options
|
||||||
|
hw_nthreadspercore = # 9 # number threads enabled per core
|
||||||
|
hw_other = # TurboNUMA Router 10 Gb # Other perf-relevant hw, or "None"
|
||||||
|
|
||||||
|
# hw_memory001 = # 999 GB (99 x 9 GB 2Rx4 PC4-2133P-R, # The 'PCn-etc' is from the JEDEC
|
||||||
|
# hw_memory002 = # running at 1600 MHz) # label on the DIMM.
|
||||||
|
|
||||||
|
hw_pcache = # 99 KB I + 99 KB D on chip per core # Primary cache size, type, location
|
||||||
|
hw_scache = # 99 KB I+D on chip per 9 cores # Second cache or "None"
|
||||||
|
hw_tcache = # 9 MB I+D on chip per chip # Third cache or "None"
|
||||||
|
hw_ocache = # 9 GB I+D off chip per system board # Other cache or "None"
|
||||||
|
|
||||||
|
# sw_file = # ext99 # File system
|
||||||
|
# sw_os001 = # Linux Sailboat # Operating system
|
||||||
|
# sw_os002 = # Distribution 7.2 SP1 # and version
|
||||||
|
sw_other = # TurboHeap Library V8.1 # Other perf-relevant sw, or "None"
|
||||||
|
# sw_state = # Run level 99 # Software state.
|
||||||
|
|
||||||
|
power_management = # briefly summarize power settings
|
||||||
|
|
||||||
|
# Note: Some commented-out fields above are automatically set to preliminary
|
||||||
|
# values by sysinfo
|
||||||
|
# https://www.spec.org/cpu2017/Docs/config.html#sysinfo
|
||||||
|
# Uncomment lines for which you already know a better answer than sysinfo
|
106
pkgs/spec-cpu/tools.nix
Normal file
106
pkgs/spec-cpu/tools.nix
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, libarchive
|
||||||
|
, xz
|
||||||
|
, gnutar
|
||||||
|
, gfortran
|
||||||
|
, coreutils
|
||||||
|
, requireFile
|
||||||
|
, autoPatchelfHook
|
||||||
|
, libxcrypt-legacy
|
||||||
|
, glibc
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "spec-cpu-tools";
|
||||||
|
version = "1.1.7";
|
||||||
|
|
||||||
|
src = requireFile {
|
||||||
|
name = "cpu2017-1.1.7.iso";
|
||||||
|
sha256 = "02630819h64dyy57wkj33fhwwqgbw6mqc5awh1zm48pkvvl0l600";
|
||||||
|
message = ''
|
||||||
|
Missing SPEC CPU 2017 1.1.7.
|
||||||
|
|
||||||
|
Add it to the store with:
|
||||||
|
|
||||||
|
$ nix-prefetch-url file:/path/to/cpu2017-1.1.7.iso
|
||||||
|
/nix/store/mk4hr8xwd62akp7iw5khq638ssba8qz0-cpu2017-1.1.7.iso
|
||||||
|
|
||||||
|
Notice that the name must match exactly "cpu2017-1.1.7.iso".
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
set -x
|
||||||
|
mkdir iso
|
||||||
|
bsdtar -C iso -xf $src
|
||||||
|
chmod +w -R iso
|
||||||
|
|
||||||
|
#for f in iso/install_archives/benchball/*; do
|
||||||
|
# bsdtar -xf $f
|
||||||
|
#done
|
||||||
|
#mkdir src
|
||||||
|
#bsdtar -C src -xf iso/install_archives/benchball/cpu2017-1.1.7.base.tar.xz
|
||||||
|
#bsdtar -C src -xf iso/install_archives/benchball/519.lbm_r-1.000503.tar.xz
|
||||||
|
|
||||||
|
sourceRoot="$PWD/iso"
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
# We need a working specxz binary
|
||||||
|
configurePhase = ''
|
||||||
|
patchShebangs install.sh
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Replace "spec*" tools by symlinks to working binaries
|
||||||
|
pushd tools/bin/linux-x86_64
|
||||||
|
ln -fs ${xz}/bin/xz specxz
|
||||||
|
ln -fs ${gnutar}/bin/tar spectar
|
||||||
|
patchelf \
|
||||||
|
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||||
|
specsha512sum
|
||||||
|
ls -l spec*
|
||||||
|
./specxz -h
|
||||||
|
./spectar --help
|
||||||
|
ldd ./specsha512sum
|
||||||
|
./specsha512sum --help
|
||||||
|
popd
|
||||||
|
|
||||||
|
# sha512sum requires -e, not provided by coreutils
|
||||||
|
|
||||||
|
export SPEC="$sourceRoot"
|
||||||
|
|
||||||
|
# Don't run the tests
|
||||||
|
sed -i 's/^.*shrc will.*$/exit 0/g' install.sh
|
||||||
|
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
bash -x install.sh -f -d $out -u linux-x86_64
|
||||||
|
'';
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
# Fix temporary directory creation
|
||||||
|
sed -i '/^sub get_tmp_directory/a\ return tempdir(CLEANUP => 1);' \
|
||||||
|
$out/bin/common/util_common.pl
|
||||||
|
|
||||||
|
sed -i '/my $dir = jp($top, $config->resultdir, $subdir);/c\ my $dir = ::get_tmp_directory($config, 1);' \
|
||||||
|
$out/bin/harness/log.pl
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Missing libdb-4.7.so
|
||||||
|
autoPatchelfIgnoreMissingDeps = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ libxcrypt-legacy libarchive autoPatchelfHook ];
|
||||||
|
#buildInputs = [ libxcrypt-legacy ];
|
||||||
|
|
||||||
|
enableParallelBuilding = false;
|
||||||
|
hardeningDisable = [ "all" ];
|
||||||
|
dontStrip = true;
|
||||||
|
meta.broken = (stdenv.buildPlatform.config != "x86_64-unknown-linux-gnu") ||
|
||||||
|
(stdenv.hostPlatform.config != "x86_64-unknown-linux-gnu") ||
|
||||||
|
(stdenv.targetPlatform.config != "riscv64-unknown-linux-gnu");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user