2013-05-21 34 views
2

我正在使用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效率不高,因爲它刪除了所有元素,併爲必要的元素分配了內存,但內存已分配,所以我沒有看到這樣做的關鍵。

+2

我不相信'resize'必然會在收縮時重新分配。這就是'shrink_to_fit'函數的全部要點。 –

+0

你好,所以我應該使用'resize'函數,然後'shrink_to_fit'函數或者這兩個一起工作,這意味着只調用'resize'就足夠了?如果你願意,你可以回答,以便我可以接受,但我不知道這一點。謝謝! – ksm001

回答

1

device_vector::resize不一定會導致收縮事件發生重新分配。它可以這樣做,但是從1.8版本開始,目前的實施並沒有這樣做。

對於您的示例,您應該能夠簡單地致電resize(3)而不必擔心發生重新分配。

+0

非常感謝你! – ksm001

相關問題