2012-03-06 11 views
5

Ho un modello di elaborazione dati costituito da molte catene di algoritmi che elaborano blocchi di dati. Ogni catena è un grafico di algoritmi, che ho implementato con la classe di grafico TBB.Intel TBB: pool di grafici

Ora mi piacerebbe avere qualcosa come un "pool di grafici", cioè un pool di attività, ognuna contenente un tbb :: graph. In questo modo potrei eseguire le catene di algoritmi in parallelo sui blocchi di dati.

Puoi indicare un esempio TBB di qualcosa di simile a un "pool di grafici" o potresti suggerire e suggerire di implementarlo?

risposta

1

Il mio suggerimento sarebbe che tu usi tbb :: concurrent_queue o tbb :: concurrent_vector, il vantaggio è che puoi ridimensionarlo durante accessi multipli. Il mio suggerimento personale su questo, crea un oggetto lock/graph in modo tale da non modificare mai un oggetto in parallelo.

http://threadingbuildingblocks.org/wiki/index.php?title=Concurrent_Vector

Un esempio per la coda può essere trovato qui: https://sites.google.com/site/samplecodesproject/tbb/containers-3/concurrent_queue

0

Non sono sicuro Capisco perfettamente che cosa esattamente si tenta di raggiungere, ma proviamo :). Sembra che l'unica cosa di cui hai bisogno sia il source_node corretto (https://www.threadingbuildingblocks.org/docs/help/reference/flow_graph/source_node_cls.htm) per lanciare nuovi blocchi di dati nel diagramma di flusso per l'elaborazione. L'istanza del diagramma di flusso può essere trattata come l'algoritmo (come ad esempio tbb :: parallel_pipeline) scritto in modo leggermente diverso. Non dovrebbe essere trattato come la struttura dei dati come lista o vettore. Quindi molto probabilmente non hai bisogno di un pool di grafici :)