最近我偶然发现了一个非常大的性能改进——我说的是 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/