Parallel processing 如何确定最佳工作线程数
我编写了一个C程序,从文件中读取数据集,然后应用数据挖掘算法来查找数据中的集群和类。目前,我正试图用PThreads重写这个多线程的顺序程序,我是并行编程的新手,我有一个关于工作线程数量的问题,这让我很困惑:Parallel processing 如何确定最佳工作线程数,parallel-processing,Parallel Processing,我编写了一个C程序,从文件中读取数据集,然后应用数据挖掘算法来查找数据中的集群和类。目前,我正试图用PThreads重写这个多线程的顺序程序,我是并行编程的新手,我有一个关于工作线程数量的问题,这让我很困惑: 当您进行并行编程时,找到工作线程数的最佳实践是什么?如何确定它?您是否尝试不同数量的线程并查看其结果,然后确定,或者是否有一个过程来找出最佳线程数量。当然,我是从性能的角度来研究这个问题的。基本上,您希望在有可用内核的情况下有尽可能多的准备好运行的线程,或者最多1或2个线程,以确保您可用的
当您进行并行编程时,找到工作线程数的最佳实践是什么?如何确定它?您是否尝试不同数量的线程并查看其结果,然后确定,或者是否有一个过程来找出最佳线程数量。当然,我是从性能的角度来研究这个问题的。基本上,您希望在有可用内核的情况下有尽可能多的准备好运行的线程,或者最多1或2个线程,以确保您可用的任何内核都不会闲置。诀窍在于估计有多少线程通常会被阻止等待其他东西(主要是I/O),因为这完全取决于您的应用程序,甚至取决于您无法控制的外部实体(数据库、其他分布式服务等)
最后,一旦您确定了多少线程应该是最佳的,按照您的建议,围绕您的估计值运行线程池大小的基准测试是一种很好的做法(至少,它可以让您再次检查您的假设),特别是如果您确实需要从系统中获得最后一次性能下降 基本上,您希望在有可用内核的情况下有尽可能多的准备运行线程,或者最多有1到2个线程,以确保没有可用的内核处于空闲状态。诀窍在于估计有多少线程通常会被阻止等待其他东西(主要是I/O),因为这完全取决于您的应用程序,甚至取决于您无法控制的外部实体(数据库、其他分布式服务等)
最后,一旦您确定了多少线程应该是最佳的,按照您的建议,围绕您的估计值运行线程池大小的基准测试是一种很好的做法(至少,它可以让您再次检查您的假设),特别是如果您确实需要从系统中获得最后一次性能下降 这里有几个问题
回答你们关于这项技术的问题:大多数大型并行代码运行在具有已知体系结构的超级计算机上,需要很长时间才能运行。处理器的最佳数量不仅是数量的函数,而且是通信拓扑(处理器之间的链接方式)的函数。因此,他们从测试阶段中受益,测试阶段通过测量小问题所花费的时间来确定处理器的最佳数量。这通常是手工完成的。如果可能的话,分析应该总是比基于理论考虑的猜测更可取。这里有几个问题
回答你们关于这项技术的问题:大多数大型并行代码运行在具有已知体系结构的超级计算机上,需要很长时间才能运行。处理器的最佳数量不仅是数量的函数,而且是通信拓扑(处理器之间的链接方式)的函数。因此,他们从测试阶段中受益,测试阶段通过测量小问题所花费的时间来确定处理器的最佳数量。这通常是手工完成的。如果可能的话,基于理论上的考虑,评测应该总是优先于猜测。Thanx Alex,但在这种情况下,估计的线程数将取决于机器,不是吗。我是