我正在使用任务并行库来处理许多复杂的数学计算。在处理数据之前,大部分数据被加载到存储器中。但是,每次计算都会多次查询SQL Server。
我在两台不同的计算机上运行相同的过程,一台CPU最多,另一台则不运行。
第一台计算机配有2个Xeon E5-2687W处理器(每个处理器8个内核)和64GB 1600 MHz RAM。 Windows机器是Parallels 10虚拟机。第二款是配备i7-4850HQ(8核)和8GB 667 MHz RAM的MacBook Pro:
计算机1以大约25%的CPU利用率运行,工作分布在所有核心上。
计算机2以接近100%的速度运行,并在约2/3的时间内完成工作。
任何想法为什么Mac运行具有8核和较慢RAM的VM会更快运行16核和更快Ram的机器。
由于
答案 0 :(得分:0)
猜测:第一台机器没有运行16个核心。由于NUMA,它运行8 + 8核心,这是不一样的。众所周知,.NET和TPL并不知道NUMA效应。任务管理器可以向您显示numa节点。
尝试使用像coreinfo(sysinternals)这样的工具来找出哪个内核位于哪个套接字上,然后将进程固定到这些内核(SetProcessAffinityMask)。如果我的猜测是正确的,你应该看到50%的CPU利用率(所述套接字上的核心为100%),因此性能应该加倍。