Sto cercando di capire se un determinato problema è un buon candidato per l'utilizzo di CUDA per mettere il problema su una GPU.Le GPU sono buone per il filtro delle immagini basato sul caso?
Sto essenzialmente facendo un filtro a riquadri che cambia in base a qualche rilevamento dei bordi. Quindi ci sono fondamentalmente 8 casi che sono testati per ogni pixel, e poi il resto delle operazioni si verificano - calcoli medi tipici e così via. La presenza di queste istruzioni switch nel mio ciclo causerà il problema di essere un cattivo candidato per accedere alla GPU?
Non sono davvero sicuro di come evitare le istruzioni switch, perché questo rilevamento dei bordi deve avvenire ad ogni pixel. Suppongo che l'intera immagine possa separare la parte di rilevamento dei bordi dall'algoritmo di elaborazione e che sia possibile memorizzare un buffer corrispondente al filtro da utilizzare per ciascun pixel, ma sembra che aggiungerebbe molto pre-elaborazione all'algoritmo .
Edit: solo per dare un po 'di contesto - questo algoritmo è già stato scritto, e OpenMP è stato usato per fare un buon effetto a velocizzarlo. Tuttavia, gli 8 core della mia scatola di sviluppo sono impalliditi rispetto ai 512 della GPU.
se con "pales" si intende nei numeri grezzi, questo non è necessariamente vero, poiché molti dei commentatori in questo thread hanno spiegato che la programmazione per la GPU richiede un diverso tipo di pensiero. questo perché, anche se è un cavallo di battaglia, è adatto solo per determinati compiti. :) –
se si ha accesso a una scheda basata su Fermi da nVidia, provatelo e portate la parte del codice in cui vi sono hotspot. potresti anche voler esaminare il tuo codice se non lo hai già fatto, per vedere qual è il vero collo di bottiglia. altrimenti la soluzione migliore è riscriverla in modo che non si ramifichi. –