我写了一个算法来解决数独谜题。 现在我必须阅读大约100个数独游戏并解决它们。
基本上我只是阅读2d数组中的所有问题并遍历每个问题来解决它们。
foreach (var problem in problems)
{
Solve(problem); // Solve is a static method
}
如果我用以下代码替换上面的代码:
Parallel.ForEach(problems, problem => Solve(problem));
我没有做出相当大的改进。我的机器中有2个核心。 我错过了什么,我是否必须做其他事情以确保我的算法是并行的并使用所有内核。
答案 0 :(得分:4)
设置和管理并行任务需要一些开销。这种开销会抵消你在解决问题时所取得的一些成果。如果代码执行得足够快,那么这种开销可能会占据执行时间。此外,对于2个内核,您只希望看到最好的2倍改进(一半时间),因为在任何给定时间只能处理2个问题。如果没有关于您的性能或代码的任何信息,很难说是否有任何导致它无法并行运行的事情(例如,您是否有强制执行串行执行的关键部分)。
答案 1 :(得分:2)
我同意@tvanfosson。另一种可能性是你有两个内核,所以你的一个内核用于你的IDE等其他东西,至少不是100%可用来克服并行的开销