Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 根据机器性能动态评估负载并创建线程_C++_Multithreading_Distributed Computing - Fatal编程技术网

C++ 根据机器性能动态评估负载并创建线程

C++ 根据机器性能动态评估负载并创建线程,c++,multithreading,distributed-computing,C++,Multithreading,Distributed Computing,嗨,我已经开始从事一个项目,在这个项目中,我使用并行计算在多台机器之间分离作业负载,例如散列和其他形式的数学计算。我在用C++ 如果您希望每个客户机都连接到服务器并等待作业,那么它将在主/从或服务器/客户机模型上运行。服务器可以接受一个作业并根据客户端的数量将其分离 1000 jobs -- > 3 clients IE: client 1 --> calculate(0 to 333) Client 2 --> calculate(334 to 666)

嗨,我已经开始从事一个项目,在这个项目中,我使用并行计算在多台机器之间分离作业负载,例如散列和其他形式的数学计算。我在用C++

如果您希望每个客户机都连接到服务器并等待作业,那么它将在主/从或服务器/客户机模型上运行。服务器可以接受一个作业并根据客户端的数量将其分离

 1000 jobs   -- > 3 clients
 IE: client 1 --> calculate(0 to 333)
     Client 2 --> calculate(334 to 666)
     Client 3 --> calculate(667 to 999)
我希望通过在每个正在运行的客户机上创建多个线程来进一步提高速度。但是,由于不可能(几乎100%)每台机器都没有相同的硬件,我不能任意决定在每个客户机上运行多少线程

我想知道你们中是否有人知道一种方法来评估线程在cpu上的负载,并推断出可以在机器上并发运行的线程数

我认为有很多方法可以做到这一点

  • 我一个接一个地启动线程,每次评估cpu负载,当我达到某个前缀上限(50%-75%等)时停止,但这有一个缺陷,每次启动新线程时,我都必须停止并重新分离作业

  • (这是更复杂的) 运行某种类型的测试线程,计算它对cpu基本负载的影响,并推断机器上可以运行的线程数,然后相应地启动线程和单独的作业


  • 欢迎提出任何想法或建议,提前感谢

    任务是否依赖于以前的任务输出或完成?好问题-为什么不将CPU推到100%?-您可以降低优先级。根据机器的不同,我可能会在这台机器上做其他事情,因此可能我不想使用这台机器上的所有cpu电源,例如,在客户端上实现真正的并发性
    NumberOfThreadOnClient=NumberOfCoreOnClient
    。除非线程执行的工作是
    I/O
    ,否则任何超出此范围的操作都必须等待。另外,请指定什么样的工作是预期由线程完成。