我正在使用device_vector
來存儲有關用戶輸入數據數組的信息。當我調用運行主算法的第二個內核時,爲了加快速度,這些信息是必需的。是否可以在不使用調整大小的情況下爲thrust :: device_vector的N個最後元素釋放內存?
第一個內核結束後,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
效率不高,因爲它刪除了所有元素,併爲必要的元素分配了內存,但內存已分配,所以我沒有看到這樣做的關鍵。
我不相信'resize'必然會在收縮時重新分配。這就是'shrink_to_fit'函數的全部要點。 –
你好,所以我應該使用'resize'函數,然後'shrink_to_fit'函數或者這兩個一起工作,這意味着只調用'resize'就足夠了?如果你願意,你可以回答,以便我可以接受,但我不知道這一點。謝謝! – ksm001