簡體   English   中英

沒有ExecutionPolicy的std :: transform或std :: generate可以並行嗎?

[英]Can std::transform or std::generate without ExecutionPolicy be parallel?

在C ++中引入了17個並行std算法(使用ExecutionPolicy參數重載),其中定義了嚴格的執行順序,交錯和並行化規則,例如([algorithm.parallel.exec / 3]):

使用類型為execute :: sequenced_policy的執行策略對象調用的並行算法中的元素訪問函數的調用都發生在執行的調用線程中。 [注意:調用不是交錯的; 見4.6。 - 結束說明]

目前草案中的情況相同)

問題是我找不到這些算法的舊的非並行重載的任何這樣的要求。

問:這是否意味着庫實現者可以在引入執行術語線程時使用C ++ 11,使用SIMD /多線程/其他(?)實現std :: transform和std :: generate? 這有什么理由嗎?

[res.on.data.races] / 8除非另有說明,否則C ++標准庫函數應僅在當前線程內執行所有操作,如果這些操作具有對用戶可見(4.7)的效果。

這排除了觸及任何用戶定義實體的任何類型的幕后多線程。

我想,原則上,像vector<int>這樣的std::sort東西可以證明不涉及用戶定義的類,並將工作發送到多個線程。 這是相當牽強的,很難想象在實踐中這樣做的任何實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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