SPEC CPU®2017 Benchmark Description

Benchmark Name


Benchmark Author

National Center for Atmospheric Research (NCAR)

Benchmark Program General Category

Atmosphere General Circulation Model (AGCM)

Benchmark Description

The Community Atmosphere Model (CAM) is the atmosphere component used by the Community Earth System Model (CESM).

This benchmark is running code which is part of the publicly released CESM-1.0.2. The version of CAM in that release is CAM-5.0. In order to obtain as robust a validation procedure as possible, the benchmark runs use a special configuration which employs a prescribed ocean only lower boundary condition. This is the configuration used by the Aqua-Planet Experiment Project.

The model is run in a backwards compatibility mode to use the "cam4" physics package that was originally released in CAM-4.0, and which has been used in the majority of the CESM simulations done for CMIP5, as analyzed for the IPCC Fifth Assessment Report (AR5).

The validation procedure uses a perturbation growth test described here.

Input Description

The files atm_in and drv_in contain the Namelist groups read by CAM and are documented here.

The data sets are identical for all four of the SPEC®-provided workloads (test, train, refrate, refspeed), with some differences in how they are processed:

Output Description

The log file, written to standard out, contains a summary of how the model has been configured. Some global statistics of the atmospheric state are printed for each model time step.

The netCDF output file, h0.nc, contains global temperature fields for the written timesteps.


The program cam4_validate (which is built at the same time as the benchmark binary) compares h0.nc vs. SPEC's expected outputs using a root mean square differences. The validation program accepts 4 parameters:

  maxf:   Maxium of failures to print
  reltol: Allowable Relative tolerance 
  ctrl:   Expected results (provided by SPEC)
  bench:  Results from a benchmark run

The tolerance mentioned just above is set by routine compare_commands within 627.cam4_s/Spec/object.pm.

Lastly, specdiff checks the output of cam4_validate

What this means when deciphering log files: If your run fails, you may see something like the following in the $SPEC/result log file:

*** Miscompare of cam4_validate.txt; for details see
0001:   PASS:  4  points.
        Failure at Step:  2 1 1 1

The above message means that specdiff expected to find that cam4_validate had written PASS but instead cam4_validate has written other stuff. To find the details, you should cd to the run directory that was referenced in the log file, and examine cam4_validate.txt.

$ head -4 cam4_validate.txt
 Failure at Step:  2 1 1 1
          Actual:  218.14015096246447
        Expected:  217.62126113318524
          Reltol:  2.384371024123735E-3

In the above example, the validation utility has printed the actual and expected values, and has indicated the validation tolerance that would be needed if this difference were acceptable.

Programming Language

Fortran90 and C

Version and Licensing

The CAM-5.0 code has been extracted from CESM-1.0.2 and is public domain software.

Known portability issues

  1. Data format: Depends on NETCDF as packaged with the benchmark. By default, the workload will be formatted to use big endian. To use little endian formatting, set the appropriate compiler option to byte-swap the input I/O or set the define flag SPEC_WORDS_LITTLEENDIAN.

  2. Stack: The OpenMP version of CAM4 uses a large amount of stack space. The exact amount will vary by system, compiler, and number of threads. You will most likely need to set both the process stack and the OpenMP environment variable OMP_STACKSIZE to a large value, such as 128M or greater. See the examples at config.html#preenv.

  3. spec_qsort and ANSI aliasing: The spec_qsort.c routine does not strictly obey the ANSI aliasing rules. See the detailed discussion in the documentation for 505.mcf_r, which is where the problem was reported.

    If you are compiling with the GCC compiler, it is theoretically possible that you might need to add -fno-strict-aliasing to 627.cam4_s as well. The Example GCC config files as updated for SPEC CPU 2017 v1.1.5 demonstrate how to do so.

  4. GCC 10 argument mismatch: If you compile using GCC 10 (and presumably later) compilers, you must use -fallow-argument-mismatch. If you do not include this flag, compiles will fail with message:

    Error: Type mismatch between actual argument at (1) and actual argument at (2)

    For more information, see https://gcc.gnu.org/gcc-10/porting_to.html.

    Note that in accordance with the same-for-all rule www.spec.org/cpu2017/Docs/runrules.html#BaseFlags it is not allowed to set -fallow-argument-mismatch as a PORTABILITY option. Instead, it must be applied to all of Base. The Example GCC config files as updated for SPEC CPU 2017 v1.1.4 obey this rule.

Sources and Licensing

527.cam4 is based on an early version of CESM, plus netcdf and several BSD-licensed components.

Please see details in the document SPEC CPU®2017 Licenses.


  1. Community Earth System Model (CESM)
  2. Aqua-Planet Experiment Project
  3. CMIP5
  4. Validation Process
  5. Input File Description
  6. Copyright

Last updated: $Date: 2020-09-23 10:06:01 -0400 (Wed, 23 Sep 2020) $

Copyright © 2017-2020 Standard Performance Evaluation Corporation (SPEC®)