These changes are dependent on the changes purposed in https://reviews.llvm.org/D43314 and https://reviews.llvm.org/D43316.
This adds parts of LCALS as google benchmarks to the test suite. The loop suite is partitioned into 3 subsets based on their origins.
LCALS (“Livermore Compiler Analysis Loop Suite”) is a collection of loop kernels based, in part, on historical “Livermore Loops” benchmarks (See the 1986 technical report: “The Livermore Fortran Kernels: A Computer Test of the Numerical Performance Range”, by Frank H. McMahon, UCRL-53745.).
- Subset A: Loops representative of those found in application codes. They are implemented in source files named runA<variant>Loops.cxx.
- Subset B: Basic loops that help to illustrate compiler optimization issues. They are implemented in source files named runB<variant>Loops.cxx
- Subset C: Loops extracted from "Livermore Loops coded in C" developed by Steve Langer, which were derived from the Fortran version by Frank McMahon. They are implemented in source files runC<variant>Loops.cxx
Being added are google benchmark versions of the Raw and ForeachLambda variants in the 3 sizes.
- SubsetALambdaLoops: 18 tests (6 loops x 3 sizes)
- SubsetARawLoops: 18 tests (6 loops x 3 sizes)
- SubsetBLambdaLoops: 12 tests (4 loops x 3 sizes)
- SubsetBRawLoops: 12 tests (4 loops x 3 sizes)
- SubsetCLambdaLoops: 60 tests (20 loops x 3 sizes)
- SubsetCRawLoops: 60 tests (20 loops x 3 sizes)
When run on Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz (Haswell):
- SubsetA takes around 22 seconds (18 tests reported).
- SubsetB takes around 16 seconds (12 tests reported).
- SubsetC takes around 61 seconds (60 tests reported).
The machine being used should not affect the runtime of the tests by much as the benchmark library will adjust the number of iterations up or down. There are several ways I can adjust the overall run time, but as this will be reporting multiple results from each executable I was unsure what the expectation would be.