簡體   English   中英

C++ 執行策略不適用於 std::map

[英]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 是滿足LegacyForwardIteratorLegacyBidirectionalIterator

std::map 是否有任何特殊之處阻止使用執行策略 par_unseq?

std::map 是否有任何特殊之處阻止使用執行策略 par_unseq?

您沒有被阻止使用par_unseq ,大概是實現選擇不做任何與非策略過載不同的事情。

這是一個實施質量問題,即實施是否與政策賦予它的額外自由有什么不同。

暫無
暫無

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

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