Letzteres ist richtig. Es gibt aber eine Möglichkeit, die Zuordnung von ungleichen Atomtypen zu bestrafen.
Die dich interessierende Option ist -A >filename<, die eine Straftermmatrix einliest. Der Hilfetext dazu ist am Ende von `haystack -hh` zu finden.
Hier sind einige Beispielmatrizen:
Protonen werden voll berücksichtigt, wenn sie in den Eingabefiles vorhanden sind. In NeedleHaystack werden die Eingabedaten kaum vorgefiltert (Ausnahme MODEL, ALTLOC), die Verarbeitung soll schon vorher passieren. Ich benutze dazu Skripts, die ich auf Anfrage versenden kann.
Die Berechnungen im Paper wurden mithilfe geschachtelter Makefiles gemacht, das ist relativ unübersichtlich. Ich kann aber das Wesentliche zusammenfassen:
mkdir -p log
for m in models/*; do
mkdir -p $m;
for t in targets/*; do
haystack -I Params.ini $m $t -su $m/$t > log/$m-$t.out 2> log/$m-$t.err
done
done
NeedleHaystack benutzt in der Tat an einigen Stellen bewusst Elemente stochastischer Methoden. Diese werden über Compileroptionen gesteuert.
Sie heißen: NOT_TARGET_RANDOMIZE und
NOT_MODEL_RANDOMIZE. Dieses "Durcheinanderschütteln" der
Atome hat im Durchschnitt einen Vorteil. Für Referenzzwecke
hinterlege ich aber Versionen, in denen das abgeschaltet wird: Standardmäßig benutzt NeedleHaystack Zufallszahlen, deren Startwerte
sich aus den Millisekunden der aktuellen Zeit errechnen, es sind also
echte Zufallszahlen. Eine andere Compileroption ändert das zu
Pseudo-Zufallszahlen. Damit sind die Ergebnisse von NeedleHaystack
normalerweise auf dem selben Rechner reproduzierbar. Sie heißt: REALRANDOM last update: 26.2.2008
haystack_nocona_norandom
haystack_pentiumpro_norandom
haystack_athlonxp_norandom
haystack_pentium4_norandom
haystack_nocona_norealrandom
haystack_pentiumpro_norealrandom
haystack_athlonxp_norealrandom
haystack_pentium4_norealrandom
Daneben ergibt sich auch durch die Zeitsteuerung
nichtdeterministisches Verhalten. Für komplett reproduzierbare
Ergebnisse muss also Timeout bzw. -to ausgeschaltet
werden.
4. Wie kann man prüfen, welche Compileroptionen eine Programmversion hat?
haystack -v
Dann erscheint so etwas:
Unter "Compiler flags:" finden sich unter "-D" die Compileroptionen.
haystack version 3.3.21
(unrestricted length/4 word floats/4 word precision floats)
no checks done, no warnings done
Compiler: Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/specs Configured with: /var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.3.6 --includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/info --with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --enable-java-awt=gtk --enable-languages=c,c++,java,objc,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 3.3.6 (Gentoo 3.3.6, ssp-3.3.6-1.0, pie-8.7.8)
Compiler flags: -DDOUBLEFLOAT -DLARGEINDECES -DNOMALLINFO -DMAININFO -DLINUX -DREALRANDOM -DPSF_IMPORTANCE -DPSF_ORIENT -DPSF_ATOMMATCH -DPSF_MEANS -Wall -Wno-uninitialized -D_GNU_SOURCE -pipe -mcpu=athlon-xp -march=athlon-xp -static -O3 -ffast-math
Inlining: yes
Compiled: Thu Oct 26 17:06:41 CEST 2006