Ho una domanda di programmazione parallela generale.
Supponiamo che ci sia un grafico diretto con cicli. Supponiamo che ogni nodo abbia una piccola quantità di bordi in entrata ~ da 0 a 20 e una quantità potenzialmente abbastanza grande di bordi in uscita ~ da 0 a 500. Diciamo che ogni nodo è una funzione che ottiene tutti i bordi in entrata come parametri di input, calcola i risultati e se il risultato calcolato differisce dal risultato precedente di questa funzione, sarà necessario richiamare il ricalcolo di tutte le funzioni sui bordi in uscita.
Ho bisogno che le funzioni siano calcolate praticamente in onde dalla funzione modificata a tutto ciò che è collegato ad essa nella prima onda e quindi tutte le funzioni connesse alle funzioni della prima ondata e così via. Attualmente l'ho fatto in sequenza, con due liste: l'onda corrente con tutte le funzioni che sta calcolando ora e l'onda successiva che verrà calcolata nella prossima ondata. Tutto funziona correttamente, ma voglio farlo parallelo - per essere calcolato su tutti i core disponibili.
Il problema che sto affrontando è in realtà ogni funzione è molto semplice e quindi viene calcolata molto velocemente e quindi il tempo di calcolo è paragonabile con il tempo all'aggiunta alla prossima ondata. Di conseguenza, l'esecuzione su 4 core è più lenta di quel codice sequenziale.
Esiste un algoritmo parallelo in grado di gestire tali grafici?