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.
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
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.
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.
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)
|
The contents of this document are licensed under the Creative Commons - Attribution / Share Alike license.