Multithreading 在线程之间分配工作
我知道也有类似的问题,但都没有回答我的问题 我试图将一个大的循环2^60划分为几个分布在线程之间的小循环。循环的范围可以从2^4到2^60不等。我的问题是如何确定线程的最佳数量max=8,min=1,以及如何在它们之间分配工作。如果有人能举个例子,那就太好了Multithreading 在线程之间分配工作,multithreading,algorithm,boost-thread,Multithreading,Algorithm,Boost Thread,我知道也有类似的问题,但都没有回答我的问题 我试图将一个大的循环2^60划分为几个分布在线程之间的小循环。循环的范围可以从2^4到2^60不等。我的问题是如何确定线程的最佳数量max=8,min=1,以及如何在它们之间分配工作。如果有人能举个例子,那就太好了 例如。。我试图将2^32分为8个线程。所以每个线程都会做2^29的工作量,对吗?但是我如何划分范围呢?0... 2^29,2^29....2^30... ? 抱歉,如果这是糟糕的数学,但我的大脑不再正常工作。2E29的间隔如下: 0 * 2
例如。。我试图将2^32分为8个线程。所以每个线程都会做2^29的工作量,对吗?但是我如何划分范围呢?0... 2^29,2^29....2^30... ? 抱歉,如果这是糟糕的数学,但我的大脑不再正常工作。2E29的间隔如下:
0 * 2E29 ~ 1 * 2E29 = 0 ~ 2E29
1 * 2E29 ~ 2 * 2E29 = 2E29 ~ 2E30
2 * 2E29 ~ 3 * 2E29 = 2E30 ~ 2E30 + 2E29
3 * 2E29 ~ 4 * 2E29 = 2E30 + 2E29 ~ 2E31
简单的方法是将这个数除以线程数,然后使用它。设m=地板/k。0..m-1,m..2m-1。。。。是循环的起点和终点
不知道你为什么痴迷于2^as。有什么具体原因吗?否则,请按照您对任何其他范围所做的操作。等分。这里是我得到的间隔
(0, 2^29 - 1)
(2^29, 2^30 - 1)
(2^30, 2^30 + 2^29 -1)
(2^30 + 2^29, 2^31 - 1)
(2^31, 2^31 + 2^29 - 1)
(2^31 + 2^29, 2^31 + 2^30 - 1)
(2^31 + 2^30, 2^31 + 2^30 + 2^29 - 1)
(2^31 + 2^30 + 2^29, 2^32 - 1)
你可能会感到困惑,因为2^29+2^29=2^30是一个单项式。但是,2^30+2^29不能添加到单项式中@Elkamina-问题是如何根据范围来决定线程数,范围既不太高也不太低。@问题取决于许多其他内容!你有多少内核,你能等待多久,你有多少内存,每个线程消耗多少内存,每个线程的IO时间是多少。。。在一个简单的计算密集型场景中,不需要太多RAM,我会说运行的线程数与计算机中的内核数相同。