<?xml version="1.0"?>
<!DOCTYPE flagsdescription SYSTEM "http://www.spec.org/dtd/cpuflags1.dtd">

<flagsdescription>

<filename>Intel-Windows-Platform-Settings-revC</filename>

<title>SPEC CPU2006 Platform Settings for Windows-based systems</title>


<platform_settings>
<![CDATA[ 
<dl>                 
  <dt><b>submit= specperl -e "system sprintf qq{start /b /wait /affinity %x %s}, (1&lt;&lt;$SPECCOPYNUM), qq{ $command } " </b></dt>
   <dd>When running multiple copies of benchmarks, the SPEC config file feature <b>submit</b> is used to cause individual jobs to be bound to 
   specific processors. This specific submit command is used for Windows. <br />
   Here is a brief guide to understanding the specific command which will be found in the config file:
   <ul>
   <li><b>start /b /wait /affinity mask command </b>: <br/>
   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. <br/>
   </li>
   <li><b>mask</b>: 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.</li>
   <li><b>command</b>: Program to be started, in this case, the benchmark instance 
    to be started.</li>
   </ul>
   </dd>		 
</dl>

<dl>

  <dt><b>KMP_STACKSIZE </b></dt>
  <dd> Specify stack size to be allocated for each thread.  </dd>

  <dt><b>KMP_AFFINITY = granularity=fine,scatter </b></dt>
  <dd>The value for the environment variable KMP_AFFINITY affects how the threads from an auto-parallelized program are scheduled across processors. <br/>
  Specifying granularity=fine selects the finest granularity level, causes each OpenMP thread to be bound to a single thread context. <br/>
  This ensures that there is only one thread per core on cores supporting HyperThreading Technology<br/>
  Specifying scatter distributes the threads as evenly as possible across the entire system. <br/> 
  Hence a combination of these two options, will spread the threads evenly across sockets, with one thread per physical core. <br/> </dd>

  <dt><b>OMP_NUM_THREADS </b></dt>
  <dd>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 </dd>

</dl>

<dl>
 <dt><b>Hardware Prefetch:</b></dt> 
 <dd>
  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.
 </dd>

 <dt><b>Adjacent Sector Prefetch:</b></dt> 
 <dd>
  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.
 </dd>

 <dt><b>High Bandwidth:</b></dt> 
 <dd>Enabling this option allows the chipset to defer memory transactions and 
     process them out of order for optimal performance.</dd>
</dl>

]]>
</platform_settings>


</flagsdescription>

