【发布时间】:2015-08-24 17:29:52
【问题描述】:
我在 Parallel.For 块内并行使用 Math.Net Numerics 进行繁重的数学计算。
当我在具有 4 个核心 (2*2) 的本地系统中运行代码时,它会使用所有 4 个核心。
但是当我在我们的 8 核 (4*2) 开发服务器中运行相同的代码时,它只使用了 4 个核。
我尝试设置 MaxDegreeOfParallism,但无济于事。
知道为什么没有使用所有内核。
下面是示例代码。
Parallel.For(0,10000,(i)=>
{
// heavy math computations using matrices
});
【问题讨论】:
-
你的服务器是8核还是4核支持超线程?
-
@vcsjones:4 个 CPU,每个 CPU 有 2 个内核,因此总共 4*2=8 个内核
-
您使用的是本地提供程序吗?请注意,Math.NET Numerics 中的线性代数本身是并行化的(至少部分是并行化的) - 如果您更喜欢在上面进行自己的并行化,请考虑通过调用
Control.UseSingleThread();来禁用 Math.NET 的并行化 -
@ChristophRüegg 我正在使用英特尔 MKL 提供程序。我在每次迭代中执行大量矩阵运算。
-
显示正在运行的实际代码。
标签: c# task-parallel-library math.net mathnet-numerics parallel.for