2

Я использую MATLAB's quadprog, и он работает очень медленно на моей локальной машине.Квадрат MATLAB exteremely медленно на моей сильной локальной машине против другой удаленной машины

Когда я запускаю точный код на удаленной машине, он заканчивается в течение 10 минут. Когда я запускаю его на своей локальной машине, он не завершается даже через 24 часа (я в какой-то момент его убью).

В то время как код работает, использование памяти на моем локальном компьютере составляет ~ 10 ГБ ОЗУ (в то время как на моей локальной машине имеется ~ 100 ГБ свободной памяти). Использование на удаленном компьютере - 20-30 ГБ ОЗУ.

Любая идея о том, что делать, чтобы она работала быстрее на моей локальной машине?

Important EDIT 18 окт.: Я выполнил задачу меньшего масштаба на обеих машинах. На локальной машине требуется 1900 секунд, на пульте дистанционного управления - 8 секунд, усиление - 240. Оба компьютера также имеют несколько многоядерных процессоров. На этот раз я заметил htop, что удаленная машина использует все свои процессоры, в то время как на локальной машине используется только один процессор (хотя все остальные доступны). Любая идея о том, как я могу заставить MATLAB использовать все процессоры на локальной машине?


Некоторые боковые примечания:

1: NNZ для Н, Aeq = ~ 10e6, размеры около 11e6 х 11e6

2: четырехъядерный программирование только с ограничениями равенства имеет замкнутую форму решения (См. Boyd). Когда я решаю его с закрытым решением формы, он занимает ~ 10 минут на моей локальной машине против 5 минут на удаленной машине. В то время как оба потребляют ~ 20-30 ГБ памяти. Поскольку я хотел бы добавить ограничения неравенства, я хотел бы иметь возможность быстро запускать quadprog на моем локальном компьютере.

3: Ниже cat /proc/cpuinfo на моей машине и удаленной машине (удаленная машина сильнее, однако локальная машина также сильна): 14 ядер против 4 ядер - это усиление ~ x3.5 (не принимая мульти- потоки), а AVX против SSE - max ~ x2. Таким образом, это не объясняет прирост в 240, который я вижу. Кроме того, когда я использую решение закрытой формы (вместо quadprog), удаленная машина имеет коэффициент усиления только x2, против локальной машины.

4: Уверен, что у меня 64-разрядная версия, потому что я вижу, что потребление памяти составляет 10-15 ГБ.

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: Hyper-Threading включена на компьютере. Я проверил его с помощью скрипта this.

7: Запуск параллельного пула, как предложил кто-то, не помогает.

Спасибо!

Локальная информация Машина процессора одного процессора (из многих)

не
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: 

Удаленная информация Машина процессора одного процессора (из многих)

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: 
+0

Какая версия MATLAB? – Royi

+0

Я использую версию 2014b. – yuval

+3

На обоих компьютерах? Есть ли шанс, что один из них поддерживает AVX, а другой - нет или что-то в этом роде? Более того, на другом компьютере имеется 14 ядер, если эта реализация может справиться с ними, возможно, это и есть. – Royi

ответ

0

Ответ, если это что-то с конфигурацией ОС имеет отношение к одному из следующих этапов:

  1. Удаленный компьютер имеет 14 ядер. Если реализация может обрабатывать все 14 ядер, она значительно выиграет от нее.
  2. Процессор удаленного компьютера Intel Xeon E5-2697 v3 поддерживает AVX и AVX 2.0.
    Процессор локального компьютера Intel Xeon E5520 поддерживает только SSE 4.2 и имеет более низкую частоту.
    Если алгоритм может использовать эти векторизованные функции (И я думаю, что 2014b использует MKL, который является достаточно новым для этого), он должен значительно повысить производительность.

Принимая во внимание все, что вы видите.

+1

Спасибо .. но 14 ядер против 4 ядер - это усиление ~ x3.5 (не принимая многопоточных служебных данных), а AVX vs SSE равно ~ x2. Я убил процесс через 24 часа (против 10 минут!), Который является коэффициентом усиления, равным, по крайней мере, x144. Может ли AVX2 и 14 ядер объяснить такой огромный выигрыш? Кроме того, когда я использую решение закрытой формы, удаленная машина имеет коэффициент усиления только x2, а также локальную машину. Хотя решение закрытой формы также должно использовать MKL. – yuval