我在Parallel.For
区块内并行使用Math.Net Numerics
进行繁重的数学计算。Parallel.For不利用所有核心
当我使用4个内核(2 * 2)在本地系统中运行代码时,它使用全部4个内核。
但是,当我在我们的开发服务器上运行8个内核(4 * 2)的相同代码时,它仅使用4个内核。
我试过设置MaxDegreeOfParallism,但忍不住。
任何想法为什么所有核心都没有被利用。
以下是样本代码。
Parallel.For(0,10000,(i)=>
{
// heavy math computations using matrices
});
您的服务器是否有支持超线程的8个内核或4个内核? – vcsjones
@vcsjones:4个CPU,每个CPU有2个内核,因此总共4 * 2 = 8个内核 – malkam
您是否使用本地提供程序? Math.NET Numerics本身并行化(至少部分) - 如果您更喜欢在顶部进行自己的并行化,请考虑通过调用Control.UseSingleThread()来禁用Math.NET的并行化;使用Intel的ChristophRüegg的 –