Sto usando CUDA/Thrust/CUDPP. Come ho capito, nella compattazione Stream, alcuni elementi in un array sono contrassegnati come non validi e quindi "rimossi".Compattamento CUDA Stream: comprensione del concetto
Ora che cosa significa "rimozione" significa veramente qui? Supponiamo che l'array originale A
e ha lunghezza 6. Se 2 elementi sono validi (da qualunque condizione ci possono fornire) allora
Il sistema crea una nuova array di dimensione 4 GPU memoria per memorizzare il elementi validi per ottenere il risultato finale?
OPPURE rimuove fisicamente gli elementi non validi dalla memoria e riduce l'array originale A alla dimensione 4 mantenendo solo gli elementi validi?
In entrambi i casi, ciò non significa che l'allocazione dinamica della memoria sta avvenendo sotto il cofano? Ma avevo sentito dire che l'allocazione dinamica della memoria non è possibile nel mondo CUDA.
C'è un'altra possibilità, ovvero che la dimensione dell'allocazione di memoria non cambia e che i primi 4 elementi sono validi, gli ultimi 2 non sono definiti. Ma in realtà questa domanda riguarda tutti i problemi di implementazione e chi può dire che CUDPP o spinta funzionano allo stesso modo? – talonmies
ArrayFire è un'opzione migliore/più semplice di Thrust e anche gratuita, almeno per l'utilizzo della singola GPU. http://accelereyes.com/arrayfire – arrayfire