[英]Fastest Way to Parallelize Operation over a Vector in C++?
我正在嘗試並行處理C ++中大量對象的操作。 我以前用Java編寫過並行程序,但是我剛開始使用C ++。
當前代碼在向量上使用迭代器。 什么是最快的並行化方法? 我目前的想法是...
使用.size()函數並在向量中使用forloop。 但是,我擔心.size()函數的運行時,是O(N)還是O(1)? 而且forloops會比使用迭代器慢嗎?
以某種方式拆分向量,並為新向量並行創建迭代器? 如果是這樣,那么以快速的運行時間分割向量的好方法是什么?
還是有一些更快的方法來做到這一點?
但是,我擔心.size()函數的運行時,是O(N)還是O(1)?
vector<...>::size()
為O(1)。
而且forloops會比使用迭代器慢嗎?
在大多數情況下,我對此表示懷疑。 在某些情況下,可以基於迭代器的值類型來優化采用迭代器的算法。 進行基准測試。
以某種方式拆分向量,並為新向量並行創建迭代器? 如果是這樣,那么以快速的運行時間分割向量的好方法是什么?
向量迭代器是隨機訪問的。 僅查找起點到終點的距離(O(1)),然后將其分成兩部分,這是非常便宜的操作。
auto begin = v.begin();
auto end = v.end();
auto mid = begin + (end - begin)/2;
algorithm(begin, mid);
algorithm(mid, end);
如果向量沒有被迭代器修改,我會將向量划分為N個部分,並為每個線程分配其向量,然后,如果需要,一個線程會匯總所有其他線程的結果。
看看增強線程。 我覺得它們很直觀
我相信這個答案是有意義的: https : //stackoverflow.com/a/2547725/1524700根據您的平台,我還將英特爾線程構建模塊添加到列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.