Handleiding tot de Compaq-Tools op Gentoo Alpha

Tavis Ormandy  Gentoo Alpha Developer
Jorge Paulo  Editor
Sven Vermeulen  Translator

Upgedate op 30 September 2003
Deze vertaling wordt niet meer onderhouden

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

Controleer je CPU versie
# 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

Controleer of alles in orde lijkt:
# 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

Controleer of alles in orde blijkt:
# 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++

Controlleer of alles in orde lijkt:
# 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
Lees en keur de EULA goed
# 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:

Test Samenvatting
CCC Vanilla CCC resultaten met default vlaggen
GCC Vanilla GCC resultaten met default vlaggen
CCC Normal CCC resultaten met normale vlaggen
GCC Normal GCC resultaten met normale vlaggen
CCC Best CCC met wat meer opties
GCC Best GCC met wat meer opties

Nota: Hoger is beter.

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)