SPEC CPU®2017 Benchmark Description

Benchmark Name


Benchmark Authors

Larry Wall, et. al.

Benchmark Program General Category

Programming language

Benchmark Description

500.perlbench_r is a cut-down version of Perl v5.22.1, the popular scripting language. SPEC's version of Perl has had most of OS-specific features removed. To understand how SPEC's version differs from the original, please see the comments in spec_config.h.

Input Description

The reference workload for 500.perlbench_r consists of three scripts:

The training workload is similar, but not identical, to the reference workload from CPU2000. The test workload consists of the non-system- specific parts of the actual Perl 5.20.1 test harness.

Adding workloads is just a matter of adding another script and associated input data to the input directories. The script must have a .pl extension. If it needs input parameters, it will also be necessary to edit object.pm to enable those to be read from a file.

Output Description

In the case of the mail-based benchmarks, a line with salient characteristics (number of header lines, number of body lines, etc) is output for each message generated. During processing, MD5 hashes of the contents of output "files" (in memory) are computed and output. For SpamAssassin, the message's score and the rules that it triggered are also output.

Programming Language


Known Portability Issues

Windows compilers that do not automatically define _MSC_VER may define SPEC_CPU_NEED_POSIX_IDS as a portability flag to enable compilation.

There are some known aliasing issues. The internal data structures that represent Perl's variables are accessed in such as a way as to violate ANSI aliasing rules. Compilation with optimizations that rely on strict compliance to ANSI C aliasing rules will most likely produce binaries that will not validate. A typical symptom that you might see is:

Attempt to free unreferenced scalar: SV 0x7fa54a8031c0 at lib/strict.pm line 38.
perlbench_r_base.may07a-m64(94624,0x7ffff25803c0) malloc: *** error for object 0x7fa54a4138a8: pointer being freed was not
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

Solution: Tell your compiler to be less aggressive in its optimizations, in particular as regards aliasing issues.
For example, with GCC, you might try:

Sources and Licensing

500.perlbench_r is based on perl-5.22.1, plus several third-party modules, including:

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

To avoid any possible conflict with standard executables, the benchmark is given the name 'perlbench'. Its differences are primarily described in the comments to spec_config.h. In brief: perlbench is a constrained version of perl which tries to remove most operating-system-specific functions, while leaving behind a set of features which are interesting as a CPU benchmark. The SPEC CPU® suites intentionally do not spend significant time in operating system services or IO.

