Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
Multithreading 在线程之间分配工作_Multithreading_Algorithm_Boost Thread - Fatal编程技术网

Multithreading 在线程之间分配工作

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^60划分为几个分布在线程之间的小循环。循环的范围可以从2^4到2^60不等。我的问题是如何确定线程的最佳数量max=8,min=1,以及如何在它们之间分配工作。如果有人能举个例子,那就太好了


例如。。我试图将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,我会说运行的线程数与计算机中的内核数相同。