#------------------------------------------------------------------------------ # SPEC CPU(R) 2017 config for gcc/g++/gfortran on Linux RISC-V (Little-Endian) #------------------------------------------------------------------------------ # # 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): GCC 11.3.0 # Operating system(s): Ubuntu 22.04.1 LTS # Hardware: StarFive (rv64imafdc sifive,u74-mc) # # 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 old; please check for alternate packages that # may provide a newer version. If you must use an older version, you may # find that you run into unexpected errors. Sometimes, errors may be # resolved by reducing the optimization level (search below for OPTIMIZE). # # 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 "mytest" # (2) Use a label meaningful to *you*. %endif #--------- Preprocessor ------------------------------------------------------- %ifndef %{build_ncpus} # EDIT to adjust number of simultaneous compiles. % define build_ncpus 2 # Or, you can set it on the command line: %endif # 'runcpu --define build_ncpus=nn' # Don't change this part. %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} 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 # EDIT: optionally add ",peak" here. See # https://www.spec.org/cpu2017/Docs/overview.html#Q16 #--------- 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, here are 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 = 2 # 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: # 'dnf install gcc-toolset-12' # Use: % define gcc_dir "/opt/rh/gcc-toolset-12/root/usr" # # 2 You built GCC in: /disk1/mybuild/gcc-12.2.0/bin/gcc # Use: % define gcc_dir "/disk1/mybuild/gcc-12.2.0" # # 3 You want: /usr/bin/gcc # Use: % define gcc_dir "/usr" # WARNING: See section "Older GCC" above. # %ifndef %{gcc_dir} % define gcc_dir "/usr" # EDIT (see above) %endif # EDIT: GCC 10 introduced several changes affecting SPEC CPU 2017 benchmarks. # This config file assumes you are using GCC 10 or later. If that is # not correct, remove (or comment out) the next line. # %define GCCge10 # EDIT: for GCC 9 or earlier, remove this line # 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/:/lib64 #preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:/lib64:%{ENV_LD_LIBRARY_PATH} SPECLANG = %{gcc_dir}/bin/ CC = $(SPECLANG)gcc -std=c99 CXX = $(SPECLANG)g++ -std=c++03 FC = $(SPECLANG)gfortran # How to say "Show me your version, please" CC_VERSION_OPTION = --version CXX_VERSION_OPTION = --version FC_VERSION_OPTION = --version default: sw_base_ptrsize = 64-bit sw_peak_ptrsize = Not Applicable #--------- Portability -------------------------------------------------------- default: # data model applies to all benchmarks EXTRA_PORTABILITY = -DSPEC_LP64 # Benchmark-specific portability (ordered by last 2 digits of bmark number) 500.perlbench_r,600.perlbench_s: #lang='C' PORTABILITY = -DSPEC_LINUX_PPC_LE 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) # 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 = 192M #-------- Base Tuning Flags ---------------------------------------------- # EDIT if needed -- If you run into errors, you may need to adjust the # optimization. See topic "Older GCC" above. # default=base: # flags for all base OPTIMIZE = -g -O3 #-------- Peak Tuning Flags ---------------------------------------------- default=peak: OPTIMIZE = -g -Ofast 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_compiler000 = C/C++/Fortran: Version 11.3.0 of GCC, the sw_compiler001 = 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