Handleiding tot de Compaq-Tools op Gentoo Alpha
1.
Inleiding
Licentieoverwegingen
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 dev-libs/libots en dev-libs/libcpml moet je je
aanvraag indienen als academisch of enthousiastische gebruiker.
Codevoorbeeld 1.1: 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.
|
Nota:
Indien bovenstaande niet voor jou geldt kan je een commeriele
licentie aanschaffen van HP, welke je meer flexibiliteit geeft bij het
gebruiken van de toolkit.
|
Indien je je wil kwalificeren voor een vrije licentie moet je jezelfregistreren bij HP via het online formulier op http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html. Eenmaal je aanvraag doorgevoerd is zal HP je een licentiesleutel doorzenden die je kan gebruiken om de Compaq Compilers te decrypteren en installeren.
Compaq Tools Overzicht
Indien PC-optimalisaties voor jou bekend terrein zijn heb je waarschijnlijk wel
al gehoord van icc,
Intel's optimaliserende compiler voor Pentium processors. Het equivalent voor
Alpha gebruikers zijn de
professionele Linux ontwikkelingstools, 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.
De volgende tools zijn beschikbaar voor de Gentoo Alpha Linux gebruikers:
| Tool |
Uitleg |
Portage Naam |
| libots |
Gecompileerde code ondersteuning, een afhankelijkheid nodig bij het gebruik
van de toolkit. |
dev-libs/libots |
| libcpml |
Compaq Portable Math Library, een hoogperformante mathematische bibliotheek voor Alpha gebruikers die je kan gebruiken om rekenkundige bewerkingen in applicaties te versnellen. |
dev-libs/libcpml |
| ccc |
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. |
dev-lang/ccc |
| cxx |
De Compaq C++ compiler, specifiek geoptimaliseerd voor de Alpha-architectuur, bevat dezelfde optimaliserende mogelijkheden als de Compaq C Compiler maar dan voor C++ programmeurs. |
dev-lang/cxx |
| ladebug |
Compaq's beroemde debugger voor Tru64, geport naar Alpha Linux, bevat uitgebreide ondersteuning voor applicaties gecompileerd met de Compaq C-compiler. |
dev-util/ladebug |
| libcxml |
Compaq's eXtended Math Library, een hoog performante mathematische bibliotheek voor Fortran, C en C++ programmeurs. |
dev-libs/libcxml |
Nota:
Op het moment van schrijven zijn sommige Compaq Tools enkel beschikbaar onder
~alpha. 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 ACCEPT_KEYWORDS="~alpha" meegeven voor het emerge
commando.
|
Nota:
Indien je een probleem ondervindt met ccc of cxx of enige andere
Compaq Tool, gelieve dan een bug te maken op Gentoo's Bugzilla en stel de "Assignee" in
op taviso@gentoo.org.
|
2.
De ontwikkeltools installeren
Runtime bibliotheken
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.
ftp://ftp.compaq.com/pub/products/linuxdevtools/latest/downloads.html
Download de libots en libcpml RPMs en plaats ze in
/usr/portage/distfiles.
Nota:
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
/etc/make.conf 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:
|
Codevoorbeeld 2.1: De runtime bibliotheken downloaden |
# uname -p
EV56
# mv libots-2.2.7-2.alpha.rpm cpml_ev?-5.2.0-1.alpha.rpm /usr/portage/distfiles
|
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.
Codevoorbeeld 2.2: De vereiste bibliotheken installeren |
# emerge -pv dev-libs/libots dev-libs/libcpml
# emerge dev-libs/libots dev-libs/libcpml
|
Nu dat de bibliotheken geinstalleerd staan ben je klaar om de compilers en
tools te installeren.
De compilers installeren
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.
http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html
Waarschuwing:
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.
|
Nota:
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".
|
Wanneer je licentieaanvraag aanvaard wordt zal je een e-mail verkrijgen met de
licentiesleutel. Gebruik deze in onderstaande commando's om de ccc en
cxx compilers.
Codevoorbeeld 2.3: Compaq C installeren |
# emerge -pv dev-lang/ccc
# CCC_LICENSE_KEY=0123456789 emerge dev-lang/ccc
# ebuild /var/db/pkg/dev-lang/ccc-6.5.9.001.ebuild config
|
Nota:
Herinner je eraan om 0123456789 te substitueren met de licentiesleutel.
|
Nota:
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 emerge commando. Het ebuild
commando zal de compiler op je systeem configureren zodat het de
systeembestanden en -bibliotheken kan vinden.
|
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 cxx uit te voeren op het einde om de
EULA goed te keuren.
Codevoorbeeld 2.4: Installeren van Compaq C++ |
# emerge -pv dev-lang/cxx
# CXX_LICENSE_KEY=0123456789 emerge dev-lang/cxx
# ebuild /var/db/pkg/dev-lang/cxx-6.5.9.31-r1.ebuild config
# cxx
|
Indien je de ladebug debugger wil kunnen gebruiken moet je deze nu
installeren:
Codevoorbeeld 2.5: Installeren van Ladebug, de Compaq debugger |
# emerge -pv dev-util/ladebug
# emerge dev-util/ladebug
|
Nota:
Ladebug kan gebruikt worden met zowel gcc als ccc/cxx
gecompileerde bestanden. Indien je van een Tru64 achtergrond komt zal je zeer
gemakkelijk met ladebug om kunnen gaan en zal je je waarschijnlijk beter
voelen met ladedebug dan met gdb voor algemene debugging.
|
3.
De Compaq Tools gebruiken onder Portage
C/C++ programma's compileren met Portage
Programmas via portage compileren met ccc is eenvoudig. In het volgende
voorbeeld zullen we voortonen hoe je gzip compileert, een programma
waarvan we weten dat ze zeer goede performantiewinst haalt uit ccc.
Codevoorbeeld 3.1: Compileren via ccc |
# emerge -pv gzip
# CC=ccc CFLAGS="-host -fast" emerge gzip
|
ccc heeft veel optimalisatie-mogelijkheden. Hieronder vind je een
overzicht en uitleg over de CFLAGS alsook enkele vaakgebruikte opties.
Voor C++ programmas geldt dezelfde methode. Hieronder installeren we
groff die met cxx heel wat sneller werkt:
Codevoorbeeld 3.2: Compileren via cxx |
# emerge -pv groff
# CXX=cxx CXXFLAGS="-host -fast" emerge groff
|
Je ccc/cxx gecompileerde programma's optimaliseren
Het optimaliseren van programma's voor Alpha is met ccc/cxx heel wat
eenvoudiger dan met gcc. 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.
| Vlag |
Uitleg |
Veiligheid |
| -host |
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.
|
Zeer veilig. |
| -fast |
Schakelt iets meer optimalisatievlaggen aan; dit zal de performantie van je
applicaties maximaliseren.
|
Veilig. |
| -O4 |
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.
|
Normaal gezien veilig, maar verbetert niet altijd de performantie |
| -std1 |
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.
|
Compileert misschien niet, maar verbetert de performantie |
| -tune host |
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.
|
Zeer veilig. |
Nota:
ccc ondersteunt de meeste gcc compilervlaggen dus indien je
programma's Makefile enkele gcc-opties specifieert moet je niet
paniekeren, ccc zal ze waarschijnlijk verstaan.
|
Nota:
Indien je de "doc" USE-vlag instelt in je make.conf zullen de
compilers hun documentatie installeren in /usr/share/doc. Je kan
deze lezen voor meer informatie. Er zijn ook zeer goede manpages beschikbaar.
|
4.
Extra informatie over de Compaq Compilers
Applicaties die van CCC/CXX genieten
De compaq compilers zijn zeer goed bij het optimaliseren van intensieve
vlottende komma berekeningen. Ze zijn soms ook beter dan gcc in gehele
getallen berekeningen. Gedurende mijn experimenten heb ik ontdekt dat veel
applicaties het even goed doen met ccc als met gcc, maar ik heb
geen programma's gevonden die slechter geoptimaliseerd worden met
ccc/cxx.
Je moet echter wel weten dat gcc heel wat actiever getest wordt en heel
wat meer extensies aanbiedt tov de standaarden waar sommige programmeurs vaak
gebruik van maken. ccc ondersteunt mogelijk deze extensies niet of niet
volledig. Je moet dit in rekening houden terwijl je je applicaties kiest die je
met ccc wil compileren.
CCC benchmarken
Indien je wil experimenteren met verschillende ccc vlaggen en deze
vergelijken met gcc dan moet je je applicaties benchmarken. Ik raad
hiervoor de Freebench 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.
Hieronder vind je enkele voorbeelden die ik voorbereid heb:
Nota:
Een pagina met alle resultaten op vind je hier.
|
Geavanceerde performantie features
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.
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.
Codevoorbeeld 4.1: 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
|
Nota:
Je kan deze berichten bekijken met het dmesg commando.
|
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.
http://h21007.www2.hp.com/dspp/tech/tech_TechSingleTipDetailPage_IDX/1,2366,161,00.html
De tweede manier is het gebruik maken van de Compaq Compiler met de
-misalign 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.
Draai de programma's uit via time. 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.
Codevoorbeeld 4.2: Performantie meten |
# time your_application
real 0m2.011s
user 0m0.004s
sys 0m2.007s
# CC=ccc CFLAGS="-host -fast -misalign" emerge your_application
# time your_application
0m0.811s
0m0.804s
0m0.007s
|
Nota:
Natuurlijk moet je niet je volledige applicatie compileren met
-misalign. 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 -misalign vlag compileren.
|
Nota:
Indien de UAC berichten je storen of je wil de kernel optimaliseren kan je
/usr/src/linux/arch/alpha/kernel/traps.c aanpassen en de
printk() en switch oproepen verwijderen.
|
Nota:
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.
|
Codevoorbeeld 4.3: Controle van UAC statistieken |
$ grep unaligned /proc/cpuinfo
kernel unaligned acc : 3 (pc=fffffc000035c7e0,va=120000f1a)
user unaligned acc : 6623 (pc=28d361e4c1c,va=28d36320f62)
|
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|