gpt4 book ai didi

多线程 - 一组中所有对之间的计算

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:29 27 4
gpt4 key购买 nike

我有 n 个元素(例如 A、B、C 和 D),需要在所有这些元素之间进行计算。

Calculation 1 = A with B  
Calculation 2 = A with C
Calculation 3 = A with D
Calculation 4 = B with C
Calculation 5 = B with D
Calculation 6 = C with D

实际上有超过 1000 个元素,我想并行处理这个过程。

请注意,我无法同时从 2 个线程访问元素。例如,这使得不可能同时执行计算 1计算 2,因为它们都使用元素 A
编辑:我可以从 2 个线程访问一个元素,但如果我只是拆分计算并依赖线程安全锁,它会使一切变得非常慢。

是否已经有针对此类问题的分布算法?
似乎很多人一定已经遇到了同样的问题,但我在伟大的互联网上找不到任何东西。 ;)

单线程示例代码:

for (int i = 0; i < elementCount; i++)
{
for (int j = i + 1; j < elementCount; j++)
{
Calculate(element[i], element[j]);
}
}

最佳答案

可以申请round-robin tournament algorithm允许组织所有可能的对(N*(N-1) 结果)。

所有集合元素(玩家)组成两行,列为对当前回合。第一个元素固定,其他元素循环移位。

因此您最多可以运行 N/2 个线程来获取第一对集合的结果,然后重新排序索引并继续

摘自维基:

The circle method is the standard algorithm to create a schedule for a round-robin tournament. All competitors are assigned to numbers, and then paired in the first round:
Round 1. (1 plays 14, 2 plays 13, ... )
1 2 3 4 5 6 7
14 13 12 11 10 9 8

then fix one of the contributors in the first or last column of the table (number one in this example) and rotate the others clockwise one position
Round 2. (1 plays 13, 14 plays 12, ... )
1 14 2 3 4 5 6
13 12 11 10 9 8 7
Round 3. (1 plays 12, 13 plays 11, ... )
1 13 14 2 3 4 5
12 11 10 9 8 7 6

until you end up almost back at the initial position
Round 13. (1 plays 2, 3 plays 14, ... )
1 3 4 5 6 7 8
2 14 13 12 11 10 9

关于多线程 - 一组中所有对之间的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com