the parallel - areadistribuzione.com

annuncio pubblicitario
THE PARALLEL
Numero 10 2012
Edizione in italiano
UNIVERSE
DEVELOPER ROCK STARs:
Shannon Cepeda
Performance a prova di futuro
per le tue applicazioni con la
in sei passi
di Shannon Cepeda e Wendy Doerner
Wendy Doerner
Intel® Cilk™ Plus
Potenzia le performance
Intel® Cilk™ Plus adesso è disponibile in open source e per GCC 4.7.
Tre parole chiave di Intel Cilk Plus offrono un semplice, ma sorprendentemente efficace,
modello per la programmazione parallela.
›› Librerie a runtime e di modelli offrono un ambiente armonizzato per realizzare applicazioni parallele
›› Ideale per sviluppatori C++ e Fortran in Linux*, Windows*, open source o GCC 4.7
Cerca Intel® Cilk™ Plus in Intel® Parallel Studio XE
©2012, Intel Corporation. Tutti i diritti riservati. Intel e il logo Intel sono marchi registrati di Intel Corporation negli U.S.A. e in altri Paesi. *Altri nomi e marchi potrebbero essere rivendicati come proprietà di terzi.
THE PARALLEL UNIVERSE
INDICE
Lettera dall'Editor
Opportunità di performance:
come sfruttarle — dai cluster ai dispositivi, di James Reinders
4
Performance a prova di futuro per le tue applicazioni con
la vettorizzazione in sei passi, di Wendy Doerner e Shannon Cepeda
6
La vettorizzazione è una forma chiave del supporto hardware al parallelismo dei dati, perché
consente di elaborare i dati in parallelo con una CPU single core. Può fornire un significativo
miglioramento delle performance e può essere combinata anche con il parallelismo dei
thread e/o dei cluster.
Calcolo parallelo tascabile; personalizzarlo con Intel® IPP
di Robert Mueller, Noah Clemons e Paul Fischer
12
L’uso di funzioni di librerie di performance in applicazioni che vengono eseguite su
componenti small form factor può essere un ottimo sistema per ottimizzare e unificare
il flusso di esecuzione dei calcoli in task ad alta intensità di dati. Questo articolo esamina
le potenzialità di Intel® Integrated Performance Primitives per il processore Intel® Atom™.
Strumenti che potenziano affidabilità e performance
delle applicazioni .NET
di levent akyil e Asaf Yaffe
20
Le capacità degli ultimi strumenti software che servono agli sviluppatori di codice .NET,
codice nativo e applicazioni “miste” (.NET e native) durante il ciclo di sviluppo.
Iscriviti per i prossimi numeri in inglese
Condividi la rivista con un amico
© 2012, Intel Corporation. Tutti i diritti riservati. Intel, il logo Intel, Atom,
Cilk, Intel Core, VTune e Xeon sono marchi registrati di Intel Corporation
negli U.S.A. e in altri Paesi. *Altri nomi e marchi potrebbero essere rivendicati
come proprietà di terzi.
The Parallel Universe è una rivista trimestrale gratuita.
Fai clic qui per iscriverti per i prossimi numeri e condividere la rivista con gli amici.
THE PARALLEL UNIVERSE
opportunità di perforMance:
Come
sfruttarle –
dai cluster
ai dispositivi
4
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Letter From
the Editor
James Reinders è chief software evangelist alla Intel Corporation.
Tra i suoi articoli e libri sul parallelismo citiamo Intel Threading Building Blocks: Outfitting C++ for Multicore Processor Parallelism, che è
stato tradotto in giapponese, cinese e coreano. Reinders viene spesso
intervistato sul tema del parallelismo.
Questo è un numero da "sviluppatore a sviluppatore"
in quanto i nostri ingegneri del software esaminano da vicino le
tecniche che permettono di migliorare le performance delle applicazioni. Queste non devono essere complesse per ottenere buoni
risultati – molti dei processi base del parallelismo possono essere
svolti in modo efficiente con l’aiuto degli strumenti Intel®.
Performance a prova di futuro per le tue applicazioni con
la vettorizzazione in sei passi descrive una forma di parallelismo,
detta vettorizzazione, che svolge alcune operazioni contemporaneamente su più blocchi di dati. I metodi di scale-forward consentono di vettorizzare il codice senza bisogno di modifiche per le
future architetture di processori e CPU.
Calcolo parallelo tascabile; personalizzalo con Intel® Integrated
Performance Primitives per il processore Intel® Atom™ applica il
parallelismo ai componenti small form-factor con alcune varianti
molto interessanti per gli sviluppatori di applicazioni per la telefonia mobile.
Strumenti che potenziano affidabilità e performance delle
applicazioni .NET descrive il valore di due strumenti di Intel
Parallel Studio XE – lo strumento di controllo degli errori Intel®
Inspector XE e lo strumento di analisi delle performance Intel®
VTune™ Amplifier XE – che servono agli sviluppatori di codice
.NET, codice nativo e applicazioni “miste” (.NET e native) durante
il ciclo di sviluppo.
Spero che apprezzerete questo numero, utilizzerete il codice,
valuterete i miglioramenti del processo di sviluppo del vostro
software, amplierete il vostro toolkit di performance e, soprattutto, otterrete un potenziamento delle prestazioni delle vostre
applicazioni.
James Reinders
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Performance a prova di futuro
per le tue applicazioni con la
in sei passi
6
di Wendy Doerner
e Shannon Cepeda,
Software Technical
Consulting Engineers, Intel
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
DEVELOPER ROCK STARs:
Shannon Cepeda
Wendy Doerner
Impara prima a ottenere significativi miglioramenti delle prestazioni
dall'elaborazione parallela dei dati all'interno di una CPU single core. Poi,
­aggiungi il parallelismo dei thread e/o dei cluster per ulteriori miglioramenti.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
The Parallel Universe ha pubblicato molti articoli
sul parallelismo che spiegavano come sfruttare i processori a più core
tramite la programmazione dei thread e dei cluster. Questo articolo
descrive una forma ugualmente importante di parallelismo nota come
parallelismo vettoriale. La vettorizzazione è il parallelismo all’interno di
una CPU single core ed è una forma chiave di supporto hardware per il
parallelismo dei dati.
Con la vettorizzazione alcune operazioni possono essere eseguite
su più blocchi di dati contemporaneamente. Ciò è possibile grazie a
speciali istruzioni, dette SIMD (Single Instruction, Multiple Data). Le
istruzioni SIMD e l’hardware associato sono presenti nei processori
Intel® da oltre un decennio. Alcuni esempi di istruzioni SIMD sono Intel®
Streaming SIMD Extensions (Intel® SSE), introdotte nel 1999 e successivamente ampliate, e Intel® Advanced Vector Extensions (Intel® AVX),
introdotte l’anno scorso.
Come funziona la vettorizzazione?
Nel tipico caso scalare (non vettorizzato), ogni variabile utilizzata
viene memorizzata nel suo registro della CPU. Se viene eseguita
un’operazione con due variabili, come l’addizione, le quantità dei due
Modalità scalare
registri vengono sommate e il risultato viene memorizzato in un
registro. La versione vettorizzata di questo esempio riempie prima un
registro con le variabili da sommare; questa operazione è detta impacchettamento (packing) del registro. Per esempio, nei processori che
supportano Intel AVX, in un registro possono essere impacchettati fino
a otto elementi di dati floating point in singola precisione. Poi, utilizzando un’istruzione SIMD, questi elementi possono essere combinati
con un altro registro pieno di elementi, generando più risultati contemporaneamente. La possibilità di eseguire queste operazioni in parallelo,
anziché separatamente, può tradursi in un significativo miglioramento
delle performance del codice.
Come mostra la Figura 1, la vettorizzazione è applicata tipicamente agli elementi di un array o vettore che vengono elaborati
all’interno di cicli. Oltre all’addizione, ci sono altre istruzioni SIMD per
molte funzioni matematiche, operazioni logiche e anche operazioni su
stringhe. I set delle istruzioni SIMD sono progettati per applicazioni che
elaborano grandi quantità di dati. Le applicazioni scientifiche, ingegne­
ristiche, finanziarie, grafiche e multimediali sono ottime candidate
alla vettorizzazione.
Elaborazione delle istruzioni SIMD
a[i]
a
+
+
b[i]
b
a[i]+b [ i ]
a+b
a [ i+7 ] a [ i+6 ] a [ i+5 ]
a [ i+4 ] a [ i+3 ] a [ i+2 ]
a [ i+1 ]
a[i]
b [ i+7 ] b [ i+6 ] b [ i+5 ]
b [ i+4 ] b [ i+3 ] b [ i+2 ] b [ i+1 ]
b[i]
c[i+7]
c[i+4]
c[i]
c[i+6]
c[i+5]
c[i+3]
c[i+2]
c[i+1]
Figura 1: Un'addizione SIMD applicata agli elementi di un array
“La vettorizzazione consente di elaborare i dati in
parallelo all’interno di una CPU single core. Da sola,
può apportare un significativo miglioramento delle
performance e può essere combinata con il parallelismo dei thread e/o dei cluster ... Utilizzando uno
dei nostri metodi per vettorizzare il vostro codice,
otterrete due vantaggi: aumento immediato delle
performance e scalabilità futura del codice.”
8
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Come vettorizzare il codice?
Gli sviluppatori possono utilizzare le istruzioni SIMD nelle loro applicazioni in vari modi. Tradizionalmente, la vettorizzazione è stata realizzata manipolando direttamente le istruzioni SIMD e i registri, tramite
il linguaggio assembly o istruzioni intrinseche fornite dal compilatore. Questo metodo richiede che gli sviluppatori diventino esperti
dell’architettura SIMD e adattino manualmente il codice alle varie CPU.
Oltre a richiedere un significativo sforzo per sviluppare e mantenere il
codice, la vettorizzazione tramite il linguaggio assembly o le istruzioni
intrinseche del compilatore ha anche lo svantaggio di generare un
codice che non è portabile fra i vari compilatori. Poiché il codice deve
essere scritto per un determinato hardware SIMD, la vettorizzazione
ottenuta con questo metodo non è scalabile, nel senso che dovrà
essere reimplementata per le nuove CPU.
Fortunatamente, oggi gli sviluppatori possono scegliere fra vari
metodi di vettorizzazione che richiedono meno sforzo e generano un
codice scalabile. Le tecniche successive si basano su un compilatore
di vettorizzazione; consigliamo di utilizzare il nostro Intel® Compiler,
disponibile per C++ o Fortran. Il compilatore Intel include un vettorizzatore avanzato e molte altre opzioni, report ed estensioni a supporto
della vettorizzazione. Il nostro processo di “vettorizzazione in sei passi”
utilizza molte di queste funzionalità.
Metodi per la scalabilità futura
Quando vettorizzate il vostro codice con uno dei seguenti metodi,
esso sarà vettorizzabile senza modifiche anche per le architetture
future e per le nuove CPU. Quando compilerete il codice su queste
architetture future, il compilatore Intel (o un compilatore che supporta
completamente il metodo) farà la scelta appropriata della modalità di
vettorizzazione.
>> Utilizzare l’auto-vettorizzatore del compilatore Intel: se abilitato, l’autovettorizzatore cercherà le opportunità di vettorizzazione dei cicli senza
bisogno di modificare il vostro codice sorgente. Questo metodo può
essere sufficiente per ottenere la vettorizzazione del codice. Tuttavia,
il compilatore non vettorizzerà i cicli se non può provare che le operazioni in parallelo potranno essere eseguite in modo sicuro. Per questo
motivo, potreste vedere ulteriori vettorizzazioni se, dopo questo metodo,
­applicherete una delle seguenti tecniche.
>> Utilizzare un costrutto di alto livello fornito da Intel® Cilk™ Plus: Cilk Plus è
un insieme di estensioni dei linguaggi C e C++ (e, in un caso, del Fortran)
che supporta il parallelismo e la vettorizzazione. Attualmente Cilk Plus
è completamente supportato dal compilatore Intel ed è parzialmente
implementato in GCC. È uno standard aperto (per maggiori dettagli,
vedi cilk.com). Cilk Plus fornisce una varietà di costrutti che possono
essere applicati al vostro codice per dare al compilatore le informazioni
necessarie alla vettorizzazione. Molti di questi costrutti sono semplici da
aggiungere al codice – in quanto richiedono una semplice modifica della
notazione o l’aggiunta di un’istruzione pragma.
>> Utilizzare un costrutto di alto livello Fortran: il linguaggio Fortran include
varie funzioni di vettorizzazione, come le notazioni degli array e il ciclo
DO CONCURRENT. Dispone anche della direttiva di vettorizzazione obbligatoria di Cilk Plus (!DIR$ SIMD). Come Cilk Plus, questi costrutti sono
utilizzati per fornire informazioni al compilatore in modo che esso sappia
quando può vettorizzare.
BLOG
highlights
Equivalenza seriale
dei programmi Cilk Plus
Robert Geva, Intel
Nella comunità C++ c'è la tendenza a potenziare le capacità
­aumentando le librerie ed evitando di utilizzare le parole chiave
del linguaggio. Intel® Threading Building Blocks e Microsoft
Parallel Patterns Library* sono in linea con questa tendenza. La
domanda che nasce è quindi: perché implementare Intel® Cilk™
Plus con le estensioni del linguaggio anziché con le librerie?
Una delle risposte è che il linguaggio è implementato dai compilatori, e i compilatori possono fornire determinate garanzie.
Una di queste garanzie è l’equivalenza seriale. Ogni programma Cilk Plus che usa le tre parole chiave del parallelismo
ha un’elisione seriale ben definita. L’elisione seriale è definita
sostituendo tutti i cilk_spawn e each cilk_sync con spazi vuoti,
e tutti i cilk_for con la parola chiave for. Ovviamente, l’elisione
seriale di un programma Cilk Plus è un programma C/C++ valido.
Un programma ha un conflitto di determinatezza se due
parti logicamente parallele accedono alla stessa locazione
di memoria e almeno una di esse modifica la locazione.
Se un programma parallelo Cilk Plus non ha conflitti di
determinatezza, allora produrrà gli stessi risultati della sua
elisione seriale. Qual è il contributo del compilatore alla garanzia
dell’equivalenza seriale? Considerate la seguente illustrazione
del codice ...
Leggi la parte restante
del blog di robert:
Visita Go-Parallel.com
Sul sito troverai altri blog che trattano vari
argomenti correlati: trasformare la potenza
multicore in performance delle applicazioni.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Il processo di vettorizzazione in sei passi
della vostra applicazione
I precedenti metodi e il compilatore Intel fanno parte di un processo in
sei passi che abbiamo progettato per vettorizzazione un’applicazione.
Potete provare questo metodo su una vostra applicazione completa o
su una parte di essa. Per aiutarvi a seguire il processo abbiamo documentato i passi online nel nostro Vectorization Toolkit. Il toolkit include
anche alcuni link a risorse aggiuntive per ciascun passo. Controllate il
toolkit online al seguente indirizzo: http://software.intel.com/en-us/
articles/vectorization-toolkit/.
Passo 1.
Definite il riferimento delle performance
nella release build
Dovete avere un riferimento per le performance in modo che possiate
conoscere se le modifiche introdotte con la vettorizzazione sono efficaci. Dovete avere anche un riferimento per impostare gli obiettivi delle
performance, in modo che possiate sapere quando li avrete raggiunti.
Dovrà essere usata una release build al posto di una debug build.
Una release build conterrà tutte le ottimizzazioni nella vostra applicazione finale e potrà modificare i punti critici (hotspot) o anche il
codice eseguito. Per esempio, una release build può ottimizzare un
ciclo in un punto critico che altrimenti sarebbe un candidato per la
vettorizzazione.
Una release build è l’impostazione di default nel compilatore Intel.
Dovrete disattivare le ottimizzazioni eseguendo DEBUG build su
Windows* (o utilizzando lo switch –Zi) o utilizzando lo switch –Od su
Linux* o Mac OS* X. Se utilizzate il compilatore Intel, verificate che
state utilizzando i livelli di ottimizzazione 2 o 3 (–O2 o –O3) per abilitare l’auto-vettorizzatore.
Passo 2.
Determinate i punti critici utilizzando
Intel® VTune™ Amplifier XE
Potete utilizzare Intel® VTune™ Amplifier XE, il nostro profilatore
di performance, per trovare le funzioni che consumano più tempo
nella vostra applicazione. Vi consigliamo di utilizzare il tipo di analisi
“Hotspots”, anche se potrebbe essere utilizzata l’analisi “Lightweight
Hotspots” (profila l’intero sistema, anziché la sola applicazione).
Identificando le aree del vostro codice che richiedono la maggior
parte del tempo, potrete focalizzare i vostri sforzi di ottimizzazione
nelle aree dove i miglioramenti delle performance avranno maggiore
effetto. In generale, conviene concentrarsi soltanto sui punti critici più
importanti o sulle funzioni che richiedono almeno il 10% del tempo
totale della vostra applicazione. Prendete nota dei punti critici che
intendete esaminare per il passo successivo.
Passo 3.
Determinate i cicli candidati utilizzando
vec-report del compilatore Intel
Il report della vettorizzazione (o vec-report) del compilatore Intel
può dirvi se i cicli del vostro codice sono stati vettorizzati oppure no.
Verificate che state utilizzando i livelli di ottimizzazione 2 o 3 (–O2
o –O3) del compilatore per abilitare l’auto-vettorizzatore. Eseguite
vec-report ed esaminate l’output per i punti critici identificati nel
Figura 2: La videata dei punti critici di Intel® VTune™ Amplifier XE
.\main.cpp(30): warning : loop was vectorized.
.\scalar_dep.cpp(80): warning : loop was vectorized.
.\main.cpp(47): warning : loop was not vectorized: not inner loop.
.): warning : loop was not vectorized: nonstandard loop is not a vectorization candidate.
.): warning : loop was not vectorized: nonstandard loop is not a vectorization candidate.
.): warning : loop was not vectorized: existence of vector dependence.
.): warning : loop was not vectorized: not inner loop.
.): warning : loop was not vectorized: existence of vector dependence.
.): warning : loop was not vectorized: not inner loop.
.): warning : loop was not vectorized: existence of vector dependence.
.): warning : loop was not vectorized: not inner loop.
Figura 3: Output di vec-report del compilatore Intel®
10
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Passo 2. Se ci sono cicli nei punti critici che non sono stati vettorizzati,
controllate se essi includono calcoli matematici, elaborazioni di dati o
operazioni su stringhe in parallelo (per esempio, in un array). In caso
affermativo, questi cicli possono trarre vantaggio dalla vettorizzazione.
Prendete nota di questi cicli per il Passo 4.
Per eseguire vec-report, utilizzate l’opzione “-vec-report2” o
“/Qvec-report2”.
Notate che il compilatore Intel può essere eseguito su una sola
porzione del codice ed è compatibile con i compilatori nativi (gcc su
Linux e Mac OS X e Microsoft Visual Studio* su Windows).
risultati cambiano. Se i risultati cambiano, il ciclo ha delle dipendenze
e la vettorizzazione non è “sicura”. In questo caso, la vettorizzazione è
ancora possibile se si eliminano le dipendenze.
Modificate il vostro codice sorgente per fornire informazioni aggiuntive al compilatore oppure ottimizzate il vostro ciclo per ottenere una
vettorizzazione migliore.
A questo punto potete introdurre alcuni costrutti di alto livello
forniti da Cilk Plus o dal Fortran. Nella pagina online Vectorization
Toolkit potete trovare i link a documenti che spiegano dettaglitamente
i costrutti disponibili.
Passo 4.
Seguite i consigli del report GAP del compilatore Intel e
fate riferimento alle risorse del toolkit
Passo 6:
Ripetete!
Eseguite il report GAP (Guided Auto-Parallelization) del compilatore
Intel per vedere i suggerimenti del compilatore su come vettorizzare
i cicli individuati nel Passo 3. Valutate i consigli e, se necessario, fate
riferimento alle risorse aggiuntive del toolkit.
Eseguite il report GAP utilizzando le opzioni “guide“ o “/Qguide“ per
il compilatore Intel.
Nota: potete eseguire il compilatore Intel su specifiche parti della
vostra applicazione, se necessario.
Rivedete il processo finché non avrete raggiunto le performance desiderate o finché non ci saranno più buoni candidati nei punti critici.
for (i=0; i<n; i++) {
b = A[i];
if (A[i] > 0) {A[i] = 1 / A[i];}
if (A[i] > 1) {A[i] += b;}
}
Figura 6: Il ciclo della Figura 4, modificato per la vettorizzazione
for (i=0; i<n; i++) {
if (A[i] > 0) { b=A[i]; A[i] = 1 / A[i]; }
if (A[i] > 1) { A[i] += b;}
}
Figura 4: Esempio di ciclo non vettorizzato
scalar_dep.cpp(80): warning #30515: (VECT)
Assign a value to the variable(s) “b” at
the beginning of the body of the loop in
line 80. This will allow the loop to be
vectorized. [VERIFY] Make sure that, in the
original program, the variable(s) “b”
read in any iteration of the loop has been
defined earlier in the same iteration.
Figura 5: Consiglio del report GAP per il ciclo della Figura 4
Conclusione
La vettorizzazione consente di elaborare i dati in parallelo all’interno
di una CPU single core. Da sola, può apportare un significativo miglioramento delle performance e può essere combinata con il parallelismo
dei thread e/o dei cluster. La vettorizzazione è importante per le
performance delle attuali CPU Intel, come quelle delle famiglie dei
processori Intel® Xeon® e Intel® Core™. In futuro sarà un componente
ancora più critico per le performance di questi processori, come pure
per utilizzare l’architettura Intel® Many Integrated Core.
Utilizzando uno dei nostri metodi per vettorizzare il vostro codice,
otterrete due vantaggi: aumento immediato delle performance e
scalabilità futura del codice. Visitate il nostro Vectorization Toolkit
per avere le informazioni più aggiornate sui processi e sulle risorse che
semplificano il processo di vettorizzazione. Consultate il webinar:
Future-Proof Your Application's Performance › o
Passo 5.
Implementate i consigli del report GAP e altri suggerimenti (per esempio, usare le funzioni elementari e/o
le notazioni degli array)
Adesso che conoscete i consigli del report GAP per il vostro ciclo,
potete implementarli se possibile.
Il report potrebbe suggerire qualche modifica del codice. Accertatevi
che ogni modifica sia “sicura”, ovvero verificate che la modifica non
influisca sulla semantica o sulla sicurezza del vostro ciclo. Un modo per
accertarsi che il ciclo non ha dipendenze che possano essere compromesse consiste nel vedere se eseguendo il ciclo in ordine inverso i
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
12
THE PARALLEL UNIVERSE
Calcolo parallelo tascabile;
personalizzarlo con
Intel® Integrated Performance Primitives
per il processore Intel® Atom™
di Robert Mueller, Noah Clemons e Paul Fischer
Software Technical Consulting Engineers, Intel
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Scopri come le librerie di performance, come Intel® Integrated Performance Primitives (Intel® IPP),
­migliorano le applicazioni per componenti small form-factor, ottimizzando e unificando il flusso di
­esecuzione dei calcoli per task ad alta intensità di dati.
Come si vede nella Figura 1, l’elaborazione dei segnali e il calcolo
vettoriale avanzato sono i due campi più utilizzati nei vari tipi di sistemi
intelligenti. Spesso, viene utilizzato un processore di segnali digitali
(DSP) per aiutare il processore general purpose in questi particolari
task di calcolo. Un DSP può includere una sua interfaccia e una serie di
funzioni di libreria, ma non è particolarmente adatto a svolgere compiti
general purpose. I DSP sono progettati per eseguire rapidamente le
operazioni matematiche elementari (addizione, sottrazione, moltiplicazione e divisione). I DSP includono una serie di istruzioni di moltiplicazione e accumulo (MAC) molto veloci per effettuare le stime del calcolo
matriciale che si presentano spesso nella convoluzione, nel prodotto
scalare e in altre operazioni matematiche con più operandi. Le istruzioni MAC che includono la maggior parte del codice in un’applicazione
DSP sono equivalenti alle istruzioni Intel® SSSE3 (Intel® Supplemental
Single Instruction Multiple Data Streaming Extension 3). Come le
istruzioni MAC in un DSP, anche le istruzioni Intel® SSSE3 svolgono con
grande efficienza operazioni matematiche su vettori e array di dati.
Diversamente da un DSP, le istruzioni SIMD (Single Instruction, Multiple
Data) in un processore Intel Atom sono più facili da integrare in applicazioni che usano algoritmi matematici complessi per vettori e array, in
quanto tutti i calcoli vengono eseguiti nello stesso processore e sono
parte di un flusso logico unificato di esecuzione.
Per esempio, un algoritmo che cambia la luminosità di un’immagine
aggiungendo (o sottraendo) un valore costante a ciascun pixel deve
leggere i valori RGB nella memoria, aggiungere (o sottrarre) l’offset e
riscrivere i nuovi valori dei pixel nella memoria. Quando si usa un coprocessore DSP, i dati dell’immagine devono essere preparati per il DSP
(posti in un’area della memoria che sia accessibile al DSP), segnalati
per eseguire l’algoritmo di trasformazione e, infine, restituiti al processore general purpose. L’uso di un processore general purpose con le
L'uso di funzioni delle librerie di performance in applicazioni eseguite su componenti small form-factor – detti anche
sistemi intelligenti – basati sul processore Intel® Atom™ può essere
un’eccellente tecnica per ottimizzare e unificare il flusso di esecuzione
dei calcoli per task ad alta intensità di dati. In questo modo si minimizza
il rischio di problemi di timing del flusso di dati, detti heisenbug. Questi
problemi, difficili da riprodurre e spesso apparentemente casuali, sono
causati dal timing finemente orchetrato di componenti SoC (System
on Chip) e DSP (Digital Signal Processor) differenti che perdono la
sincronizzazione.
Le librerie di performance, come Intel® Integrated Performance Primitives
(Intel® IPP), contengono algoritmi altamente ottimizzati e codice per funzioni
comuni, incluse l’elaborazione dei segnali, l’elaborazione delle immagini,
la codifica/decodifica di audio e video, la crittografia, la compressione di
dati, speech coding e computer vision. Set avanzati di istruzioni aiutano lo
sviluppatore a sfruttare le nuove funzionalità dei processori che sono state
appositamente progettate per particolari applicazioni. Basta chiamare Intel
IPP come se fosse una scatola nera tascabile di calcolo per un componente
embedded o di bassa potenza: “in” riceve i dati e “out” produce il risultato. In
questo modo, Intel IPP può prendere il posto di molte unità di calcolo create
appositamente per svolgere determinati compiti. Intel IPP eccelle in vari
campi (Figura 1) dove viene utilizzato il processore Intel Atom per sistemi
intelligenti.
Senza librerie di performance altamente ottimizzate, gli sviluppatori
avrebbero bisogno di ottimizzare manualmente e con grande attenzione funzioni di calcolo intensivo per ottenere performance adeguate.
Questo processo di ottimizzazione è lungo e complicato, e deve essere
aggiornato per ogni nuova generazione di processori. I sistemi intelligenti spesso hanno lunghi cicli di vita e quindi occorre un grande lavoro
di manutenzione per ottimizzare manualmente le funzioni.
Aerospaziale
e difesa
Integrità dei dati
Componenti
di rete
•
•
•
•
•
•
•
•
•
•
•
•
Rendering realistico
Elaborazione di stringhe
Calcolo matriciale/vettoriale
Speech coding
Codifica audio
Compressione video
Compressione delle immagini
Computer vision
Conversione dei colori delle immagini
Elaborazione delle immagini
Elaborazione dei segnali
Crittografia
Compressione dei dati
•
•
•
•
•
•
Consumer
•
Medicale
Auto
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Figura 1: Domini delle funzioni di Intel® Integrated Performance Primitives
14
Industriale
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
•
•
•
•
•
•
•
•
•
•
THE PARALLEL UNIVERSE
ippsCopy per processori Intel® Core™ i7
Codice
dell’applicazione:
void main (void)
{ ...
ippsCopy();
...
}
ippsCopy per processori Intel® Core™ 2
ippsCopy per processori Intel® Atom™ 2
ippsCopy per processori Intel® Pentium® 4
ippsCopy per processori General IA-32
Figura 2: Dispatching automatico delle funzioni di libreria per vari processori
istruzioni SIMD semplifica questo processo di preparazione, segnalazione e restituzione dei dati. Le primitive della libreria di Intel IPP sono
ottimizzate per ciascuna architettura di istruzioni SIMD in modo che
esistano più versioni di ciascuna primitiva nella libreria.
Intel IPP può essere riutilizzato in un’ampia gamma di processori
basati sull’architettura Intel® e, grazie al dispatching automatico, il
codice di base dello sviluppatore seguirà sempre il flusso di esecuzione
ottimizzato per l’architettura in questione, senza dover modificare la
chiamata di funzione sottostante (Figura 2). Ciò è particolarmente
utile quando un sistema embedded impiega sia il processore Intel®
Core™ per l’analisi e l’aggregazione dei dati sia una serie di SoC basati
sul processore Intel® Atom™ per la raccolta e il preprocessing dei dati. In
questo scenario, lo stesso codice di base può essere utilizzato in parte
sia nei SoC del processore Intel Atom sia nel processore Intel Core nel
punto centrale di aggregazione dei dati.
Considerando i componenti SoC specializzati nella gestione del
flusso dei dati e dell’I/O, combinati con un’interfaccia utente limitata,
qualcuno potrebbe pensare che non ci siano molte opportunità di
IPP
SSSE3
SIMD
CPU
sfruttare le ottimizzazioni e/o il parallelismo con i processori Intel
Atom; non è così. C’è spazio per:
>> un’elaborazione multipla asincrona (Asynchronous Multi-Processing,
AMP) basata su architetture differenti;
>> un’elaborazione multipla sincrona (Synchronous Multi-Processing, SMP)
che sfrutta la tecnologia Intel® Hyper-Threading e la struttura dual-core
utilizzate nell’ultima generazione di processori Intel Atom per i sistemi
intelligenti di bassa potenza.
AMP ed SMP spesso coesistono nello stesso SoC. Il codice con requisiti di sicurezza in tempo reale è protetto all’interno di un suo ambiente
(gestito da uno scheduler round-robin modificato), mentre il resto del
sistema operativo (OS) e i livelli delle applicazioni sono gestiti applicando
i concetti standard dell’elaborazione SMP. I processori Intel Atom contengono due core basati sulla tecnologia Intel Hyper-Threading e possono
contenere altri due core formando un sistema quad-core. I processori
Intel Atom supportano anche il set di istruzioni SSSE3. Un’ampia gamma
di funzioni Intel IPP, che potete trovare all’indirizzo http://software.intel.
com/en-us/articles/ new-atom-support/, sono ottimizzate per sfruttare l’architettura dei processori Intel Atom e le istruzioni Intel SSSE3
(Figura 3).
Le applicazioni con throughput intensivo possono trarre vantaggi
dalla semplicità d’uso delle istruzioni vettoriali Intel SSSE3 e
dall’esecuzione parallela di più flussi di dati tramite registri vettoriali
di capacità extra per l’elaborazione delle istruzioni SIMD. Come detto
in precedenza, i moderni processori Intel Atom possono avere fino
a quattro core virtuali. Questo fatto rende interessante il threading.
Sebbene non ci sia una soluzione universale di threading che sia ottimale per tutte le applicazioni, Intel IPP è stato progettato per essere
thread-safe:
>> Le primitive della libreria possono essere chiamate contemporaneamente
da più thread all’interno della vostra applicazione;
>> Il modello di threading che scegliete può avere granularità variabile;
Figura 3: Intel® Integrated Performance Primitives è ottimizzato
per sfruttare il processore Intel® Atom™ e il set di istruzioni Intel®
Supplemental Single Instruction Multiple Data Streaming Extension 3
>> Le funzioni Intel IPP possono sfruttare direttamente i core del processore tramite OpenMP*;
>> Le funzioni Intel IPP possono essere combinate con il threading a livello
OS utilizzando i thread nativi, Intel® Cilk™ Plus o un altro membro della
famiglia Intel di modelli paralleli.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Il sistema più rapido per creare un’applicazione multithread che
usa in modo estensivo Intel IPP consiste nello sfruttare il threading
OpenMP incluso nella libreria. Non sono richieste significative modifiche del codice. Tuttavia, soltanto dal 15 al 20 percento delle funzioni
Intel IPP sono soggette a threading nella maggior parte dei casi. È
quindi preferibile considerare processi di threading di livello più alto
per ottenere i risultati ottimali. Poiché le primitive della libreria sono
thread-safe, i thread possono essere implementati direttamente
nell’applicazione e le primitive delle performance possono essere
chiamate direttamente dall’interno dei thread dell’applicazione. Questo
approccio offre un controllo migliore del threading e soddisfa le
corrette esigenze di threading dell’applicazione (Figura 4).
Quando si applica il threading al livello dell’applicazione, è consigliabile disabilitare il threading interno della libreria. In questo modo
si elimina la competizione per le risorse dei thread hardware tra i due
modelli di threading e, quindi, si evitano prenotazioni in eccesso di
thread software per i thread hardware disponibili.
1 di 2 Core
2 di 2 Core
Oltre alle performance e alla facilità di manutenzione, anche i
footprint di memoria e il consumo di potenza sono fattori importanti nello sviluppo di uno stack software per sistemi intelligenti
di bassa potenza. Le istruzioni SIMD possono avere un consumo di
energia leggermente superiore rispetto ad altre istruzioni; tuttavia,
poiché vengono eseguite in modo più efficiente – consentendo a
un’applicazione di essere completata in minor tempo – il risultato finale
è un minor consumo totale di energia per completare un compito.
Quindi, le istruzioni SIMD permettono di migliorare le performance di
workload critici con un minor consumo della batteria.
I sistemi intelligenti spesso devono operare entro limiti di memoria
prestabiliti. Quindi, l’esigenza di controllare il footprint dell'applicazione
su un’unità di memorizzazione (total binay size) o nella memoria
durante l’esecuzione può essere critica. Se un’applicazione non può
essere eseguita con le risorse disponibili, l’affidabilità dell’intero
sistema può essere a rischio.
1 di 2 Core
2 di 2 Core
Thread dell’applicazione
Thread dell’applicazione
Chiama Intel® IPP
Thread
dell’applicazione 1
Intel® IPP
esegue
il threading
Intel® IPP
Internal Thread
Thread
L’applicazione
dell’applicazione 2
esegue il threading
Funzioni
thread-safe
Intel® IPP
Internal Thread
Chiama Intel® IPP
Chiama Intel® IPP
Il controllo ritorna
all’applicazione
Chiama Intel® IPP
Chiama Intel® IPP
Thread dell’applicazione
continua
Thread dell’applicazione
continua
Thread dell’applicazione
continua
Potenza
Figura 4: Threading a livello funzione e threading a livello applicazione tramite Intel® Integrated Performance Primitives
app. ottimizzata con IPP
potenza = velocità di esecuzione del lavoro
energia consumata = potenza media * ∆ tempo
esecuzione più rapida delle app. significa
ritorno più rapido allo stato idle
con conseguente minor consumo di energia
app. non ottimizzata
Tempo
Figura 5: Effetto della libreria ottimizzata sul consumo di potenza
16
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Intel IPP offre la necessaria flessibilità ai modelli di collegamento per ottenere il corretto bilanciamento
fra portabilità e gestione dei footprint (Tabella 1).
I modelli “dinamico standard” e “dispatched statico” sono le opzioni più semplici da utilizzare per costruire
le applicazioni con Intel IPP. La libreria dinamica standard include il set completo delle ottimizzazioni del
processore e offre il vantaggio della condivisione del codice a runtime fra più applicazioni Intel IPP. Il rileva­
mento del processore a runtime e del metodo di dispatch al livello appropriato di ottimizzazione è automatico.
Dinamico
standard
Dinamico
personalizzato
Statico
dispatched
Statico
non-dispatched
Ottimizzazioni
Tutti i set SIMD
Tutti i set SIMD
Tutti i set SIMD
Un solo set SIMD
Distribuzione
Eseguibili e DLL
Intel IPP standard
Eseguibili e DLL
personalizzate
Solo eseguibili
Solo eseguibili
Libreria aggiornata
Direttamente
ridistribuita
Ricostruita e poi
ridistribuita
Applicazione ricompilata e ridistribuita
Libreria personalizzata ricostruita,
applicazione ricompilata e ridistribuita
Executable Only
Size
Piccolo
Piccolo
Grande
Medio
Total Binary Size
Grande
Medio
Medio
Piccolo
Modalità kernel
No
No
Sì
Sì
Tabella 1: Confronto dei modelli di collegamento di Intel® Integrated Performance Primitives
Codice sorgente dell’applicazione
Campioni di codice Intel IPP
Campioni di codice
di alto livello
• Codec video/audio/speech campioni
• Compressione ed elaborazione delle immagini
• Elaborazione di segnali e stringhe
• Compressione e crittografia dei dati
• Integrazione dei linguaggi Java e .NET
Sviluppo rapido
dell’applicazione
Chiamate API
API della libreria C/C++ Intel IPP
API
Cross-platform
•
•
•
•
•
•
•
Compressione dei dati
Integrità dei dati
Elaborazione dei segnali
Calcoli matriciali
Calcoli vettoriali
Elaborazione di stringhe
Speech coding
•
•
•
•
•
•
•
Crittografia
Elaborazione delle immagini
Conversione dei colori delle immagini
JPEG/JPEG2000/JPEGXR
Computer Vision
Codifica/decodifica video
Codifica/decodifica audio
Compatibilità
e riutilizzo
del codice
Collegamento
statico o dinamico
Ottimizzazioni Intel IPP
Implementazioni
ottimizzate
per il processore
• Processori
• Processori
• Processori
• Processori
• Processori
• Processori
• Processori
Intel®
Intel®
Intel®
Intel®
Intel®
Intel®
Intel®
Atom™
Core™ i7/i5/i3
Core™2 Duo e Quad
Core™ Duo e Core™ Solo
Pentium® D Dual-Core
Xeon® 64-bit Dual-Core
Pentium® M and Pentium® 4
Performance
superiori
Figura 6: Panoramica di Intel® Integrated Performance Primitives. Molti domini sono associati a un codice sorgente campione per un rapido sviluppo.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Se il numero di funzioni Intel IPP utilizzate nella vostra applicazione
è piccolo e gli oggetti della libreria standard condivisa sono troppo
grandi, utilizzare una libreria dinamica personalizzata potrebbe essere
un’alternativa.
Se si vuole ottimizzare l'applicazione in modo da ridurre al minimo
il footprint complessivo, il collegamento con una versione statica
non-dispatched della libreria potrebbe essere la soluzione appropriata.
Questo metodo fornisce un codice eseguibile che contiene soltanto
il livello di ottimizzazione richiesto per il processore target. Questo
modello assicura il footprint minimo, ma limita l’ottimizzazione a un tipo
di processore specifico e a un particolare set di istruzioni SIMD. Questo
modello di collegamento è utile quando l’obiettivo è un’applicazione
indipendente che viene eseguita su un solo tipo di processore. È anche
il modello consigliato per essere utilizzato in modalità kernel o nei
driver di unità.
L’ecosistema di sviluppo per i sistemi intelligenti embedded non è
una prerogativa esclusiva dei sistemi operativi dominanti nel mondo
dei server e dei PC da scrivania. Spesso un SoC usa un sistema operativo Linux embedded personalizzato che si basa su qualcosa di simile
a Yocto Project* (http://www.yoctoproject.org) o Wind River* Linux
(http://www.windriver.com) per l'applicazione e l’interfaccia utente,
mentre altre parti del chipset possono eseguire un sistema operativo
fail-safe, real-time (FTOS o RTOS).
Attualmente, Intel IPP è distribuito e omologato per cinque sistemi
operativi: Microsoft Windows*, Linux, Mac OS* X, QNX Neutrino* e
Wind River VxWorks*. QNX* e VxWorks* sono limitati a varianti statiche a singolo thread di Intel IPP. L’applicazione di Intel IPP a un sistema
operativo “non supportato” richiede che il sistema operativo sia
compatibile con l’ABI (Application Binary Interface) definita da uno dei
suddetti sistemi operativi e che le routine di allocazione della memoria
possano essere utilizzate tramite una libreria C standard o mappata
con un codice colla utilizzando una speciale interfaccia i_malloc.
Nativo
Cross
Sistema
Target
Host
La natura atomica (assenza di lock e semafori) dell’implementazione
delle funzioni di Intel IPP garantisce un’esecuzione sicura nell’ambiente
deterministico di un RTOS. Un esempio della convenienza di applicare la
libreria Intel IPP a un RTOS potrebbe essere TenAsys INtime* RTOS per
Windows (http://www.tenasys.com). INtime RTOS è un sistema operativo progettato per essere eseguito accanto a Windows, gestendo le
richieste real-time su una piattaforma basata su Windows. L’ABI utilizzata da INtime* RTOS è compatibile con l’ABI di Windows e adotta le
convenzioni delle chiamate di funzione compatibili con Windows. L’uso
di Intel IPP in combinazione con tale RTOS accresce il suo interesse
perché offre le performance di un’elaborazione intensiva di dati basata
su SIMD, con il determinismo tipico dei DSP.
Intel IPP soddisfa le esigenze degli sviluppatori di applicazioni native
che operano nel mondo del personal computing, come pure degli
sviluppatori di sistemi intelligenti che devono conciliare i requisiti dei
sistemi real-time con l’interazione tra il livello applicazione e lo stack
software sottostante. Se consideriamo il mondo dei middleware, dei
driver e delle interazioni dei sistemi operativi, Intel IPP può essere utilizzato anche nelle unità embedded con requisiti real-time e modelli di
esecuzione dominanti. La dipendenza limitata dalle librerie dei sistemi
operativi e il supporto a modelli flessibili di collegamento semplificano
l’inserimento di Intel IPP in ambienti cross-build embedded, sia che essi
siano specifici RTOS sia che seguano una delle configurazioni crossbuild basate sul popolare GNU*, come Poky-Linux* or MADDE*.
Sviluppare software per sistemi intelligenti e componenti small
form-factor spesso significa che lo sviluppo nativo non è un’opzione
disponibile. Intel IPP può essere facilmente integrato con un ambiante
cross-build e utilizzato con toolchain cross-build che soddisfano i
requisiti di flusso di molti di questi sistemi real-time. Intel IPP consente
ai sistemi intelligenti di sfruttare le istruzioni Intel SSSE3 e i registri
vettoriali di ampiezza maggiorata del processore Intel Atom. È anche
possibile soddisfare le esigenze di determinismo degli sviluppatori,
Host
Applicazione
Applicazioni
Angry Birds
Middleware
4.99 USD
OS/RTOS/Kernel
Driver
• Host di sviluppo
= sistema target
• Host di sviluppo
≠ sistema target • PC tradizionali
con Windows*/Linux*
• PC non standard,
piccolo schermo, …
• PC industriali,
automazione, chioschi, ecc. • IVI, smartphone, tablet,
medicali, sistemi
embedded (scatola nera) • Livelli OS/RTOS,
sviluppo di kernel,
unità hardware-near • Richiede tool di sviluppo
software specializzati
• OEM, OSV,
integratori di sistema,
sviluppatori di unità embedded
• Piattaforma con sistema
operativo e API • Tool di sviluppo standard
• Sviluppatori di app. mobile,
comunità Android*,
sviluppatori
Windows*, Linux*
app. store-centric Figura 7: Intel® Integrated Performance Primitives può essere usato in un'ampia gamma di unità di sviluppo e target
18
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
senza accrescere i rischi associati agli scambi di dati in cross-architecture di componenti SoC complessi.
Sviluppare software per componenti small form-factor significa
anche che le applicazioni con esigenze di flusso di esecuzione
deterministico devono essere interfacciate più direttamente con il
livello software del sistema e con lo scheduler del sistema operativo
(o RTOS). Gli strumenti e le librerie di sviluppo per queste applicazioni
devono essere in grado di operare con i vari livelli dello stack software,
sia che esso sia l'applicazione dell’utente finale, il driver che controlla
un particolare flusso di dati o un’interfaccia I/O. Intel IPP ha dipendenze
minime dal sistema operativo e un’ABI ben definita per operare con le
varie modalità riportate nella Figura 7. È possibile applicare funzioni
altamente ottimizzate per elaborare segnali e dati multimediali nello
stack software, sfruttando l’architettura del processore sottostante e
le sue potenzialità – tutto senza dover riprogettare le funzioni critiche
con successivi aggiornamenti della piattaforma hardware.
Come avviare
Intel® Integrated Performance Primitives
nei processori Intel® Atom™
>> Acquistate Intel IPP o scaricate una copia di prova (http://software.intel.
com/en-us/articles/intel-ipp/)
>> Esaminate i campioni di codice gratuiti di Intel IPP (http://software.
intel.com/en-us/articles/intel-integrated-performance-primitivescode-samples/) e verificate se qualcuno soddisfa le esigenze di uno dei
vostri algoritmi (implementato o progettato). I campioni di codice di Intel
IPP sono disponibili per i sistemi operativi Windows, Linux e Mac OS*. Le
istruzioni per utilizzare i campioni si trovano nei file ReadMe nella cartella
principale di ciascun campione. Alcuni campioni includono una documentazione più dettagliata nella cartella doc, di solito nella forma di file PDF.
>> Se nessun campione di codice soddisfa le vostre esigenze, date
un'occhiata al manuale di riferimento (http://software.intel.com/sites/
products/documentation/hpc/composerxe/en-us/2011Update/
ippxe/ipp_manual_lnx/index.htm), che è organizzato prima per domini
di funzioni, inclusa l'elaborazione dei segnali, e poi per classi di funzioni
all'interno di ciascun dominio. La Figura 1 mostra le funzioni di Intel IPP
in 14 domini differenti.
>> Scegliete l'opzione di collegamento che soddisfa le vostre esigenze fra
quelle riportate nella Tabella 1; a questo punto potete iniziare. L'articolo
che si trova nella pagina http://software.intel.com/en-us/articles/
introduction-to-linking-with-intel-ipp-70-library/ descrive più approfonditamente queste opzioni. o
BLOG
highlights
Alcuni miglioramenti delle
performance utilizzando
un modello di parallelismo
­basato sui task
Shannon Cepeda, Intel
Fra i miei compiti c’è anche quello di supportare e consigliare
l’implementazione appropriata per il parallelismo scalabile
nelle applicazioni. Ci sono varie ragioni per implementare
il parallelismo, e ci sono anche molti metodi per farlo – ma
questo blog non si occupa di queste cose. Il blog tratta i
miglioramenti delle performance che si ottengono utilizzando un particolare modo di implementare il parallelismo – e
fortunatamente, questo modo è supportato da vari modelli a
disposizione degli sviluppatori.
Sto parlando del parallelismo basato sui task, che significa
che potete progettare i vostri algoritmi in funzione dei “task”
(il lavoro da fare), anziché delle specifiche dei thread e dei
core della CPU. Attualmente ci sono vari modelli di parallelismo che usano i task: Intel® Threading Building Blocks
(TBB), Intel® Cilk Plus, Microsoft* Parallel Patterns Library,
e OpenMP 3.0, per citarne alcuni. Con una libreria basata
sui task (come quelle citate) potete utilizzare funzioni precodificate, istruzioni pragma o template per aggiungere il
parallelismo alle vostre applicazioni ...
Leggi la parte restante
del blog di shannon:
Visita Go-Parallel.com
Sul sito troverai altri blog che trattano vari
argomenti correlati: trasformare la potenza
multicore in performance delle applicazioni.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
collo di bottiglia
conflitto di dati
accesso in memoria
non valido
errore di memoria
errore di threading
memory leak
20
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
conflitto di dati
accesso in memoria
non inizializzato
mismatched allocation
errore di memoria
collo di bottiglia
Strumenti che potenziano
affidabilità
e performance
delle applicazioni .NET
Adesso gli sviluppatori .NET possono potenziare le performance delle a­ pplicazioni
e migliorare la qualità e l’affidabilità del codice necessarie per il calcolo ad alte
prestazioni (HPC) e per le applicazioni aziendali.
di Levent Akyil e Asaf Yaffe, Software and Services Group, Intel Corporation
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Strumenti appositamente studiati per scoprire gli
errori nella prima fase del ciclo di sviluppo possono offrire grandi
benefici. Tali errori di solito sono molto costosi da correggere e, una
volta rilasciato un prodotto, spesso ne danneggiano la reputazione.
Quanto prima individuiamo e correggiamo gli errori difficili da scoprire,
come gli errori di threading (conflitti di dati e deadlock) e gli errori
di memoria (memory leak), tanto più facilmente potremo correggerli. Questi strumenti aiutano gli sviluppatori perché associano i
vari pro­blemi alle linee del codice sorgente, visualizzando lo stack
delle chiamate e gli eventi in funzione del tempo, offrendo così agli
sviluppatori un quadro chiaro dei punti critici del loro software. Intel®
Parallel Studio XE consente agli sviluppatori .NET di identificare gli
elementi critici delle performance, come le funzioni o le linee di codice
che consumano più t­ empo, i proble­mi di scalabilità e il tempo speso
in attesa di sincronizzazione e nelle attività di I/O. Nel fare questo,
­Parallel Studio XE identifica i potenziali colli di bottiglia della micro­
architettura causati da vari problemi, quali cache miss, predizioni errate
del branch e larghezza di banda della memoria.
In questo articolo presenteremo alcuni esempi per dimostrare come
siano preziosi due strumenti di Intel Parallel Studio XE – lo strumento di
controllo degli errori Intel® Inspector XE e lo strumento di analisi delle
performance Intel® VTune™ Amplifier XE – agli sviluppatori di codice
.NET, codice nativo e applicazioni “miste” (.NET e native) durante il ciclo
di sviluppo. Dopo aver descritto l’attuale supporto .NET in Inspector XE
e VTune™ Amplifier XE, illustreremo le caratteristiche chiave in azione
nelle applicazioni C#.
Attuale supporto .NET in
Intel® VTune™ Amplifier XE e
Intel® Inspector XE
I prodotti Inspector XE e VTune Amplifier supportano l’analisi delle
applicazioni .NET pure e anche delle applicazioni “miste” che contengono codice “managed” e “unmanaged”.
L’analizzatore dei thread di Inspector XE può identificare potenziali
deadlock e conflitti di dati nei programmi .NET, così come fa per il
codice nativo. Inspector XE monitorizza le allocazioni degli oggetti e
accede alla memoria condivisa nell’heap del garbage collector e nelle
aree statiche dei dati, contrassegnando come potenziali conflitti di dati
gli accessi non sincronizzati (con almeno un accesso in scrittura) di più
thread allo stesso membro di un oggetto o classe di dati. Inspector XE
conosce anche tutte le API da .NET 2.0 a 3.5 e, quindi, è in grado di
identificare deadlock e violazioni della gerarchia dei lock.
VTune Amplifier XE assiste gli sviluppatori nel processo di ottimizzazione delle performance delle applicazioni seriali e parallele nei
moderni processori e semplifica tale processo per gli sviluppatori .NET
in modo che possano scoprire rapidamente i colli di bottiglia per le
performance delle applicazioni .NET pure o miste. L’analisi dei punti
critici di VTune Amplifier XE mette in evidenza le funzioni e le parti
del codice sorgente in cui un’applicazione impiega la maggior parte del
tempo di esecuzione. Le analisi Concurrency e Locks & Waits visualizzano la distribuzione del lavoro fra i thread e i punti di sincronizzazione
dei thread, aiutando gli utenti a identificare i problemi di distribuzione
del lavoro e di eccessiva sincronizzazione dei thread che ostacolano
l’esecuzione parallela. VTune Amplifier XE può inoltre aiutare gli sviluppatori a scoprire i problemi di performance della microarchitettura utilizzando la PMU (Performance Monitoring Unit) della CPU per campionare
gli eventi del processore e identificare i colli di bottiglia dell’architettura
di un determinato processore Intel®.
Configurare l'analisi .NET in
VTune Amplifier XE e Inspector XE
Gli utenti possono scegliere se analizzare le parti managed (modalità
“managed”), le parti native (modalità “native”) o entrambe (modalità
“mixed”), in questo modo:
>> Modalità Native: raccoglie i dati sul codice nativo senza attribuire
i dati al codice managed.
>> Modalità Managed: raccoglie i dati soltanto sul codice managed
senza attribuire i dati al codice nativo.
>> Modalità Mixed: raccoglie e attribuisce i dati al codice managed e
al codice nativo. Utilizzate questa opzione per analizzare il codice
managed che effettua chiamate del codice nativo.
>> Modalità Auto: rileva automaticamente il tipo di codice eseguibile.
Passa alla modalità mixed quando rileva un’applicazione managed;
passa alla modalità native quando rileva un’applicazione nativa.
Figura 1: Opzioni di debugging di Microsoft Visual Studio* per
un progetto .NET
22
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Il modo in cui scegliere la modalità di analisi dipende dal modo in cui si usano i tool. Se utilizzate i tool dalla riga dei
comandi, specificate la modalità utilizzando lo switch “-mrte-mode”. Se utilizzate i tool all’interno di Microsoft Visual Studio*,
la modalità di analisi viene automaticamente scelta in base al tipo di progetto attivo: per i progetti nativi (applicazioni C e
C++), la modalità di analisi di default è “native” sia in VTune Amplifier XE sia in Inspector XE. Per i progetti .NET (applicazioni C#), la modalità di analisi di default è “managed” in VTune Amplifier XE e “mixed” in Inspector XE. Gli utenti possono
utilizzare la pagina Visual Studio Debug Properties per scegliere una modalità di analisi differente. Per abilitare la modalità
“mixed” per un progetto .NET, selezionate l’opzione “Enable unmanaged code debugging” (Figura 1). Analogamente, per
abilitare la modalità di analisi “mixed” per un progetto nativo, impostate “Debugger Type” a “Mixed” (Figura 2). Se utilizzate
l’interfaccia grafica di VTune Amplifier XE o Inspector XE, potete scegliere la modalità di analisi dalla finestra Project
Properties (Figure 3 e 4).
Figura 2:
Scelta della modalità
di analisi con Microsoft
Visual Studio* per un
progetto nativo
Figura 3:
Scelta della modalità
di analisi con Intel®
VTune™ Amplifier XE
Figura 4:
Scelta della modalità
di analisi con Intel®
Inspector XE
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
namespace VTuneAmplifierXE.Examples
{
public class POTENTIAL_MT
{
private static Thread[] threads = new Thread[Benchmarks.gThreadCount];
private static workerThread[] workerThreads = new workerThread[Benchmarks.gThreadCount];
private static object[] threadparams = new object[Benchmarks.gThreadCount];
// segnali di inizio e fine
static AutoResetEvent[] goSignals = new AutoResetEvent[Benchmarks.gThreadCount];
static AutoResetEvent[] doneEvents = new AutoResetEvent[Benchmarks.gThreadCount];
public static double potential = 0.0;
public double potentialTotal = 0.0;
public class workerThread
{
private volatile bool stopNow = false;
private ThreadParameters threadParameters;
public void RequestStop()
{
stopNow = true;
}
private void computePot_mt(int tid)
{
int start, end;
double distx, disty, distz, dist;
start = threadParameters.chunkBegin;
end = threadParameters.chunkEnd;
potential = 0.0;
for
{
for
{
}
}
}
…
(int i = start; i < end; i++)
(int j = 0; j < i - 1; j++)
distx = Math.Pow((r[0][j] - r[0][i]), 2);
disty = Math.Pow((r[1][j] - r[1][i]), 2);
distz = Math.Pow((r[2][j] - r[2][i]), 2);
dist = Math.Sqrt(distx + disty + distz);
potential += 1.0 / dist;
public void doWork(object parameter)
{
threadParameters = (ThreadParameters)parameter;
Console.WriteLine("Thread: {0} ready to start <{1} - {2}>",
threadParameters.tid,
threadParameters.chunkBegin,
threadParameters.chunkEnd);
while (!stopNow)
{
threadParameters.goSignal.WaitOne();
computePot_mt(threadParameters.tid);
threadParameters.eventDone.Set();
}
Console.WriteLine("worker thread: terminating gracefully.");
}
} // fine di workerThread
…
}// fine di POTENTIAL_MT
Figura 5
24
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Codice campione
Intel® Inspector XE in azione
Per mostrare come Inspector XE e VTune Amplifier XE supportano le
applicazioni .NET, utilizziamo un programma C# che calcola l’energia
potenziale di un sistema di particelle in funzione della distanza nello
spazio tridimensionale. Si tratta di un’applicazione che usa i thread
.NET per creare un numero di thread pari ai core disponibili. Lo scopo di
questo articolo non è descrivere i thread C# e come utilizzare i thread
con efficienza nell’ambiente .NET, ma spiegare come i tool possono
aiutare a identificare i problemi di threading e a sviluppare applicazioni
parallele scalabili ad alte performance.
Il seguente codice mostra la parte dell’applicazione che viene
eseguita da ciascun thread worker. Il metodo computePot si trova
dove si svolge l’azione. Ciascun thread usa i confini indicizzati tramite
il numero di identificazione che gli viene assegnato (tid, thread identification number). Questo aiuta a stabilire l’inizio e la fine dell’intervallo
delle particelle da utilizzare. Dopo che ciascun thread ha inizializzato
il suo spazio iterativo (valori di inizio e fine), inizia a calcolare l’energia
potenziale delle particelle.
Iniziamo eseguendo Inspector XE sul nostro codice campione. Dal
menu Tools di Visual Studio, selezioniamo “Intel Inspector XE 2011”
e poi “New Analysis” (Figura 6). Nella successiva pagina Configure
Analysis Type, selezioniamo “Locate Deadlocks and Data Races”
(Figura 7) e facciamo clic sul pulsante “Start” per avviare l’analisi
di correttezza dei thread.
L'esecuzione di Inspector XE sul nostro codice campione rivela che
c'è un conflitto di dati o data race (Figura 8).
Il pannello Problems elenca i singoli problemi. Il pannello Code
Locations mostra le posizioni del codice sorgente che sono rilevanti per
i problemi identificati. Il pannello Filters consente di filtrare i problemi in
base al livello di gravità, al tipo, al modulo e ai file sorgente.
Figura 6: Avviare una nuova analisi di Inspector XE da Visual Studio
Figura 7: Scegliere un tipo di
analisi di Inspector XE
Figura 8: Un potenziale conflitto di dati (data race) identificato da Inspector XE 2011
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Facendo doppio clic sul problema si apre la pagina Sources
(Figura 9) dove possiamo esaminare i dettagli del problema.
Questa pagina mostra due tipici thread che effettuano un accesso
non sincronizzato a una locazione di memoria condivisa, incluso uno
stack dettagliato di chiamate per ciascun thread. Utilizzando queste
informazioni, possiamo facilmente determinare che c’è un accesso non
sincronizzato al membro della classe statica “potential” – un classico
conflitto di dati. Facendo doppio clic su una qualsiasi linea sorgente
possiamo accedere direttamente al codice sorgente e correggere
l’errore.
Una soluzione banale di questo conflitto di dati consiste
nell’accertarsi che qualsiasi accesso al membro della classe “potential” sia opportunamente sincronizzato con un lock. Tuttavia, questa
soluzione introduce una regione seriale (una sezione critica) nel nostro
codice parallelo che influisce negativamente sulle performance. Una
soluzione migliore consiste nel fare in modo che ciascun thread memorizzi una copia privata di “potential” in una variabile locale del thread e,
poi, accumuli i risultati per calcolare il valore finale. Questa soluzione
riduce le dipendenze e la sincronizzazione fra i thread ed è probabile
che acceleri il codice parallelo.
Alcune parole sul controllore della memoria
L’analizzatore della memoria di Inspector XE conosce anche il codice
.NET e può essere utilizzato per trovare errori e memory leak nelle
applicazioni miste che contengono codice nativo e managed. Sebbene
l’analisi della memoria sia svolta soltanto per le porzioni native delle
applicazioni (in quanto molti degli errori rilevabili sono irrilevanti per il
codice .NET), i risultati dell’analisi mostrano tracce complete dello stack,
inclusa la catena delle chiamate .NET che ha determinato l’errore di
memoria nel codice nativo.
La combinazione delle capacità di analisi dei thread e di analisi della
memoria rende Inspector XE un potente e prezioso strumento di analisi
della correttezza di applicazioni complesse che includono nello stesso
programma codice .NET e codice nativo.
Intel® VTune™ Amplifier XE in azione
Dopo aver risolto i problemi di correttezza, iniziamo ad analizzare le
performance della nostra applicazione. La Figura 10 mostra come
avviare la Concurrency Analysis all’interno di Visual Studio*. Se
l'applicazione è analizzata in un processore della famiglia Intel® quadcore, 2a generazione, a 2.5 GHz, si ottengono i risultati illustrati nella
Figura 11.
Figura 9:
Dettagli del problema
di conflitto dei dati
Figura 10: Avviare la Concurrency Analysis di Intel® VTune™ Amplifier XE all'interno di Visual Studio
26
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Istogramma della Thread Concurrency
Questo istogramma rappresenta la ripartizione del Tempo trascorso. Visualizza la percentuale di tempo
in cui un determinato numero di thread sono eseguiti contemporaneamente. I thread sono considerati
in esecuzione quando vengono effettivamente eseguiti in una CPU o si trovano in uno stato “eseguibile”
nello scheduler del sistema operativo. In sostanza, la Thread Concurrency è una misura del numero di thread
che non sono in attesa; può essere maggiore dell’Impiego della CPU se i thread sono nello stato eseguibile
e non consumano il tempo della CPU.
target
media
Tempo trascorso
3s
0s
0
1
Idle
2
Poor
3
4
OK
Ideal
5
6+
Over
Thread eseguiti contemporaneamente
Istogramma dell’Impiego della CPU
Questo istogramma rappresenta la ripartizione del Tempo trascorso. Visualizza la percentuale di tempo in cui
un determinato numero di CPU sono in esecuzione contemporaneamente. L’impiego della CPU può essere
maggiore della Thread Concurrency se un thread sta eseguendo un codice su una CPU mentre è logicamente ...
target
media
Tempo trascorso
5s
0s
0
Idle
1
2
Poor
3
4
OK
Ideal
Thread eseguiti contemporaneamente
Figura 11: Istogrammi della Thread Concurrency e dell'Impiego della CPU
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Figura 12: Punti critici per la Thread Concurrency
Figura 11mostra che la nostra applicazione non utilizza completamente tutti i core
disponibili. La parte superiore della Figura 12 mostra i risultati più da vicino. Il metodo
workerThread::computePot_mt consuma la maggior parte del tempo della CPU e ha
una parte significativa del tempo identificata come impiego della CPU insufficiente (Poor, colore
rosso) e sufficiente (Ok, colore arancione).
Ciò indica che questo particolare metodo è un punto critico (ovvero consuma la maggior
parte del tempo della CPU) e, pur essendo eseguito da thread, non utilizza completamente i
core disponibili. Quindi, ha senso analizzare meglio il suo comportamento esaminando i singoli
thread che lo eseguono. La Figura 13 chiarisce che quattro thread, che eseguono il metodo
workerThread::computePot_mt, consumano una quantità differente di tempo della
CPU, causando uno sbilanciamento del carico e un’utilizzazione sub-ottimale dei core. Questi
problemi di sbilanciamento del carico ostacolano la scalabilità delle applicazioni su più core e
devono essere risolti.
Anche se ciascun thread esegue il ciclo for esterno lo stesso numero di volte, tuttavia il ciclo
interno viene eseguito di più dal thread che opera sull’ultimo pezzo, e di meno dal thread che
opera sul primo pezzo. Distribuendo l’offset ciclico dell’iterazione sul numero di thread si risolve
lo sbilanciamento del carico e i thread potranno utilizzare meglio i core disponibili. L’analisi della
concurrency e i risultati ottenuti non solo ci consentono di identificare i problemi di sbilanciamento del carico, ma ci aiutano pure ad accelerare l'applicazione. La seguente modifica consente
di mantenere occupati e in esecuzione tutti i thread (Figura 16).
“I problemi di sbilanciamento del carico
ostacolano la scalabilità delle applicazioni
su più core e devono essere risolti."
28
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
La quantità di
lavoro svolto è
differente!
Figura 13: Sbilanciamento del carico dei thread in funzione del tempo e tempo di esecuzione di ciascun thread nella CPU
Thread 1 (range)
Thread 2 (range)
Thread 3 (range)
Thread 4 (range)
Versione originale
0 –249
250 – 499
500 – 749
750 - 999
Dopo le modifiche
0,4,8,…,992, 996
1,5,9,..,993,997
2,6,10,…,994,998
3,7,11,…,995,999
Figura 14
Versione originale
Versione con carico bilanciato
chunkBegin = tid * (nParts / threadCount);
chunkEnd = (tid + 1) * (nParts / threadCount);
...
start = threadParameters.chunkBegin;
end = threadParameters.chunkEnd;
for (int i = start; i < end; i++)
{
for (int j = 0; j < i - 1; j++)
{
distx = Math.Pow((r[0][j] - r[0][i]), 2);
disty = Math.Pow((r[1][j] - r[1][i]), 2);
distz = Math.Pow((r[2][j] - r[2][i]), 2);
dist = Math.Sqrt(distx + disty + distz);
potential += 1.0 / dist;
}
}
for (int i = tid; i < constants.POT_NPARTS; i +=
threadParameters.threadCount)
{
for (int j = 0; j < i - 1; j++)
{
distx = Math.Pow((r[0][j] - r[0][i]), 2);
disty = Math.Pow((r[1][j] - r[1][i]), 2);
distz = Math.Pow((r[2][j] - r[2][i]), 2);
dist = Math.Sqrt(distx + disty + distz);
potential += 1.0 / dist;
}
}
Figura 15
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
La quantità di
lavoro svolto è
identica
Figura 16: Il metodo workerThread::computePot_mt è eseguito da quattro thread, che svolgono la stessa quantità di lavoro
Abbiamo finito? Non ancora. Proviamo l’analisi dell’architettura di
VTune™ Amplifier XE per verificare se il tool è in grado di identificare
altre opportunità di miglioramento delle performance. Per eseguire
questa analisi in VTune Amplifier XE, utilizziamo l’analisi General
Exploration preconfigurata per l’architettura 2nd Generation Core™.
La microarchitettura 2nd Generation Core™ è capace di raggiungere
0.25 CPI (Cycles Per Instruction) nelle situazioni ideali. Valori maggiori
di CPI per un dato workload indicano che ci sono altre opportunità
di migliorare le performance del codice. La Figura 18 mostra i risultati dell’analisi General Exploration. In questo caso, la chiamata della
funzione Math.Pow() consuma una significativa quantità di clocktick. Sostituendo Math.Pow() con una semplice moltiplicazione,
otteniamo performance molto migliori e riduciamo il valore di CPI a 1.5.
Figura 17: Esecuzione di Intel® VTune™ Amplifier XE General
30
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Figura 18: General Exploration mette in evidenza le funzioni problematiche
for (int i = tid; i < constants.POT_NPARTS; i +=
threadParameters.threadCount)
{
for (int j = 0; j < i - 1; j++)
{
distx = Math.Pow((r[0][j] - r[0][i]), 2);
disty = Math.Pow((r[1][j] - r[1][i]), 2);
distz = Math.Pow((r[2][j] - r[2][i]), 2);
dist = Math.Sqrt(distx + disty + distz);
potential += 1.0 / dist;
}
}
for (int i = tid; i < constants.POT_NPARTS; i +=
threadParameters.threadCount)
{
for (int j = 0; j < i - 1; j++)
{
distx = (r[0][j] - r[0][i]) * (r[0][j] - r[0][i]);
disty = (r[1][j] - r[1][i]) * (r[1][j] - r[1][i]);
distz = (r[2][j] - r[2][i]) * (r[2][j] - r[2][i]);
dist = Math.Sqrt(distx + disty + distz);
potential += 1.0 / dist;
}
}
Figura 19
Versione originale (sec)
Sbilanciamento del carico corretto (sec)
Math.Pow() sostituito con * (sec)
5.4
4.65
0.39
Figura 20
“Intel® Parallel Studio XE consente agli sviluppatori .NET
di identificare gli elementi critici delle performance, come
le funzioni o le linee di codice che consumano più t­ empo,
i problemi di scalabilità e il tempo speso in attesa di sincronizzazione e nelle attività di I/O. Nel fare questo,
­Parallel Studio XE identifica i potenziali colli di bottiglia
della microarchitettura causati da vari problemi, quali
cache miss, predizioni errate del branch e larghezza di
banda della memoria.”
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Metrica di ottimizzazione
delle performance
Cycles Per Instruction (CPI) è una metrica fondamentale
delle performance che indica approssimativamente per
quanto tempo viene eseguita ciascuna istruzione, in
unità di cicli. I moderni processori superscalari riescono
ad eseguire fino a quattro istruzioni per ciclo, cui
corrisponde un valore teorico di 0.25 CPI. Vari effetti
(opera­zioni SIMD, floating point o in memoria a lunga
latenza; istruzioni non-retired dovute a predizioni errate
del branch; insufficienza di istruzioni nel front-end)
Per analisi più avanzate e approfondite delle microarchitetture,
lo strumento dispone di tipi di analisi predefinite, che usano la PMU
(Performance Monitoring Unit) per campionare gli eventi del processore e identificare i problemi delle microarchitetture, quali cache miss,
cicli di stallo, predizioni errate del branch e altro ancora. I tipi di analisi
avanzate sono definiti per architetture quali Intel® Core 2™, Intel® Core™
(Nehalem o Westmere) e Intel® Core™ di II generazione (SandyBridge).
Quando si usano questi tipi di analisi predefinite, lo strumento fornisce
suggerimenti selezionando le funzioni problematiche.
Versioni .NET supportate
VTune Amplifier XE e Inspector XE supportano i meccanismi di sincronizzazione di base disponibili nelle versioni da 2.0 a 3.5 di .NET. I tool non
supportano le nuove API di sincronizzazione introdotte in .NET 4.0 e la
nuova Task Parallel Library.
tendono ad aumentare il valore osservato di CPI. Ciò
nonostante, CPI è una metrica eccellente per stimare un
potenziale miglioramento delle performance.
32
Riepilogo
Inspector XE e VTune Amplifier XE offrono preziose tecnologie agli
sviluppatori .NET. Questi tool combinano gli strumenti di controllo degli
errori e di profilatura delle performance sotto Intel Parallel Studio XE.
Aiutano a migliorare le performance delle applicazioni e ad aumentare
la qualità e l’affidabilità del codice necessarie per il calcolo ad alte
prestazioni (HPC) e per le applicazioni aziendali. Nello stesso tempo,
la suite agevola l’approvvigionamento di tutti i tool necessari per le
alte performance e semplifica il passaggio dai processori multicore ai
processori manycore del futuro. Vedi il codice sorgente › o
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
THE PARALLEL UNIVERSE
Risorse e siti Interessanti
Go Parallel
La missione di Go Parallel del Dr. Dobb è assistere gli
sviluppatori nel loro impegno di “tradurre la potenza
multicore in performance delle applicazioni”. Ricco di utili
informazioni, questo sito contiene blog, notizie, video e
storie riguardanti i sistemi multicore e altre importanti
risorse.
“What If” Experimental
Software
Che ne direste di sperimentare le implementazioni
di ricerca di Intel che sono ancora in fase di sviluppo? E
che ne direste se le vostre proposte potessero influire
sullo sviluppo di un prodotto futuro? Qui tutto ciò è
possibile. Provate gli strumenti emergenti, collaborate con
i vostri colleghi e condividete le vostre idee tramite i blog
“What if” e i forum di supporto.
Step Inside the Latest Software
Alcuni video illustrano i prodotti software più
recenti di Intel®. Potrete vedere le ultime funzionalità, quali
il controllo della memoria, il controllo dei thread, l’analisi dei
punti critici (hotspot), l’analisi dei “locks and waits” e altro
ancora.
Intel® Inspector XE
Intel® VTune™ Amplifier XE
Intel® Software Network
Propone una serie di risorse relative a vari temi di
software, che vanno dalla gestione alla programmazione
parallela, dalla virtualizzazione al calcolo visivo. Il sito
ricco di contenuti include Intel® Software Network TV,
blog popolari, video, strumenti e download.
Intel® Software
Evaluation Center
Il centro di valutazione del software Intel®
mette a disposizione, gratuitamente per 30 giorni,
le versioni di prova dei prodotti di sviluppo del software
di Intel®. Per i prodotti di calcolo ad alte performance,
potete ottenere un supporto gratuito durante il periodo
di valutazione, creando un account Intel® Premier Support
dopo aver richiesto la licenza di valutazione o tramite Intel®
Software Network Forums. Per valutare Intel® Parallel
Studio, potete accedere al supporto gratuito soltanto
attraverso Intel® Software Network Forums.
Iscriviti per i prossimi numeri in inglese
| Condividi la rivista con un amico
THE PARALLEL UNIVERSE
Avviso sulle ottimizzazioni
I compilatori Intel ® potrebbero non ottimizzare allo stesso livello le istruzioni per i microprocessori non-Intel in quelle
ottimizzazioni che non sono specifiche dei microprocessori Intel. Tali ottimizzazioni includono i set di istruzioni SSE2,
SSE3, SSSE3 e altro. Intel non garantisce la disponibilità, la funzionalità o l’efficienza di qualsiasi ottimizzazione
effettuata su microprocessori non fabbricati da Intel. Le ottimizzazioni dipendenti dai microprocessori in questo
prodotto riguardano l’utilizzo di microprocessori Intel. Alcune ottimizzazioni non specifiche della microarchitettura
Intel sono riservate ai microprocessori Intel. Consultate le guide di riferimento dei prodotti per maggiori informazioni
su specifici set di istruzioni trattati da questo avviso.
Revisione #20110804
Porta il tuo software in un nuovo mondo di opportunità. Innova le tue applicazioni
con strategie proiettate al futuro dalla telefonia mobile alla cloud computing e oltre.
Isctiviti: softwareadrenaline.intel.com
Iscriviti per i prossimi numeri in inglese
Condividi la rivista con un amico
The Parallel Universe è una rivista trimestrale gratuita.
Fai clic qui per iscriverti per i prossimi numeri e condividere la rivista con gli amici.
34
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
Go Parallel ha un nuovo look
Presentiamo il nuovo portale online per tutte le risorse parallele.
Qui troverai le ultime novità, notizie, blog, video, suggerimenti e documentazione tecnica sul parallelismo. Tra i collaboratori ci sono
sviluppatori d’avanguardia come Jeff Cogswell e John Jainschigg, e i migliori esperti di parallelismo come James Reinders, Heinz Bast
e Levent Akyil di Intel, come pure Stephen Wellman e Chris Yeich di Geeknet.
Potenzia le tue applicazioni con performance multicore
Video
Tutorials
Blogs
Building Parallel Applications with Cilk
Plus and Threading Building Blocks,
Using Intel® TBB in network
applications: Network Router emulator
Wellington and Austin:
Programming Lots of Cores
Chris Yeich, Intel
James Reinders, Intel
THE PARALLEL
Issue 7
June 2011
THE PARALLEL
UNIVERSE
Issue 8
September 2011
UNIVERSE
THE PARALLEL
Issue 9
February 2012
UNIVERSE
Intel® Cilk™ Plus:
A C/C++ Language Extension
for Parallel Programming
By Robert Geva
Parallelizing
DreamWorks
Easing the Performance Analysis
of Serial and Parallel Applications
HPC Study:
by Levent Akyil
Three Flavors of ‘for’ Loops with
Intel® Parallel Building Blocks
by Noah Clemons
DEVELOPER ROCK STAR:
Robert Geva
Biophysicists and Mathematicians Embrace
Parallelism with Intel® Parallel Advisor
by Zakhar A. Matveev
Animation* Fur Shader
By Sheng Fu
Intel® Parallel Studio XE SP1 by Michael D’Mello
The Intel® Threading Building Blocks
Flow Graph by Michael J. Voss, Ph.D.
Letter from the Editor
By James Reinders
New Analysis Tools in
Intel® Cluster Studio XE
By David Mackay, Ph.D. and Krishna Ramkumar
Evaluation Guides
Tech Documents
White Papers
Intel® Cilk™ Plus
The Parallel Universe Magazine
Optimizing VLife* Molecular
Design Suite Using
Intel® Parallel Studio XE
©2012, Intel Corporation. Tutti i diritti riservati. Intel e il logo Intel sono marchi registrati di Intel Corporation negli U.S.A. e in altri Paesi.
*Altri nomi e marchi potrebbero essere rivendicati come proprietà di terzi.
Ottieni performance
estreme
Intel® Parallel Studio XE
Dalle singole persone alle aziende con migliaia di sviluppatori che lavorano su una singola applicazione,
Intel® Parallel Studio XE 2011 estende gli strumenti di sviluppo d’avanguardia per raggiungere livelli di
performance e affidabi­lità senza precedenti.
Compilatori e librerie
avanzati
Intel® Composer XE
Analizzatore avanzato
della memoria, del threading
e della sicurezza
Intel® Inspector XE
Profilatore avanzato
delle performance
Intel® VTune™ Amplifier XE
Chiedi una versione gratuita per 30 giorni di Intel Parallel Studio XE a www.intel.com/software/products.
Per maggiori informazioni sulle scelte di ottimizzazione e performance dei prodotti software di Intel, visita http://software.intel.com/en-us/articles/optimization-notice.
© 2012, Intel Corporation. Tutti i diritti riservati. Intel, il logo Intel, Intel Core e VTune sono marchi registrati di Intel Corporation negli U.S.A. e in altri Paesi. *Altri nomi e marchi potrebbero essere rivendicati come proprietà di terzi.
Scarica