Guida ai Compaq-Tools su Gentoo Alpha

Contenuti:

1.Introduzione

Considerazioni sulle Licenze 

Prima che procediate nella lettura di questa guida, dovreste controllare la vostra capacità di utilizzare i Compaq Tools. Se dovete usare qualche cosa in più delle librerie di runtime dev-libs/libots e dev-libs/libcpml dovete qualificarvi come un utente accademico o entusiasta( academic user o enthusiast user).

Esempio 1: HP Educational and Enthusiast License

Il software può essere usato solamente per i vostri personali "entusiasti" scopi o a scopo di formazione personale e studio. 
Non può essere utilizzato per qualsiasi scopo pubblicitario, commerciale o istituzionale, sia "profit" che "non profit".  
Ogni lavoro realizzato o prodotto come risultato dell'utilizzo di questo software non può essere realizzato o prodotto per terze parti sotto pagamento, o sotto qualsiasi altro  tipo di risarcimento, retribuzione o remunerazione.

Nota: Qualora non foste qualificati e voleste comunque utilizzare il software, potete acquistare una licenza commerciale da HP, che vi darà una maggior flessibilità nell'utilizzare il toolkit.

Se siete qualificati per una licenza free, dovete registrarvi con HP utilizzando il form situato presso http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html. Una volta che la vostra richiesta è stata processata, HP vi invierà una licenza che può essere utilizzata per decriptare ed installare i compilers di Compaq.

Descrizione generale dei Compaq Tools 

Se avete familiarità con l'ottimizzazione dei PC, probabilmente avrete sentito parlare di icc, compilatore di Intel per l'ottimizzazione dei loro processori pentium . L'euivalente per gli utenti Alpha è The Linux Professional Linux Developers Tools, un insieme di librerie ad alto rendimento, compilatori e programmi di utilità specificamente configurati per la piattaforma Alpha, messo a disposizione liberamente degli utenti Alpha "entusiasti" a scopo educativo. Fare esperimenti utilizzando le librerie ed i compilatori nelle compilazioni del portage è un modo efficace per migliorare le prestazioni del vostro sistema Gentoo su Alpha .

I seguenti tools sono disponibili per gli utenti Gentoo:

Utilità Descrizione Nome nel Portage
libots Supporto per il codice compilato, una dipendenza richiesta per utilizzare il toolkit. dev-libs/libots
libcpml Compaq Portable Math Library, una libreria matematica ad alta performance per gli utenti Alpha che può essere utilizzata per migliorare la performance delle varie operazioni matematiche nelle applicazioni. dev-libs/libcpml
ccc Compilatore C di Compaq, altamente ottimizzato e configurato per la piattaforma Alpha, contiene un generatore di codice altamente ottimizzato specificatamente disegnato per l'architettura Alpha a 64-bit. E' particolarmente fornito e contiene supporto addizionale per la programmazione di sistemi, programmazione parallela e computazione matematica. dev-lang/ccc
cxx Compilatore C++ di Compaq, configurato specificatamente per la piattaforma Alpha, offre la stessa generazione di codice ottimizzato per programmatori Compaq C e C++. dev-lang/cxx
ladebug Famoso debugger di Compaq per Tru64, portato a Linux Alpha, contiene supporto esteso per le applicazioni compilate con i compilatori c e c++ di Compaq. dev-util/ladebug
libcxml Libreria matematica estesa di Compaq, libreria ad alta performance per programmazione fortran, c e c++. dev-libs/libcxml

Nota: Al momento della stesura di questo documento, alcuni dei Compaq Tools sono ancora contrassegnati come ~alpha. Questo significa che anche se sono stati testati e sembrano funzionare, non sono stati sottoposti a test più completi o estensivi e non possiamo quindi essere sicuri che essi sono completamente stabili. Se desiderate installare alcune di queste applicazioni, potreste avere bisogno di inserire il prefisso ACCEPT_KEYWORDS="~alpha " al comando emerge.

Nota: Qualora incontraste difficoltà con ccc o cxx, o con uno qualsiasi dei Compaq Tools, per favore aprite un bug nel gentoo bugzilla ed assegnatemelo -- taviso@gentoo.org

2.Installare i Developers Tools

Librerie di Runtime  

Il primo passo verso l'installazione dei Developer Tools è ottenere le librerie di runtime. A causa delle limitazioni legate alla licenza, Gentoo non può distribuire gli RPM e dovete scaricarli direttamente da Compaq.

ftp://ftp.compaq.com/pub/products/linuxdevtools/latest/downloads.html

Scaricate gli rpm di libots e libcpml, e poi salvateli nella directory dove sono situati i vostri distfiles.

Nota: Se avete un processore ev6 o superiore, dovreste scaricare l'rpm di libcpml ottimizzato per ev6 che vi permetterà di sfruttare appieno le funzionalità del vostro nuovo processore. Dovreste inoltre aggiungere "ev6" al vostro USE in /etc/make.conf, in modo che l'ebuild sappia di dover usare l'rpm ottimizzato. Qualora non conosceste quale revisione di processore sia installata sulla vostra macchina, ricorrete al comando qui sotto per identificarla

Esempio 2: Getting the Runtime Libraries

# uname -p   # check your processor revision
EV56
# mv libots-2.2.7-2.alpha.rpm cpml_ev?-5.2.0-1.alpha.rpm /usr/portage/distfiles

Ora che gli rpm sono nella directory dei vostri distfiles, il portage sarà in grado di trovarli ed installarli nel vostro sistema. Utilizzate il codice seguente per fare l'emerge delle librerie.

Esempio 3: Installing Required Libraries

# emerge -pv dev-libs/libots dev-libs/libcpml # controlla che tutto sia ok
# emerge dev-libs/libots dev-libs/libcpml

Ora le librerie sono installate nel vostro sistema e siete pronti ad installare i compilatori e le utilities.

Installare i compilatori 

Se non vi siete già registrati per ottenere una licenza "enthusiast" o "academic" con Hp, ora potrebbe essere il momento giusto per richiederla. Dovrebbero occorrere circa 24 ore affinchè la licenza venga rilasciata una volta che avete compilato il form su internet.

http://h18000.www1.hp.com/products/software/alpha-tools/ee-license.html

Attenzione: Vi verrà richiesto d'inserire dettagli personali ed indirizzo email. L'indirizzo email deve essere valido dato che vi verrà inviata via email una chiave di licenza che può essere utilizzata per sbloccare i compilatori.

Nota: Vi verrà inoltre chiesto di definire il motivo per il quale vi qualificate per una licenza free, che potrebbe essere ad esempio "Home Alpha Entusiast" o "For academic use at XYZ college."

Quando viene rilasciata la vostra licenza, la vostra email di notifica conterrà la license key. Utilizzate il comando qui di seguito per installare i compilatori ccc e cxx.

Esempio 4: Installing Compaq C

# emerge -pv dev-lang/ccc  # controlla che tutto sia ok
# CCC_LICENSE_KEY=0123456789 emerge dev-lang/ccc
# ebuild /var/db/pkg/dev-lang/ccc-6.5.9.001.ebuild config

Nota: Ricordatevi di sostituire 0123456789 con la licence key che vi è stata inviata via email.

Nota: Controllate quale versione del compilatore per C state installando prima dell'invio del comando ebuild. Emerge vi dirà il comando da mandare una volta completato il processo. Il comando ebuild configura il compilatore per il vostro sistema, facendo sì che individui correttamente files e librerie di sistema.

Se tutto è andato bene, dovreste avere ora il compilatore C di Compaq installato e potete usarlo per cominciare compilare le applicazioni dal portage o dalle vostre applicazioni. Se inoltre voleste usare i compilatori per C++, utilizzate i comandi qui sotto per installarli. Non dimenticate di fare partire "cxx" alla fine per approvare l'EULA.

Esempio 5: Installing Compaq C++

# emerge -pv dev-lang/cxx   # controlla che tutto sia ok
# CXX_LICENSE_KEY=0123456789 emerge dev-lang/cxx
# ebuild /var/db/pkg/dev-lang/cxx-6.5.9.31-r1.ebuild config
# cxx   # legge ed approva l'EULA.

Qualora voleste approfittare del debugger potenziato ladebug, dovreste installarlo ora.

Esempio 6: Installing Ladebug, the Compaq Debugger

# emerge -pv dev-util/ladebug
# emerge dev-util/ladebug

Nota: Ladebug può essere utilizzato con gli eseguibili di GCC così come con gli eseguibili di ccc/cxx. Se provenite da un ambiente Tru64, potrete aver maggior familiarità con ladebug e potreste ritenere più comodo utilizzarlo al posto di gdb per il debubbing generale.

3.Utilizzare i Compaq Tools con il Portage

Compilare programmi C/C++ con il Portage 

Compilare programmi dal portage con ccc è semplice. Nel seguente esempio mostreremo l'installazione di gzip, un'applicazione conosciuta come molto performante con ccc.

Esempio 7: Portage Compiling with ccc

# emerge -pv gzip   # controlla che tutto sia ok
# CC=ccc CFLAGS="-host -fast" emerge gzip

ccc ha molte opzioni di ottimizzazione. Eccovi qui una descrizione dei CFLAGS utilizzati qui e di alcune altre opzioni comuni utilizzate più in là nel seguente documento.

Lo stesso metodo può essere utilizzato per compilare i programmi c++. Il seguente esempio usa groff, che indicizza molto meglio quando viene compilato con cxx.

Esempio 8: Portage Compiling with cxx

# emerge -pv groff   # controlla che tutto sia ok
# CXX=cxx CXXFLAGS="-host -fast" emerge groff

Ottimizzare le vostre applicazioni compilate in ccc/cxx  

L'ottimizzazione delle applicazioni per Alpha con ccc/cxx è più semplice che con il GCC. Le opzioni simili vengono raggruppate insieme, rendendo le linee di comando più corte e più semplici. La tabella sotto dimostra alcune delle flag più comuni che potreste volere provare nei vostri programmi.

Flag Descrizione Sicurezza
-host Ottimizza l'applicazione per il sistema essendo compilata approfittando di qualsiasi set d'istruzioni disponibile e programmando specificamente per questa macchina. Le applicazioni compilate in questo modo probabilmente non funzioneranno su macchine Alpha differenti. Molto Sicuro.
-fast Attiva alcune ottimizzazioni avanzate; utilizzando questa flag verrà massimizzata la perfomance delle vostre applicazioni. Sicuro.
-O4 Inserisce NOP instructions nel vostro codice per migliorare lo scheduling. Esegue Software pipelining usando l'analisi delle dipendenze, la vettorializzazione di alcuni cicli sul dati a 8-bit ed a 16-bit (rispettivamente char e short). Usando questo flag potrebbe non sempre migliorare le prestazioni di codice e dovrebbe essere paragonato a -O3 e -fast. Solitamente sicuro, potrebbe non sempre migliorare la performance
-std1 Informa il compilatore di utilizzare l'interpretazione più rigorosa possibile degli standards, permettendo che vengano effettuate ottimizzazioni più aggressive che non potrebbero avere risultati sensibili in un'interpretazione più liberale. Non tutte le applicazioni compileranno con questo flag ed alcune, pur compilando, potrebbero non avere le performances previste. Potrebbe non compilare, ma dovrebbe aumentare le performances.
-tune host Sintonizza dettagliatamente il compilatore per la migliore performance sull'architettura specificata; utilizzare questo flag non vi impedirà di utilizzare i files binari su macchine differenti e migliorerà le prestazioni. Molto Sicuro.

Nota: CCC supporta l'interpretazione della maggior parte dei flags gcc in modo tale che nel caso il Makefile della vostra applicazione specifichi alcune opzioni gcc, niente panico, probabilmente CCC sarà in grado di comprenderle.

Nota: Se avete configurato il flag "doc" USE nel vostro make.conf, i compilatori avranno installata /usr/share/doc la documentazione completa. Potete browsare questa directory per maggiori informazioni. Ci sono inoltre eccellenti man pages.

4.Note sui compilatori Compaq

Applicazioni che beneficiano del CCC/CXX 

I compilatori compaq eccelgono realmente nell'ottimizzazione applicazioni che coinvolgono intensi calcoli matematici in virgola mobile. Possono anche sorpassare il GCC nella maggior parte delle situazioni nelle operazioni matematiche sugli integer. Durante i miei esperimenti ho trovato molte applicazioni che usano riferimenti quasi identici sia con ccc così come con GCC, ma non ho trovato alcuna applicazione che avesse performance peggiori con ccc/cxx.

Ricordate tuttavia che quel GCC ha ricevuto un testing più vasto e che fornisce molte estensioni agli standards che i programmatori possono usare. Il ccc potrebbe non supportare queste estensioni o non supportarle così completamente come il GCC. Dovreste prendere in considerazione questi aspetti quando scegliete che cosa ottimizzare con ccc.

Benchmarking CCC 

Se volete sperimentare differenti flags del ccc e confrontarli con GCC, avete bisogno di benchmark them. A questo fine, suggerisco Freebench benchmark suite. Compilerà e farà partire 6 tests differenti designati per verificare le prestazioni di integer e virgola mobile ed inoltre genererà grafici del HTML per i confronti.

Qui ci sono alcuni esempi che ho preparato:

Test Sommario
CCC Vanilla CCC risulta senza flags specificati.
GCC Vanilla GCC risulta senza flags specificati.
CCC Normal CCC risulta con alcuni flag comuni
GCC Normal GCC risulta con alcuni flag comuni.
CCC Best CCC con alcune altre opzioni specificate.
GCC Best GCC risulta con alcuni flag comuni.

Nota: E' meglio se è alto.

Nota: Un confronto su singola pagina è disponibile qui

Caratteristiche avanzate di prestazioni 

Se state usando Alpha per più di alcuni minuti, conoscete gli accessi di tipo Unaligned, errori di programmazione che interessano gli utenti Alpha e portano le applicazioni a subire dei cali di prestazione mentre il kernel li ripara.

Gli accessi di tipo "Unaligned" non sono seri; i programmi funzioneranno benissimo anche con essi. Tuttavia il kernel non può ripararli immediatamente ed ogni volta che ne corregge uno, la vostra applicazione rallenterà in fase d'esecuzione. Solitamente questo è un vero e proprio problema, ma in alcuni programmi potreste notare un rallentamento.

Esempio 9: Unaligned Trap Messages

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: Potete vedere questi messaggi sulla vostra macchina con il comando dmesg.

Ci sono due modi per correggere questi errori in modo da minimizzare il calo di prestazioni. Se siete un programmatore, potete correggere gli errori. Questo è di solito semplice, ma alcune applicazioni ne sono piene o sono molto complesse. Se pensate di poterlo fare, Hp mette a disposizione della documentazione per i programmatori sul come identificare e correggere questi bugs all'url qui sotto.

http://h21007.www2.hp.com/dspp/tech/tech_TechSingleTipDetailPage_IDX/1,2366,161,00.html

Il secondo modo consiste nell'utilizzare il compilatore di Compaq e il flag -misalign, questo aggiungerà codice di controllo addizionale per verificare che tutto il codice sia stato allineato. Ciò farà eseguire più lentamente il vostro programma, in modo che possiate sperimentare e controllare se ne vale la pena coreggere gli errori.

Se possibile eseguite l'applicazione con time. Quando il programma termina l'esecuzione dovrebbe mostrare quanto tempo ha impiegato il kernel per processare le chiamate di sistema, compresa la correzione degli accessi disallineati. Se questo numero è alto (potete confrontarlo con altre piattaforme) e state ricevendo molti messaggi UAC, potreste trarre beneficio ricompilando con il codice supplementare di controllo.

Esempio 10: Measuring the Performance of an Unaligned Access

# 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: Naturalmente non dovete compilare l'intera applicazione con il flag -misalign. Potete usare la documentazione Hp qui di seguito per identificare il file sorgente che contiene gli errori ed utilizzare il flag -misalign su quei files specificatamente.

Nota: Se i messaggi UAC vi danno fastidio o se voleste migliorare kernel inserendo del codice per ottenere le massime prestazioni, potete modificare /usr/src/linux/arch/alpha/kernel/traps.c e rimuovere printk() e switchare degli statements.

Nota: Potete utilizzare il seguente comando per controllare quante volte il kernel ha corretto questi errori dal vostro ultimo reboot.

Esempio 11: Check UAC Stats

$ grep unaligned /proc/cpuinfo
kernel unaligned acc : 3 (pc=fffffc000035c7e0,va=120000f1a)
user unaligned acc : 6623 (pc=28d361e4c1c,va=28d36320f62)


Ultimo aggiorn.:
2004-06-05
Tavis Ormandy
Sviluppo Alpha

Jorge Paulo
Redazione

Dungeon01
Traduzione

Sommario:  Questa guida è un'introduzione ai Compaq Tools free per gli utenti Gentoo Alpha.
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.