std :: thread :: hardware_concurrency是一个,我应该在我的系统上实现线程

时间:2016-09-25 08:22:35

标签: multithreading c++11

当我cout std::thread::hardware_concurrency时,它会给出1。

但是来自cppreference

  

返回支持的并发线程数   实现。该值应仅被视为提示。

在我的系统上实现线程是否有用,如果目标只是我的系统?

2 个答案:

答案 0 :(得分:1)

正如cppreference page所说,它的价值应该只被视为提示。请注意,只有当实际上无法计算实现中可用线程的值时,它才应返回0。 1 可能是您的应用程序的实际可用线程数。

不幸的是,找出是否值得为您的应用程序设置线程的唯一真实和好方法是实际实现线程并对您的应用程序进行基准测试。根据您的应用程序工作负载和应用程序中的线程实现,您可能会看到无变化,性能下降或性能提升。

在实施/考虑应用程序中的多线程之前,请务必考虑以下问题:

  • 您的工作量可以并行化吗?
    • 你需要很多同步锁/互斥锁/等吗?如果是,那么可能不值得。
    • 也许你可以把工作量分成GPU?考虑您的工作负载是否适合视频内存以及是否适合在GPU上进行处理。
  • 实施多线程的预计时间是否值得?
    • 确保创建一个可以代表您的用例的小型测试应用程序。
    • 如果您的应用程序运行5秒后估计在执行多线程后运行2秒,那么增值是否值得呢?

答案 1 :(得分:1)

也许你已经忘记了括号!

cout<<的std ::螺纹:: hardware_concurrency;

我的机器上的报告总是“1”,但

cout<<的std ::螺纹:: hardware_concurrency();

报告正确的核心数量。