Come rimuovere valori zero da un array in parallelo

Come rimuovere valori zero da un array in parallelo

Per eliminare alcuni elementi da un array è possibile utilizzare le operazioni di riordino di Thrust Library. Dato un predicato is_not_zero , che restituisce false per valori zero e true per altri, puoi scrivere l'operazione in questo modo

thrust::copy_if(in_array, in_array + size, out_array, is_not_zero);

l'array di output includerà solo i valori diversi da zero, poiché il predicato lo indica.

Puoi anche usare la funzione "remove_if" con un predicato inverso che restituisce true per zeri e false per gli altri..

thrust::remove_if(in_array, in_array + size, is_zero);

Ti suggerisco di dare un'occhiata agli esempi di compattazione della libreria Thrust o al concetto di compattazione generale.

https://github.com/thrust/thrust/blob/master/examples/stream_compaction.cu