簡體   English   中英

在C ++中對向量進行並行操作的最快方法?

[英]Fastest Way to Parallelize Operation over a Vector in C++?

我正在嘗試並行處理C ++中大量對象的操作。 我以前用Java編寫過並行程序,但是我剛開始使用C ++。

當前代碼在向量上使用迭代器。 什么是最快的並行化方法? 我目前的想法是...

  1. 使用.size()函數並在向量中使用forloop。 但是,我擔心.size()函數的運行時,是O(N)還是O(1)? 而且forloops會比使用迭代器慢嗎?

  2. 以某種方式拆分向量,並為新向量並行創建迭代器? 如果是這樣,那么以快速的運行時間分割向量的好方法是什么?

還是有一些更快的方法來做到這一點?

但是,我擔心.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM