如何使用 CUDA 并行有效地从数组中删除零值。
有关零值数量的信息是预先可用的,
这应该可以简化这项任务。
重要的是数字必须保持源数组中的顺序,
当被复制到结果数组时。
Example:
该数组将例如包含以下值:
[0, 0, 19, 7, 0, 3, 5, 0, 0, 1]
附加信息是 5 个值为零。
所需的最终结果将是另一个包含以下内容的数组:
[19,7,3,5,1]
要从数组中删除一些元素,您可以使用Thrust 库的重新排序操作 https://docs.nvidia.com/cuda/thrust/index.html#reordering。给定一个谓词is_not_zero
,返回false
对于零值,以及true
对于其他人,你可以这样写操作
thrust::copy_if(in_array, in_array + size, out_array, is_not_zero);
输出数组将仅包含非零值,因为谓词指示如此。
您还可以使用带有反向谓词的“remove_if”函数,该函数返回true
对于零,以及false
为他人..
thrust::remove_if(in_array, in_array + size, is_zero);
我建议您查看 Thrust 库的压缩示例,或一般压缩概念。
https://github.com/thrust/thrust/blob/master/examples/stream_compaction.cu https://github.com/thrust/thrust/blob/master/examples/stream_compaction.cu
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)