Individuazione della parallelizzazione ottimale dal grafico non orientato ponderato generale


9

Sto risolvendo un problema di "fusione" di insiemi di immagini sovrapposte. Questi insiemi possono essere rappresentati da un grafico ponderato non indirizzato come questo:

Grafico a 7 nodi

Ogni nodo rappresenta un'immagine. Le immagini sovrapposte sono collegate da un bordo. Il peso del bordo rappresenta la dimensione dell'area di sovrapposizione (la fusione di una sovrapposizione maggiore prima porta a una migliore qualità complessiva ).

L'algoritmo generalmente rimuove i bordi. Può farlo in sequenza o in parallelo. Tuttavia, quando si verifica la fusione, i nodi si uniscono e la struttura del grafico cambia. Quindi la parallelizzazione è possibile solo su componenti collegati che non si sovrappongono!

Tali componenti non sovrapposti sono DB e FEG. Possiamo eseguire l'algoritmo di fusione su questi componenti in modo sicuro in parallelo. Il risultato è il seguente grafico (i nodi uniti sono visualizzati in verde):

Grafico a 4 nodi

Ora non è possibile ulteriore parallelizzazione perché due componenti collegati si sovrappongono (hanno un bordo direttamente tra di loro).

La versione parallela dell'algoritmo sarebbe simile a questa:

1. Find connected components (no two are connected directly) and create task for each.
2. Run the tasks in parallel.
3. Update graph.
4. Until single node remains, continue with 1.

La parte difficile è il primo passo: come trovare il miglior set di componenti collegati?

Un modo sarebbe un algoritmo avido che trova semplicemente il maggior numero di componenti in una data iterazione. L'algoritmo avido massimizzerà la parallelizzazione all'inizio, ma a costo di molte iterazioni successive.

La soluzione ottimale potrebbe essere quella di portare una buona quantità di componenti collegati in ciascuna iterazione per massimizzare la parallelizzazione e minimizzare il numero di iterazioni contemporaneamente (quindi ci sono due variabili nell'ottimizzazione).

Non riesco a pensare a nessun algoritmo di ottimizzazione diverso dal backtracking, ovvero spazio di ricerca di tutte le possibili evoluzioni e scegliere quello con la massima parallelizzazione.

I pesi dei bordi possono essere ignorati, ma una versione migliorata dell'algoritmo può tenerne conto poiché le aree più grandi impiegano più tempo a fondersi (ad esempio, un'area di dimensione 200 impiegherà circa il doppio del tempo rispetto a due aree di dimensione 100). La presa in considerazione dei pesi può portare a una migliore strategia di selezione dei componenti (tempo di esecuzione complessivo più rapido dell'algoritmo).

Hai qualche indizio per tale algoritmo di ottimizzazione, che trova la migliore strategia di selezione di parti del grafico in modo che vi sia la massima parallelizzazione e il numero minimo di iterazioni?


T,S1,...,SKSioSjSio

Risposte:


1

Questo è molto simile alle sovrapposizioni della sequenza genica nell'assemblaggio del genoma. Capitolo 4 della tesi di Ananth .

In parallelo cerchi coppie promettenti e mantieni un'unione distribuita per trovare la struttura dei dati. Vedi Tarjan e Vishkin per il loro algoritmo hook e scorciatoia per comprimere i componenti collegati.

Inoltre, puoi provare i recenti metodi grafici DeBrujin su blocchi di pixel a 64 bit di righe. Penso che questo ti darà i migliori risultati. Per aiutare con problemi di quantizzazione, ridurrei prima la dimensione dei pixel a 16 o 8 bit in bianco e nero. Quindi applicare un ordinamento parallelo dei blocchi a 64 bit e quindi utilizzarli per inferire i bordi tra le immagini.

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.