SPEC CPU2006 Platform Settings for Windows-based systems
- submit= specperl -e "system sprintf qq{start /b /wait /affinity %x %s}, (1<<$SPECCOPYNUM), qq{ $command } "
- When running multiple copies of benchmarks, the SPEC config file feature submit is used to cause individual jobs to be bound to
specific processors. This specific submit command is used for Windows.
Here is a brief guide to understanding the specific command which will be found in the config file:
- start /b /wait /affinity mask command :
The start command is used to launch a new COMMAND with a given CPU
affinity. The CPU affinity is represented as a bitmask, with the
lowest order bit corresponding to the first logical CPU and highest
order bit corresponding to the last logical CPU. The process is only allowed to run
on a particular logical processor when the corresponding bit in the mask has been set to 1.
- mask: The bitmask (in hexadecimal) corresponding to a specific
SPECCOPYNUM. For example, the mask value for the first copy of a
rate run will be 0x00000001, for the second copy of the rate will
be 0x00000010 etc. Thus, the first copy of the rate run will have a
CPU affinity of CPU0, the second copy will have the affinity CPU1
etc.
- command: Program to be started, in this case, the benchmark instance
to be started.
- KMP_STACKSIZE
- Specify stack size to be allocated for each thread.
- KMP_AFFINITY = granularity=fine,scatter
- The value for the environment variable KMP_AFFINITY affects how the threads from an auto-parallelized program are scheduled across processors.
Specifying granularity=fine selects the finest granularity level, causes each OpenMP thread to be bound to a single thread context.
This ensures that there is only one thread per core on cores supporting HyperThreading Technology
Specifying scatter distributes the threads as evenly as possible across the entire system.
Hence a combination of these two options, will spread the threads evenly across sockets, with one thread per physical core.
- OMP_NUM_THREADS
- Sets the maximum number of threads to use for OpenMP* parallel regions if no
other value is specified in the application. This environment variable
applies to both -openmp and -parallel (Linux and Mac OS X) or /Qopenmp and /Qparallel (Windows).
Example syntax on a Linux system with 8 cores:
export OMP_NUM_THREADS=8
- Hardware Prefetch:
-
This BIOS option allows the enabling/disabling of a processor mechanism
to prefetch data into the cache according to a pattern-recognition algorithm
In some cases, setting this option to Disabled may improve performance.
Users should only disable this option after performing application benchmarking
to verify improved performance in their environment.
- Adjacent Sector Prefetch:
-
This BIOS option allows the enabling/disabling of a processor mechanism
to fetch the adjacent cache line within a 128-byte sector that contains the
data needed due to a cache line miss.
In some cases, setting this option to Disabled may improve performance.
Users should only disable this option after performing application benchmarking
to verify improved performance in their environment.
- High Bandwidth:
- Enabling this option allows the chipset to defer memory transactions and
process them out of order for optimal performance.