如何减轻多核“性能损失”

如何减轻多核“性能损失”

我在家里和办公室里进行了一些计算,并注意到了一些意想不到的性能问题。工作机器比家用机器“严重”得多,但有时家用机器的性能优于工作机器。我很好奇这种动态是什么——为什么会这样,以及我是否可以对其进行调整。

最终,两台机器上的计算都只是大量非常大的任意精度整数线性代数计算(基于 GNU 多精度库)。减少大量稀疏但“大”的整数矩阵,找到高维多面体边界上的顶点,等等。

在我的家用电脑(有两个核心)上,如果我仅在一个核心(第二个核心接近空闲)上运行标准计算,则需要 282 秒。

在运行两个相同并行计算(与上面相同的计算)的家用计算机上,每个核心大约需要 320 秒。

在我的办公室电脑上,除了一个核心运行此计算外,所有核心基本上都处于空闲状态,这需要 196 秒。

在我的办公室电脑上,如果我让所有 8 个核心全力运行,并且其中一个核心正在执行上述计算,则运行该计算的核心需要 356 秒。

以下是我家用电脑上的详细信息:

 cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 15
model name  : Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
stepping    : 10
cpu MHz     : 800.000
cache size  : 4096 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority
bogomips    : 4787.65
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 15
model name  : Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
stepping    : 10
cpu MHz     : 800.000
cache size  : 4096 KB
physical id : 0
siblings    : 2
core id     : 1
cpu cores   : 2
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida tpr_shadow vnmi flexpriority
bogomips    : 4787.98
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

rybu@rybu-laptop:~/prog/regina/exercise/4M-census/rank1/t$ 

以及我的办公室电脑:

cat /proc/cpuinfo 处理器:0 vendor_id:GenuineIntel cpu家族:6 型号:26 型号名称:Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz 步进:5 cpu MHz:1600.000 缓存大小:8192 KB 物理id:0 同级:8 核心id:0 cpu核心:4 apicid:0 初始apicid:0 fpu:是 fpu_exception:是 cpuid级别:11 wp:是 标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida tpr_shadow vnmi flexpriority ept vpid bogomips : 6147.45 clflush 大小 : 64 cache_alignment : 64 地址大小 : 36 位物理, 48 位虚拟 电源管理:

处理器 :1 vendor_id :GenuineIntel cpu系列 :6 型号 :26 型号名称 :Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz 步进 :5 cpu MHz :1600.000 ca

答案1

Gridengine 不会做你想做的事。它适用于不共享内存总线的处理器,就像 SMP 机器那样。

您尝试将任务的内存保留在缓存中的想法是正确的。通过让所有内存访问尽可能地彼此接近(无论是指令还是数据),您可以做到这一点。不要从一个区域跳到另一个区域。

SMP 系统实际上是针对吞吐量而不是延迟进行优化的。如果延迟对您来说真的那么重要,那么最好将其划分为每个处理器的任务。

相关内容