c++ - concurrency::parallel_sort 开销和性能影响(经验法则)?

标签 c++ visual-studio-2015 concurrency visual-studio-2017

最近我偶然发现了一个非常大的性能改进——我说的是 4 倍的改进——只需更改一行代码。我刚刚将 std::sort 调用更改为 concurrency_parallel 排序

// Get a contiguous vector copy of the pixels from the image.

std::vector<float> vals = image.copyPixels();

// New, fast way.  Takes 7 seconds on a test image.

concurrency::parallel_buffered_sort(vals.begin(), vals.end());

// Old, slow way -- takes 30 seconds on a test image
// std::sort(vals.begin(), vals.end());

这是针对大图像的,将我的处理时间从 30 秒缩短到 7 秒。然而,有些情况会涉及小图像。我不知道我是否可以或应该盲目地这样做。

我想明智地使用 parallel_sort、parallel_for 等,但我想知道在它成为帮助之前需要跨越什么阈值(根据要排序/迭代的元素数量)不是障碍。

我最终会进行一些冗长的性能测试,但目前我没有太多时间这样做。我想让它在“大多数”时间更好地工作,而不是在任何时候(或至少很少)损害性能。

在这方面有经验的人可以给我一个合理的经验法则,在“大多数”情况下对我有帮助吗?有吗?

最佳答案

RandomIterator 的要求和带有 const size_t _Chunk_size = 2048 参数的重载的存在,控制序列化的阈值,意味着库作者意识到了这个问题。因此,可能仅使用 concurrency::parallel_* 作为 std::* 的替代品就可以了。

关于c++ - concurrency::parallel_sort 开销和性能影响(经验法则)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47130420/

相关文章:

java - ConcurrentHashMap 的实际用例

c# - 从多个线程修改 Entity Framework 实体

Python 多个用户同时追加到同一个文件

c++ - 在 C++ 中声明和使用 map<string, string>

c++ - 在 Pawn 的骨架网格物体上播放动画

visual-studio - Visual Studio - 如何在挂起的更改文件中搜索?

svn - 在 Windows/Visual Studio 上使用 SVN 存储更改

c++ - 当第一个字符串在预处理器指令中定义而第二个字符串在 C++ 中为常量时,如何连接 2 个字符串?

c++ - sql::SQLString 行为

c++ - 内核模式驱动程序不会在 VS 2015 中链接