![](/img/trans.png)
[英]c++ std::accumulate with policy execution is not found
[英]C++ Execution policy not working with std::map
我已經成功地在 ubuntu 20.04 和 gcc 9 上使用了 std::execution::par_unseq 策略。但是我遇到了一個奇怪的行為,它不適用於地圖但適用於矢量
示例 1:
typedef std::map<std::string, std::vector<std::shared<Foo>>> ProblemsType;
ProblemsType values;
FillValues(values);
std::for_each(std::execution::par_unseq, values.begin(), values.end(), [](ProblemsType::value_type value) {
// Do something
}
示例 2:
typedef std::map<std::string, std::vector<std::shared<Foo>>> ProblemsType;
ProblemsType values;
FillValues(values);
std::vector<std::pair<std::string>, std::vector<std::shared<Foo>>> valuesAsVector;
FillVectorWithMapValues(valuesAsVector, values);
std::for_each(std::execution::par_unseq, valuesAsVector.begin(), valuesAsVector.end(), [](std::pair<std::string>, std::vector<std::shared<Foo>> value) {
// Do something
}
#1 不起作用,但#2 起作用。 我通過使用 htop 觀察 cpu 使用情況進行了檢查,並看到所有使用的核心(以及幾個線程)都使用了#2。 #1 只使用了一個核心。
我檢查了 std::map::iterator 是滿足LegacyForwardIterator的LegacyBidirectionalIterator 。
std::map 是否有任何特殊之處阻止使用執行策略 par_unseq?
std::map 是否有任何特殊之處阻止使用執行策略 par_unseq?
您沒有被阻止使用par_unseq
,大概是實現選擇不做任何與非策略過載不同的事情。
這是一個實施質量問題,即實施是否與政策賦予它的額外自由有什么不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.