Tag-Archive for » c++ «

C++ & OpenMP

Monday, May 24th, 2010 | Author:

Molto spesso a causa del mio lavoro mi trovo a dover implementare particolare algoritmi euristici sviluppati dal gruppo di ricerca con cui lavoro. Altrettanto spesso queste euristiche devono essere confrontate con la controparte esaustiva (o a forza bruta) per poter stimare quali sono i reali vantaggi nell’utilizzo dell’euristica rispetto ad un approccio a forza bruta. Fondamentalmente si è interessati a confrontare il rapporto qualità della soluzione rispetto al tempo “risparmiato” al crescere della dimensione del problema. Recentemente mi è capitato di dover lavorare su un problema la cui dimensione cresceva esponenzialmente rispetto ai dati di ingresso: come è facile immaginare la ricerca di una soluzione esaustiva diventava impraticabile (considerando i tempi necessari per poterla ricavare) anche con relativamente pochi dati iniziali. Proprio per questo ho fatto una veloce ricerca per vedere se riuscivo a trovare una libreria che mi permettesse con poco sforzo di parallelizzare l’algoritmo esaustivo in modo da poter sfruttare gli otto thread paralleli (ripartiti su 4 processori) disponibili sul mio Intel core i7 Q720.

Sono stato fortunato due volte:

  • prima fortuna: mi sono imbattuto in questa API: OpenMP (The OpenMP API specification for parallel programming);
  • seconda fortuna: viene supportata sia da MS Visual C++ (dalla versione 2005) che da GCC… anche se sotto Visual C++ non è possibile utilizzare la versione più recente (la 3.0) ma solamente la (2.0).

OpenMP mi è sembrata subito una risposta interessante al mio problema iniziale e quindi ho deciso di provarla sul campo e ne sono rimasto piacevolmente soddisfatto. Non potendo riportare qui quello su cui sto lavorando (l’articolo non è ancora uscito) vi presenterò un esempio ad hoc e vedremo come “modificarlo” (operazione necessaria utilizzando la versione 2.0 di OpenMP) e analizzeremo i miglioramenti di prestazioni ottenuti.

more…

C++ & Delegate (parte seconda)

Sunday, March 08th, 2009 | Author:

Dopo quasi un mese, (forse) riesco a finire questa seconda parte 😉 Eccoci quindi a vedere se e come è possibile implementare quello che le Boost Library offrono 🙂

Un passo indietro e poi avanti fino alla meta

La prima parte di questo post è possibile leggerla qui: C++ & Delegate (parte prima). Se per caso non l’avete ancora letta la consiglio 😛 almeno per avere una visione completa di questo post.

Come funzionano?

Per avere un idea di come funziona questa estensione è conveniente partire con un problema semplificato. La semplificazione che consideriamo è che vogliamo ottenere un classe function che possa fare da delegate a “qualsiasi” funzione che accetti due parametri di ingresso qualsiasi e un valore di ritorno (che potrebbe essere anche void).

Naturalmente per ottenere questo risultato dovremo utilizzare una classe template, con tre argomenti:

  • R, che indica il tipo di ritorno;
  • A1, che indica il tipo del primo argomento;
  • A2, che indica il tipo del secondo argomento.

more…

C++ & Delegate (parte prima)

Thursday, February 05th, 2009 | Author:

Qualche tempo fa il mio amico JP ha pubblicato sul suo blog questo post molto interessante su C++ e delegation. Naturalmente non potevo non dire la mia (e infatti compaio in alcuni miei commenti 😉 ), ma volevo approfondire maggiormente l’argomento 😛 … e cosa c’era di meglio se non vedere cosa offriva lo standard?

Devo ammettere, però, che questo post è uscito più lungo del previsto e rileggerlo per sistemarlo mi sta portando via più tempo del previsto 🙁 . Quindi (anche per non far attendere oltre chi lo stava aspettando… i.e., JP 😛 ) ho deciso di rilasciarlo in due parti. Naturalmente questa è la prima 😉 . A breve pubblicherò anche la seconda, dove verranno mostrare come alcune innovazioni dello standard prossimo venturo siano già alla portata dell’attuale C++ 😉 .

more…