我知道有类似的问题,但没有人回答我的问题。
我正在尝试将一个大循环(2 ^ 60)分成几个在线程中分布的较小循环。环的范围可以从(2 ^ 4)到(2 ^ 60)变化。我的问题是如何确定线程的最佳数量(max = 8,min = 1)以及如何在它们之间划分工作。如果有人可以展示一个很棒的例子。
例如..我试图在8个线程中划分2 ^ 32。所以每个线程都会做2 ^ 29的工作量吧?但我如何划分范围? (0 ... 2 ^ 29),(2 ^ 29 .... 2 ^ 30)......?对不起,如果这是不好的数学,但我的思想不再正常工作。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
简单的事情就是将数字除以线程数并使用它。设m = floor(n / k)。 0 ..(m-1),m ..(2m-1)....是循环的开始和结束。
不确定为什么要迷恋2^a
。有什么具体原因吗?否则就像对待任何其他范围一样。平分。
答案 2 :(得分:0)
以下是我的间隔
(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
无法添加到单项中