Librerie parallele a memoria condivisa basate su attività nel calcolo scientifico


10

Negli ultimi anni sono apparsi numerosi progetti di biblioteche / software che offrono in qualche modo un parallelismo della memoria condivisa basato sui dati per scopi generici.

L'idea principale è che invece di scrivere un codice esplicitamente thread, i programmatori implementano i loro algoritmi come attività interdipendenti che vengono quindi programmate dinamicamente da un middleware per uso generico su una macchina a memoria condivisa.

Esempi di tali librerie sono:

  • QUARK : Originariamente progettato per la libreria di algebra lineare parallela MAGMA , sembra essere stato usato anche per un metodo multipolare veloce parallelo .

  • Cilk : Originariamente un progetto basato sul MIT, ora supportato da Intel, implementato come estensioni di linguaggio / compilatore a C, utilizzato nel software di scacchi per computer Cilkchess e sperimentalmente in FFTW .

  • SMP superscalar : sviluppato presso il Centro di supercomputer di Barcellona, ​​simile a Cilk per molti aspetti, basato su #pragmaestensioni.

  • StarPU : "codelet" basati su libreria simili che possono essere compilati e pianificati su diverse architetture diverse, comprese le GPU.

  • Attività OpenMP: a partire dalla versione 3.0, OpenMP ha introdotto "attività" che possono essere programmate in modo asincrono (vedere la Sezione 2.7 delle specifiche).

  • Intel Threading Building Blocks : utilizza le classi C ++ per creare e avviare attività asincrone, vedere la Sezione 11 del Tutorial.

  • OpenCL : supporta il parallelismo basato su attività su più core.

Mentre c'è molta letteratura che descrive il funzionamento interno di queste biblioteche / estensioni di linguaggio e la loro applicazione a problemi specifici, ho trovato solo pochissimi esempi di loro che vengono utilizzati nella pratica in applicazioni di informatica scientifica.

Quindi, ecco la domanda: qualcuno conosce i codici scientifici informatici che utilizzano una di queste librerie / estensioni di linguaggio o simili per il parallelismo della memoria condivisa?


Sei alla ricerca di parallelismo basato su attività? C'è un motivo per cui hai saltato OpenCL e Intel TBB? Devo ammettere che non posso dire esattamente cosa stai cercando qui.
Aron Ahmadia,

1
@AronAhmadia: Ignoranza, principalmente ... :) Ho aggiunto TBB e OpenCL all'elenco, ma la domanda è sempre la stessa: avere questi, cioè i loro componenti basati su attività, sono stati usati in qualsiasi software significativo per scopi scientifici Computing?
Pedro,

Come ci sentiamo nel trasformare questa domanda e le sue risposte in un wiki della comunità anziché cercare di approfondirla ulteriormente?
Aron Ahmadia,

@AronAhmadia: sono un po 'preoccupato che se lascio il formato della domanda, questo degenererà rapidamente in lunghe discussioni sui vantaggi / svantaggi della programmazione basata su task e / o memoria condivisa in generale. Tuttavia, sarei a favore di cambiarlo dopo aver ottenuto qualche altra risposta.
Pedro,

Il titolo non è appropriato. Questa domanda riguarda il parallelismo delle attività, non la memoria condivisa.
Jeff,

Risposte:


8

deal.II usa i Threading Building Blocks in tutta la biblioteca e nel complesso ne siamo ragionevolmente soddisfatti. Abbiamo esaminato alcune alternative, in particolare OpenMP poiché tutti sembrano utilizzarlo per codici più semplici, ma le abbiamo trovate carenti. In particolare, OpenMP ha l'enorme svantaggio che il suo modello di attività non consente di ottenere un handle per un'attività avviata e, di conseguenza, è difficile accedere allo stato di un'attività (ad es. Attendere il completamento) o restituire i valori di funzioni eseguite su un'attività separata. OpenMP è principalmente utile per parallelizzare i loop più interni, ma si ottiene efficienza parallela parallelizzando i loop più esterni e complessi, e OpenMP non è lo strumento per quello mentre i TBB sono ragionevolmente buoni per questo.


Grazie per averlo sottolineato, non avevo considerato l'affare.II! Esiste una pubblicazione o documentazione in cui l'affare. II uso del TBB è descritto in dettaglio?
Pedro,

Nessuna pubblicazione, ma questo può essere d'aiuto: dealii.org/developer/doxygen/deal.II/group__threads.html
Wolfgang Bangerth,

4

A mio avviso, questi sistemi non hanno avuto successo a causa principalmente dei seguenti motivi.

  • L'ingenua prospettiva che il calcolo parallelo riguardi il parallelizzare il calcolo (ad esempio i flop) piuttosto che esporre la località di memoria e rimuovere i punti di sincronizzazione. Anche se alcuni problemi, come gli algoritmi a matrice densa, sono ancora limitati a FP, ciò si verifica solo dopo un'attenta considerazione del sottosistema di memoria e la maggior parte dei kernel computazionali (specialmente nel mondo PDE) sono più sensibili alla memoria. Le code di lavoro tendono a scambiare la località di memoria per un migliore bilanciamento ingenuo dei flop e più operazioni di memoria atomica (a causa della sincronizzazione attraverso la coda).
  • Affidamento alla sovra-decomposizione per un bilanciamento dinamico del carico a scapito della forte scalabilità. Le attività hanno generalmente dipendenze di dati sovrapposte (valori fantasma). Man mano che le dimensioni dell'interno si riducono, aumenta il rapporto fantasma / interno. Anche quando ciò non implica un lavoro ridondante, implica un aumento del movimento della memoria. Riduzioni significative dei requisiti di larghezza di banda della memoria possono essere ottenute con approcci come il prefetch cooperativo mediante il quale più thread condividono una cache L1 o L2 mediante il prefetching del software per i loro vicini (che mantiene implicitamente il gruppo di thread approssimativamente coerente). Questo è esattamente l'opposto della sovra-decomposizione.
  • Prestazioni imprevedibili, principalmente a causa dei problemi relativi alla memoria di cui sopra.
  • Mancanza di componenti compatibili con la libreria. Questo può quasi riassumersi come non avere un analogo di un MPI_Commche consente a diverse librerie di eseguire operazioni avanzate senza scontrarsi, oltre a passare il contesto tra le librerie e recuperare gli attributi necessari. L'astrazione fornita dal "comunicatore" è importante per la composizione della libreria indipendentemente dal fatto che venga utilizzata la memoria condivisa o distribuita.

Potrei fraintendere la tua risposta, ma il primo punto è esattamente l'opposto di ciò che Buttari, Kurzak, Dongarra e altri hanno mostrato con MAGMA, una libreria di memoria condivisa basata su attività per una densa algebra lineare ... Inoltre, nel secondo punto si fa riferimento a dati sovrapposti, ovvero valori fantasma e rapporto superficie-volume, ma questi sono un blocco dagli schemi di decomposizione del dominio di memoria distribuita. Io stesso lavoro con tali metodi per codici basati su particelle e ottengo prestazioni molto migliori rispetto alle implementazioni parallele basate su MPI.
Pedro,

La domanda, in ogni caso, era diversa ... Conosci qualche progetto di software di calcolo scientifico che utilizza questi approcci?
Pedro,

1. Esistono alcuni progetti che utilizzano questi sistemi, ma non credo che l'approccio possa essere considerato "di successo". 2. Le dipendenze si sovrappongono ancora nella memoria condivisa. Osserva il modo in cui tcmalloc o il kernel Linux rendono i thread più indipendenti per evitare colli di bottiglia come la sincronizzazione atomica. Lo spazio degli indirizzi condiviso non implica che dovresti operare come se avessi una memoria uniforme o che dovresti considerare l'atomica poco costosa.
Jed Brown,

3. Non so quale "equo confronto" intendi citare, ma il PLASMA ottiene solo circa il 25% delle FPU di picco (ad esempio la diapositiva 5 di hpcgarage.org/cscads2012/Luszczek-UTK-PowerTools.pdf ) che sarebbe decisamente sublime per la stessa operazione nella memoria distribuita dove ci si aspetterebbe almeno il 70% del picco. L'algebra lineare densa è un caso associato a FPU che ho citato specificamente come possibile eccezione, ma nonostante le enormi dimensioni della matrice, il PLASMA è ovviamente lungi dall'essere associato a FPU.
Jed Brown,

Pedro, la maggior parte della fisica ha una componente a lungo raggio, quindi le particelle sono accoppiate con un aggiornamento che è soggetto all'effetto superficie-solume sopra (PPPM, particelle di vortice, ecc.)
Matt Knepley
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.