我有一些代碼使用vector<vector<>>
來存儲計算結果。C++向量化矢量向量
通過基準測試,我發現這是防止我的代碼從矢量化,即使我正在訪問具有適當的C-stride的元素。
我試圖想出一個數據結構,它將矢量化和提高我的代碼的性能。
我在這裏讀了幾篇文章,其中有幾篇提到創建一個有兩個獨立向量的類:1個用於連續存儲數據,另一個用於存儲索引,標記新的列/行的開始原版2D vector<vector>
。實質上,它會將2D數組分解爲1D,並使用「助手」向量來進行適當的索引。
我的問題是,我也讀過這樣的矢量化,通常不會像間接索引那樣發生,例如稀疏矩陣的常見壓縮行存儲方案。
在我完成所有這些工作之前,有沒有人遇到過這個問題並解決了它?任何其他建議或資源可以幫助嗎?
你是什麼意思的「......用適當的C-stride訪問元素」?我無法想象你如何定義一個「矢量」的步幅。 –
anatolyg
@anatolyg我只是想知道同樣的。然而,我不知道什麼是C-stride將會是一般的 – user463035818
通過C-stride,我的意思是遍歷第二個索引,然後是第一個索引。所以我基本上是迭代一個內部向量的所有元素,然後再進入下一個向量。由於矢量數據在內存中是連續的,並且由於我按順序遍歷所有元素,所以我應該得到矢量化,但我不是。我添加了跨步評論,因爲我閱讀的幾篇文章有人循環錯誤,並從每個內部向量中取一個元素,這真的搞砸了他們的緩存加載。我想避免人們提供這種類型的答案,因爲它不適用於我。 – BlackBelt2025