<?xml version='1.0' encoding="UTF-8"?>

<!-- $Id: gentoo-alpha-compaq-tools.xml,v 1.9 2012/06/30 18:42:54 swift Exp $ -->

<!--
	Sync: 1.4
-->

<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<guide disclaimer="obsolete">
<title>Handleiding tot de Compaq-Tools op Gentoo Alpha</title>
<author title="Gentoo Alpha Developer">
    <mail link="taviso@gentoo.org">Tavis Ormandy</mail>
</author>
<author title="Editor">
    <mail link="peesh@gentoo.org">Jorge Paulo</mail>
</author>
<author title="Translator">
    <mail link="swift@gentoo.org">Sven Vermeulen</mail>
</author>


<abstract>
Deze handleiding is een inleiding tot de gratis Compaq tools voor de Gentoo
Alpha gebruikers.
</abstract>

<license />
<version>1.0.1</version>
<date>30 September 2003</date>
<chapter>
<title>Inleiding</title>
<section>
<title>Licentieoverwegingen</title>
<body>
<p>
Alvorens je verder leest in deze handleiding moet je eerst kijken in welke mate
je de Compaq tools wil gebruiken. Indien je meer wil gebruiken dan de runtime
bibliotheken <c>dev-libs/libots</c> en <c>dev-libs/libcpml</c> moet je je
aanvraag indienen als academisch of enthousiastische gebruiker.
</p>
<pre caption="HP Educational and Enthusiast License">
The Software may be used solely for your individual and personal "enthusiast"
purposes or personal education and study. It may not be used for any
commercial, business or institutional purpose, whether "for profit" or "not
for profit." Any work performed or produced as a result of the use of this
Software cannot be performed or produced for the benefit of other parties for
a fee, compensation or any other reimbursement or remuneration.
</pre>
<note>
Indien bovenstaande niet voor jou geldt kan je een <uri
link="http://h18000.www1.hp.com/products/software/alpha-tools/purchase.html">commeriele
licentie</uri> aanschaffen van HP, welke je meer flexibiliteit geeft bij het
gebruiken van de toolkit.
</note>
<p>
Indien je je wil kwalificeren voor een vrije licentie moet je jezelfregistreren bij HP via het online formulier op <uri>http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html</uri>. Eenmaal je aanvraag doorgevoerd is zal HP je een licentiesleutel doorzenden die je kan gebruiken om de Compaq Compilers te decrypteren en installeren.
</p>
</body>
</section>
<section>
<title>Compaq Tools Overzicht</title>
<body>
<p>
Indien PC-optimalisaties voor jou bekend terrein zijn heb je waarschijnlijk wel
al gehoord van <uri
link="http://www.intel.com/software/products/compilers/clin/">icc</uri>,
Intel's optimaliserende compiler voor Pentium processors. Het equivalent voor
Alpha gebruikers zijn <uri link="http://www.support.compaq.com/alpha-tools/">de
professionele Linux ontwikkelingstools</uri>, een set van hoogperformante
bibliotheken, compilers en tools specifiek voor het Alpha platform, gratis
beschikbaar voor de Alpha enthousiasten en voor educationeel gebruik.
Experimenteren met deze bibliotheken en compilers in Portage is een efficiente
manier om de performantie van je Gentoo Alpha systeem op te krikken.
</p>
<p>De volgende tools zijn beschikbaar voor de Gentoo Alpha Linux gebruikers:</p>

<table>
<tr>
<th>Tool</th>
<th>Uitleg</th>
<th>Portage Naam</th>
</tr>
<tr>
<ti>libots</ti>
<ti>Gecompileerde code ondersteuning, een afhankelijkheid nodig bij het gebruik
van de toolkit.</ti>
<ti>dev-libs/libots</ti>
</tr>
<tr>
<ti><uri link="http://www.support.compaq.com/alpha-tools/software.html#cpml">libcpml</uri></ti>
<ti>Compaq Portable Math Library, een hoogperformante mathematische bibliotheek voor Alpha gebruikers die je kan gebruiken om rekenkundige bewerkingen in applicaties te versnellen.</ti>
<ti>dev-libs/libcpml</ti>
</tr>
<tr>
<ti><uri link="http://www.support.compaq.com/alpha-tools/software.html#c">ccc</uri></ti>
<ti>De Compaq C Compiler, zeer geoptimaliseerd en getweaked voor het Alpha platform, bevat een optimaliserende codegenerator specifiek ontworpen voor de 64-bit Alpha-architectuur. Ze is zeer geschikt en bevat uitgebreide ondersteuning voor systeemprogrammering, parallelle programmering en rekenkundige bewerkingen.</ti>
<ti>dev-lang/ccc</ti>
</tr>
<tr>
<ti><uri link="http://www.support.compaq.com/alpha-tools/software.html#cxx">cxx</uri></ti>
<ti>De Compaq C++ compiler, specifiek geoptimaliseerd voor de Alpha-architectuur, bevat dezelfde optimaliserende mogelijkheden als de Compaq C Compiler maar dan voor C++ programmeurs.</ti>
<ti>dev-lang/cxx</ti>
</tr>
<tr>
<ti><uri link="http://www.support.compaq.com/alpha-tools/software.html#ladebug">ladebug</uri></ti>
<ti>Compaq's beroemde debugger voor Tru64, geport naar Alpha Linux, bevat uitgebreide ondersteuning voor applicaties gecompileerd met de Compaq C-compiler.</ti>
<ti>dev-util/ladebug</ti>
</tr>
<tr>
<ti><uri link="http://www.support.compaq.com/alpha-tools/software.html#cxml">libcxml</uri></ti>
<ti>Compaq's eXtended Math Library, een hoog performante mathematische bibliotheek voor Fortran, C en C++ programmeurs.</ti>
<ti>dev-libs/libcxml</ti>
</tr>
</table>
<note>
Op het moment van schrijven zijn sommige Compaq Tools enkel beschikbaar onder
<c>~alpha</c>. Dat wil zeggen dat, alhoewel ze getest zijn en werken, ze nog
geen zeer intensieve tests ondergaan hebben waardoor we niet 100% zeker zijn
dat ze volledig stabiel werken. Indien je deze zaken toch wil installeren moet
je het commando <c>ACCEPT_KEYWORDS="~alpha"</c> meegeven voor het <c>emerge</c>
commando.
</note>
<note>
Indien je een probleem ondervindt met <c>ccc</c> of <c>cxx</c> of enige andere
Compaq Tool, gelieve dan een bug te maken op <uri
link="http://bugs.gentoo.org">Gentoo's Bugzilla</uri> en stel de "Assignee" in
op <mail link="taviso@gentoo.org">taviso@gentoo.org</mail>.
</note>
</body>
</section>
</chapter>
<chapter>
<title>De ontwikkeltools installeren</title>
<section>
<title>Runtime bibliotheken</title>
<body>
<p>
De eerste stap is het installeren van de runtime bibliotheken. Wegens
licentie-restricties kunnen we deze RPMs niet aanbieden en moet je ze manueel
downloaden van Compaq.
</p>
<p>
<uri>ftp://ftp.compaq.com/pub/products/linuxdevtools/latest/downloads.html</uri>
</p>
<p>
Download de libots en libcpml RPMs en plaats ze in
<path>/usr/portage/distfiles</path>.
</p>

<note>
Indien je een ev6 of hogere processor hebt moet je de ev6 geoptimaliseerde
libcpml RPM downloaden aangezien deze de mogelijkheden van je nieuwere
processor volledig benut. Ze moet tevens "ev6" toevoegen aan je USE in
<path>/etc/make.conf</path> zodat de ebuild weet dat je de geoptimaliseerde RPM
gebruikt. Indien je niet weet welke processor je hebt, gebruik dan onderstaand
commando om het te weten te komen:
</note>

<pre caption="De runtime bibliotheken downloaden">
<comment>Controleer je CPU versie</comment>
# <i>uname -p</i>
EV56
# <i>mv libots-2.2.7-2.alpha.rpm cpml_ev?-5.2.0-1.alpha.rpm /usr/portage/distfiles</i>
</pre>
<p>
De RPMs zitten nu in je distfiles directorie zodat Portage deze zal kunnen
vinden en installeren op je systeem. Gebruik de volgende commando's om de
bibliotheken te installeren.
</p>
<pre caption="De vereiste bibliotheken installeren">
<comment>Controleer of alles in orde lijkt:</comment>
# <i>emerge -pv dev-libs/libots dev-libs/libcpml</i>
# <i>emerge dev-libs/libots dev-libs/libcpml</i>
</pre>
<p>
Nu dat de bibliotheken geinstalleerd staan ben je klaar om de compilers en
tools te installeren.
</p>
</body>
</section>
<section>
<title>De compilers installeren</title>
<body>
<p>
Indien je je nog niet geregistreerd hebt als een enthousiast of academische
gebruiker bij HP dan is het nu een goed idee. Het duurt ongeveer 24h alvorens
je je licentie krijgt nadat je het formulier ingevuld hebt.
</p>
<p>
<uri>http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html</uri></p>
<warn>
Je zal gevraagd worden om je details en e-mailadres te installeren. Het
e-mailadres moet geldig zijn aangezien ze naar dat adres de licentiesleutel
zullen zenden die nodig is om de compilers te activeren.
</warn>
<note>
Je zal tevens gevraagd worden waarom je een dergelijke gratis licentie wil,
bijvoorbeeld "Thuis Alpha-enthousiaste gebruiker" of "Voor academisch gebruik
op de XYZ universiteit".
</note>
 <p>
Wanneer je licentieaanvraag aanvaard wordt zal je een e-mail verkrijgen met de
licentiesleutel. Gebruik deze in onderstaande commando's om de <c>ccc</c> en
<c>cxx</c> compilers.</p>
<pre caption="Compaq C installeren">
<comment>Controleer of alles in orde blijkt:</comment>
# <i>emerge -pv dev-lang/ccc</i>
# <i>CCC_LICENSE_KEY=0123456789 emerge dev-lang/ccc</i>
# <i>ebuild /var/db/pkg/dev-lang/ccc-6.5.9.001.ebuild config</i>
</pre>
<note>
Herinner je eraan om 0123456789 te substitueren met de licentiesleutel.
</note>
<note>
Controleer welke versie van de C compiler je zal installeren alvorens je het
ebuild commando uitvoert. Emerge zal je het commando dat je moet uitvoeren
tonen na het beeindigen van het <c>emerge</c> commando. Het <c>ebuild</c>
commando zal de compiler op je systeem configureren zodat het de
systeembestanden en -bibliotheken kan vinden.
</note>
<p>
Indien alles OK lijkt moet je nu de Compaq C Compiler geinstalleerd staan
hebben en moet je ze kunnen gebruiken om applicaties via Portage of manueel te
compileren. Indien je de C++ compilers ook wil installeren moet je onderstaande
commando's gebruiken. Vergeet niet <c>cxx</c> uit te voeren op het einde om de
EULA goed te keuren.
</p>
<pre caption="Installeren van Compaq C++">
<comment>Controlleer of alles in orde lijkt:</comment>
# <i>emerge -pv dev-lang/cxx</i>
# <i>CXX_LICENSE_KEY=0123456789 emerge dev-lang/cxx</i>
# <i>ebuild /var/db/pkg/dev-lang/cxx-6.5.9.31-r1.ebuild config</i>
<comment>Lees en keur de EULA goed</comment>
# <i>cxx</i>
</pre>
<p>
Indien je de <c>ladebug</c> debugger wil kunnen gebruiken moet je deze nu
installeren:
</p>
<pre caption="Installeren van Ladebug, de Compaq debugger">
# <i>emerge -pv dev-util/ladebug</i>
# <i>emerge dev-util/ladebug</i>
</pre>

<note>
Ladebug kan gebruikt worden met zowel <c>gcc</c> als <c>ccc/cxx</c>
gecompileerde bestanden. Indien je van een Tru64 achtergrond komt zal je zeer
gemakkelijk met <c>ladebug</c> om kunnen gaan en zal je je waarschijnlijk beter
voelen met <c>ladedebug</c> dan met <c>gdb</c> voor algemene debugging.
</note>

</body>
</section>
</chapter>
<chapter>
<title>De Compaq Tools gebruiken onder Portage</title>
<section>
<title>C/C++ programma's compileren met Portage</title>
<body><p>
Programmas via portage compileren met <c>ccc</c> is eenvoudig. In het volgende
voorbeeld zullen we voortonen hoe je <c>gzip</c> compileert, een programma
waarvan we weten dat ze zeer goede performantiewinst haalt uit <c>ccc</c>.
</p>
<pre caption="Compileren via ccc">
# <i>emerge -pv gzip</i>
# <i>CC=ccc CFLAGS="-host -fast" emerge gzip</i>
</pre>
<p>
<c>ccc</c> heeft veel optimalisatie-mogelijkheden. Hieronder vind je een
overzicht en uitleg over de CFLAGS alsook enkele vaakgebruikte opties.
</p><p>
Voor C++ programmas geldt dezelfde methode. Hieronder installeren we
<c>groff</c> die met <c>cxx</c> heel wat sneller werkt:
</p>
<pre caption="Compileren via cxx">
# <i>emerge -pv groff</i>
# <i>CXX=cxx CXXFLAGS="-host -fast" emerge groff</i>
</pre>
</body>
</section>
<section>
<title>Je ccc/cxx gecompileerde programma's optimaliseren</title>
<body><p>
Het optimaliseren van programma's voor Alpha is met <c>ccc/cxx</c> heel wat
eenvoudiger dan met <c>gcc</c>. Gelijkaardige opties worden samengegroepeerd,
zodat commandoregels korter en eenvoudiger worden. De tabel hieronder toont de
verschillende vlaggen die je kan gebruiken bij je programma's.
</p>
<table>
<tr>
<th>Vlag</th>
<th>Uitleg</th>
<th>Veiligheid</th>
</tr>
<tr>
<ti>-host</ti>
<ti>
Optimaliseert de applicatie voor het systeem waarop gecompileerd wordt door
elke mogelijke instructie die de cpu ondersteunt te gebruiken. Applicaties die
hiermee gecompileerd worden zullen niet functioneren op andere Alpha machines.
</ti>
<ti>Zeer veilig.</ti>
</tr>
<tr>
<ti>-fast</ti>
<ti>
Schakelt iets meer optimalisatievlaggen aan; dit zal de performantie van je
applicaties maximaliseren.
</ti>
<ti>Veilig.</ti>
</tr>
<tr>
<ti>-O4</ti>
<ti>
Steekt NOP instructies in de code om scheduling te verbeteren. Softwarepijplijn
verbetering via afhankelijkheidsanalyse, vectorisatie en loops op 8 en 16 bit
data (char en short). Dit zal niet altijd je code verbeteren en moet dus
vergeleken worden met -O3 en -fast.
</ti>
<ti>Normaal gezien veilig, maar verbetert niet altijd de performantie</ti>
</tr>
<tr>
<ti>-std1</ti>
<ti>
Informeert de compiler over het zeer strikt gebruik van de programmeertaal
standaard om meer agressieve optimalisaties uit te voeren die in meer vrije
programmering geen goede resultaten zou kunnen geven. Niet alle applicaties
zullen hiermee compileren en sommige zullen slecht werken indien ze toch
compileren.
</ti>
<ti>Compileert misschien niet, maar verbetert de performantie</ti>
</tr>
<tr>
<ti>-tune host</ti>
<ti>
Verbetert het gebruik van de compiler scheduling om zo goed mogelijk te werken
op de gespecifieerde architectuur; je zal nog steeds de bestanden kunnen
gebruiken op andere machines en dit zal nog steeds de performantie ten goede
komen.
</ti>
<ti>Zeer veilig.</ti>
</tr>
</table>

<note>
<c>ccc</c> ondersteunt de meeste <c>gcc</c> compilervlaggen dus indien je 
programma's <path>Makefile</path> enkele gcc-opties specifieert moet je niet
paniekeren, <c>ccc</c> zal ze waarschijnlijk verstaan. 
</note>
<note>
Indien je de "doc" USE-vlag instelt in je <path>make.conf</path> zullen de
compilers hun documentatie installeren in <path>/usr/share/doc</path>. Je kan
deze lezen voor meer informatie. Er zijn ook zeer goede manpages beschikbaar.
</note>
</body>
</section>
</chapter>
<chapter>
<title>Extra informatie over de Compaq Compilers</title>
<section>
<title>Applicaties die van CCC/CXX genieten</title>
<body><p>
De compaq compilers zijn zeer goed bij het optimaliseren van intensieve
vlottende komma berekeningen. Ze zijn soms ook beter dan <c>gcc</c> in gehele 
getallen berekeningen. Gedurende mijn experimenten heb ik ontdekt dat veel 
applicaties het even goed doen met <c>ccc</c> als met <c>gcc</c>, maar ik heb 
geen programma's gevonden die slechter geoptimaliseerd worden met 
<c>ccc/cxx</c>.
</p>
<p>
Je moet echter wel weten dat <c>gcc</c> heel wat actiever getest wordt en heel
wat meer extensies aanbiedt tov de standaarden waar sommige programmeurs vaak
gebruik van maken. <c>ccc</c> ondersteunt mogelijk deze extensies niet of niet
volledig. Je moet dit in rekening houden terwijl je je applicaties kiest die je
met <c>ccc</c> wil compileren.
</p>
</body>
</section>
<section>
<title>CCC benchmarken</title>

<body>
<p>
Indien je wil experimenteren met verschillende <c>ccc</c> vlaggen en deze
vergelijken met <c>gcc</c> dan moet je je applicaties benchmarken. Ik raad
hiervoor de <uri link="http://www.freebench.org/">Freebench</uri> benchmark
suite aan. Deze zal de broncode compileren en 6 verschillende tests uitvoeren
die de gehele getallen en drijvende komma operaties performatie bekijkt alsook
html-grafieken aanmaakt voor vergelijking.
</p>

<p>
Hieronder vind je enkele voorbeelden die ik voorbereid heb:
</p>
<table>
<tr>
<th>Test</th>
<th>Samenvatting</th>
</tr>
<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-ccc-vanilla.html">CCC Vanilla</uri></ti>
<ti>CCC resultaten met default vlaggen</ti>
</tr>
<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-gcc-vanilla.html">GCC Vanilla</uri></ti>
<ti>GCC resultaten met default vlaggen</ti>
</tr>
<tr>
<ti></ti><ti></ti>
</tr>
<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-ccc-normal.html">CCC Normal</uri></ti>
<ti>CCC resultaten met normale vlaggen</ti>
</tr>
<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-gcc-normal.html">GCC Normal</uri></ti>
<ti>GCC resultaten met normale vlaggen</ti>
</tr>
<tr>
<ti></ti><ti></ti>
</tr>

<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-ccc-best.html">CCC Best</uri></ti>
<ti>CCC met wat meer opties</ti>
</tr>
<tr>
<ti><uri link="http://dev.gentoo.org/~taviso/results-gcc-best.html">GCC Best</uri></ti>
<ti>GCC met wat meer opties</ti>
</tr>
</table>
<note>
Hoger is beter.
</note>
<note>
Een pagina met alle resultaten op vind je <uri
link="http://dev.gentoo.org/~taviso/results.html">hier</uri>.
</note>
</body>
</section>
<section>
<title>Geavanceerde performantie features</title>
<body>
<p>
Indien je Alpha al iets langer dan enkele minuten gebruikt zal "unaligned
trap" je niet onbekend voorkomen; deze zijn programmeerfouten die
Alpha-gebruikers gemakkelijk merken en die applicaties opmerkelijk trager maken
aangezien de kernel de fouten herstelt.
</p>
<p>
Dergelijke foutmeldingen zijn niet gevaarlijk; je programma's zullen blijven
werken. Je kernel kan ze echter niet in realtime verbeteren waardoor telkens de
kernel het probleem oplost, je programma trager zal lopen. Dit is in het
algemeen geen probleem, maar bij sommige programma's merk je deze vertragingen
wel.
</p>
<pre caption="Unaligned Trap berichten">
Apr 9 01:05:55 amnesiac bash(20147): unaligned trap at 0000039db4526d98: 000003
9db4662e26 28 1
Apr 9 01:05:55 amnesiac bash(20147): unaligned trap at 0000039db4526d9c: 000003
9db4662e2a 28 3
Apr 9 01:06:03 amnesiac snort(23800): unaligned trap at 000000012003fe60: 00000
00120161a92 2c 2
Apr 9 01:06:03 amnesiac snort(23800): unaligned trap at 000000012003fe78: 00000
00120161a96 2c 2
Apr 9 01:06:03 amnesiac snort(23800): unaligned trap at 000000012003feb0: 00000
00120161a9e 2c 4
Apr 9 01:06:03 amnesiac snort(23800): unaligned trap at 000000012003feb4: 00000
00120161aa2 2c 5
</pre>
<note>
Je kan deze berichten bekijken met het <c>dmesg</c> commando.
</note>
<p>
Er zijn 2 manieren om deze fouten te verbeteren om de performantie van je tools
te optimaliseren. Indien je een programmeur bent kan je gewoon de fouten
oplossen. Dit is meestal eenvoudig, maar sommige applicaties zijn nogal
doorweven met dergelijke fouten en bevatten vaak kleine subtiliteiten. Indien
je denkt dat je het aankan stelt HP documentatie ter beschikking voor
programmeurs met uitleg hoe je de fouten kan opsporen en oplossen.
</p>
<p>
<uri>http://h21007.www2.hp.com/dspp/tech/tech_TechSingleTipDetailPage_IDX/1,2366,161,00.html</uri>
</p><p>
De tweede manier is het gebruik maken van de Compaq Compiler met de
<c>-misalign</c> vlag, welke extra controlecode zal toevoegen zodat alle code
gealigneerd wordt. Dit zal je applicaties ietswat trager maken, dus je moet
kijken of het wel de moeite waard is.
</p><p>
Draai de programma's uit via <c>time</c>. Wanneer dit programma beeindigt is
zal het tonen hoeveel tijd de kernel bezig was met systeemoproepen, inclusief
het verbeteren van slecht gealigneerde toegangen. Indien dit nummer hoog is (je
kan het vergelijken met de resultaten op andere platformen) en je krijgt veel
UAC berichten dan kan het voordelig zijn om de programma's te hercompileren met
de extra controlecode.
</p>
<pre caption="Performantie meten">
# <i>time your_application</i>
real 0m2.011s
user 0m0.004s
sys 0m2.007s
# <i>CC=ccc CFLAGS="-host -fast -misalign" emerge your_application</i>
# <i>time your_application</i>
0m0.811s
0m0.804s
0m0.007s
</pre>
<note>
Natuurlijk moet je niet je volledige applicatie compileren met
<c>-misalign</c>. Je kan de HP documentatie raadplegen om de broncodebestanden
te vinden waarin de meeste fouten zitten en je kan dan deze specifieke
bestanden met de <c>-misalign</c> vlag compileren.
</note>
<note>
Indien de UAC berichten je storen of je wil de kernel optimaliseren kan je
<path>/usr/src/linux/arch/alpha/kernel/traps.c</path> aanpassen en de
<c>printk()</c> en <c>switch</c> oproepen verwijderen.
</note>
<note>
Je kan het volgende commando gebruiken om te zien hoe vaak de kernel de fouten
heeft opgelost sinds de laatste keer dat je gereboot hebt.
</note>
<pre caption="Controle van UAC statistieken">
$ <i>grep unaligned /proc/cpuinfo</i>
kernel unaligned acc : 3 (pc=fffffc000035c7e0,va=120000f1a)
user unaligned acc : 6623 (pc=28d361e4c1c,va=28d36320f62)
</pre>
</body>
</section>
</chapter>
</guide>
