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