<benchmark>.xml
===============

Name und Beschreibung des Benchmarks. Wichtig ist hier der ``shortname``, unter
dem der Benchmark weiter referenziert wird.

.. code-block:: xml

 <?xml version="1.0" encoding="UTF-8"?>
 <!-- benchmark environment -->
 <benchmark shortname="hpcc" type="standalone">
     <fname>HPC Challenge</fname>
     <version>1.3.1</version>
     <description>bla bla bla</description>

Benötigt der Benchmark Argumente? Muß vorher/nachher etwas getan werden? Welche
Module müssen geladen werden, damit alles tut? Diese Eigenheiten sollen hier
abgedeckt werden. Bei ``call`` sind die Angaben ``copy`` und ``absolute``
gültig.  Ersteres ist nützlich für Benchmarks, die keine Parameter für die
Angabe der Konfigurationsdatei bieten und diese deshalb immer im selben
Verzeichnis suchen (z.B. ``hpcc``).

.. code-block:: xml

    <run>       
        <path>/bin/ls</path>
        <call>absolute</call>
        <arguments></arguments>
        <precmd></precmd>
        <postcmd></postcmd>
        <module version="10.1.015">icc</module>
        <module version="10.1.0.015">imkl</module>
        <module version="10.1.015">ifort</module>
        <module version="3.2.0.011">impi</module>
    </run>

Andere Typen für Konfigurationsdateien könnten sein: ``none`` oder einfach
``file``.  Der Typ ``fixedPosFile`` ist eine Fortran-Stil Datei, die Werte an
ganz bestimmten Zeilen erwartet. Der Name (z.B. ``problem_size``) ist der, der
vom User in seiner run Datei überschrieben werden kann (mit Präfix).

.. code-block:: xml

    <config type="fixedPosFile">
        <template>hpccinf.txt</template>
        <!-- changeable values and their defaults. -->
        <var pos="6" default="10000">problem_size</var>
        <var pos="11" default="3">row_process_mapping</var>
        <var pos="12" default="4">column_process_mapping</var>
    </config>

Wie die Werte wiedergefunden werden, steht hier. Der Typ sagt, es gibt eine
parsbare Datei im ``variable = value`` Format (``nameValue``). Die Variable
heisst dann z.B. ``HPL_Tflops`` und der Wert dahinter ist in der Einheit
``Tflops``.

.. code-block:: xml

    <output type="parsefile" format="nameValue">
        <!-- where to find the relevant results -->
        <value unit="Tflops" name="HPL_Tflops">floatingpoint performance</value>
    </output>
 </benchmark>

Es fehlen noch Angaben zur graphischen Ausgabe.

Die DTD-Datei ``benchmark.dtd`` wird nicht per xml Datei gesetzt, sondern von
der Software. So soll vermieden werden, dass unterschiedliche DTDs entstehen
(Benchmark Beschreibungen sind aufgeteilt in einzelne Dateien).

.. code-block:: xml

 <!ELEMENT benchmark (fname, version, description, run, config, output)>
 <!ATTLIST benchmark
     shortname CDATA #REQUIRED
     type CDATA #IMPLIED>
 <!ELEMENT fname (#PCDATA)>
 <!ELEMENT version (#PCDATA)>
 <!ELEMENT description (#PCDATA)>
 <!ELEMENT run (path, call, arguments, precmd+, postcmd+, module+)>
 <!ELEMENT path (#PCDATA)>
 <!ELEMENT call (#PCDATA)>
 <!ELEMENT arguments (#PCDATA)>
 <!ELEMENT precmd (#PCDATA)>
 <!ELEMENT postcmd (#PCDATA)>
 <!ELEMENT module (#PCDATA)>
 <!ATTLIST module
     version CDATA #IMPLIED>
 <!ELEMENT config (template, var*)>
 <!ATTLIST config
     type CDATA #REQUIRED>
 <!ELEMENT template (#PCDATA)>
 <!ELEMENT var (#PCDATA)>
 <!ATTLIST var
     pos CDATA #REQUIRED
     default CDATA #REQUIRED>
 <!ELEMENT output (value*)>
 <!ATTLIST output
     type CDATA #REQUIRED
     format CDATA #REQUIRED>
 <!ELEMENT value (#PCDATA)>
 <!ATTLIST value
     unit CDATA #REQUIRED
     name CDATA #REQUIRED>