我正在使用 adevice_vector
来存储有关用户输入数据数组的信息。当我调用运行主算法的第二个内核时,为了加快速度,这些信息是必要的。
在第一个内核结束后,device_vector
将只包含少量重要元素。因此,例如,如果最初的device_vector
大小为 10000,最终只有 10-20 个元素将描述用户输入数据。
我现在正在做的是,我使用该函数thrust::remove
来删除不必要的值,但是如果我理解正确,这个函数并没有真正删除不必要的值,而是将迭代器返回到最后一个必要的值。
例如假设我们有这个数组:
0 0 0 0 0 5 0 0 8 0 0 0 0 13 0 0
如果我要求remove
值为 0,它将执行以下操作:
5 8 13 0 0 0 0 0 0 0 0 0 0 0 0 0
它将返回一个end
迭代器到最后一个必要的元素,在我的例子中是 13。
但是,我想将此信息用于第二个内核,如果我理解正确,仍然会分配不必要的元素,因此我将使用我不需要的内存。
我的问题是,我可以通过让end
最后一个必要元素的迭代器,在不使用的情况下删除不必要的元素resize
吗?
resize
效率不是很高,因为它删除了所有元素,并为必要的元素分配了内存,但是内存已经分配了,所以我看不出这样做的意义。