2

我正在使用 MATLAB quadprog,它在我的本地机器上运行非常慢。

当我在远程机器上运行确切的代码时,它会在 10 分钟内完成。当我在本地机器上运行它时,即使 24 小时后它也不会终止(我有时会杀死它)。

当代码运行时,我的本地机器上的内存使用量为 ~10GB RAM(而我的本地机器有 ~100GB 的可用 RAM)。远程机器上的使用量是 20-30GB RAM。

关于如何使它在我的本地机器上运行得更快的任何想法?

重要编辑 10 月 18 日:我在两台机器上都执行了一个较小规模的问题。在本地机器上需要 1900 秒,在远程机器上需要 8 秒,增益约为 240。这两台机器也有多个多核处理器。这次我注意到htop,远程机器使用它的所有处理器,而本地机器只使用一个处理器(尽管所有其他处理器都可用)。关于如何让 MATLAB 使用本地机器上的所有处理器的任何想法?


一些旁注:

1:nnz 代表 H,Aeq =~ 10e6,尺寸约为 11e6 x 11e6

2:只有等式约束的四边形编程有一个封闭形式的解决方案(参见Boyd)。当我使用封闭形式的解决方案解决它时,在我的本地机器上大约需要 10 分钟,而在远程机器上需要 5 分钟。虽然两者都消耗约 20-30GB 的内存。由于我想添加不等式约束,我希望能够在我的本地机器上快速运行 quadprog。

3:下面是cat /proc/cpuinfo我的机器vs远程机器(远程机器更强,但本地机器也很强):14核vs 4核是〜x3.5的增益(不考虑多线程开销),并且AVX 与 SSE 最大〜x2。所以它不能解释我看到的 240 的增益。此外,当我使用封闭形式的解决方案(而不是 quadprog)时,远程机器与本地机器相比只有 x2 的增益。

4:我确定我运行的是64位版本,因为我看到内存消耗是10-15GB。

5:本地系统运行RHEL,远程运行ubuntu。

本地uname -a结果:

 Linux hostname 2.6.32-573.7.1.el6.x86_64 #1 SMP Thu Sep 10 13:42:16 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux    

远程uname -a结果:

 Linux hostname 3.13.0-65-generic #105-Ubuntu SMP Mon Sep 21 18:50:58 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux    

6:机器上启用了超线程。我用这个脚本检查了它。

7:按照某人的建议启动并行池无济于事。

谢谢!

单个处理器的本地机器 cpu 信息(在许多中)

vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
stepping        : 5
microcode       : 25
cpu MHz         : 1600.000
cache size      : 8192 KB
physical id     : 1
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 23
initial apicid  : 23
fpu             : yes
fpu_exception   : yes
cpui level     : 11
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 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 dca sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
bogomips        : 4532.68
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

单个处理器的远程机器 cpu 信息(在许多中)

vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz
stepping        : 2
microcode       : 0x2d
cpu MHz         : 1200.000
cache size      : 35840 KB
physical id     : 1
siblings        : 28
core id         : 14
cpu cores       : 14
apicid          : 61
initial apicid  : 61
fpu             : yes
fpu_exception   : yes
cpuid level     : 15
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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips        : 5189.05
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:
4

1 回答 1

0

除非它与操作系统配置有关,否则答案与以下之一有关:

  1. 远程计算机有 14 个核心。如果实现可以处理所有 14 个内核,它将从中受益匪浅。
  2. 远程计算机 Intel Xeon E5-2697 v3 的 CPU 支持 AVX 和 AVX 2.0。
    本机CPU Intel Xeon E5520 仅支持SSE 4.2,频率较低。
    如果算法可以利用这些矢量化函数(而且我认为 2014b 使用了足够新的 MKL),它应该会显着提高性能。

考虑到所有这些,就可以解释您所看到的。

于 2015-10-17T18:49:31.033 回答