Я использую PuLP с Python для некоторой оптимизации, и, поскольку мои данные настолько велики, я решил попробовать многопоточность, так как моя проблема довольно велика, т.е. выбрал
Однако при тестировании с небольшим подмножествомглавная проблема (10k вместо 1M человек), я не могу получить многопоточность, чтобы фактически использовать несколько потоков.
Я следовал инструкциям для построения решателя из источника с использованием флага ../configure --enable-cbc-parallel
, как описано на сайте Coin-OR ;все работало отлично и все тесты пройдены.Я проверил конфигурационный журнал CBC в build/Cbc/config.log
, и в нем есть сообщение configure:30105: Cbc multithreading enabled
в строке 845, поэтому он определенно включен для работы.
Система:
- Mac OS X10.14.3
- i7-4870HQ четырехъядерный
- Python 3.6.7 с Anaconda
- проблема возникает как в Jupyter, так и в интерпретаторе Python из командной строки
Код, аналогичный из приведенного здесь примера :
start = time.time()
solver = solvers.COIN_CMD(~/Cbc-2.9/build/Cbc/src/cbc',threads=8,msg=1,fracGap = 0.01)
prob.solve(solver)
print('time to solve:',time.time()-start,'seconds')
>> time to solve: 24.815305948257446 seconds
Это время было примерно таким же, если я указал многопоточный решатель или просто использовалрешатель по умолчанию.
В сообщении CBC во время выполнения была строка:
threads was changed from 0 to 8
, а также строки:
Cbc0012I Integer solution of -25507 found by DiveCoefficient after 0 iterations and 0 nodes (18.04 seconds)
Cbc0030I Thread 0 used 0 times, waiting to start 0.291008, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 1 used 0 times, waiting to start 0.24997687, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 2 used 0 times, waiting to start 0.21034408, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 3 used 0 times, waiting to start 0.17122722, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 4 used 0 times, waiting to start 0.13530493, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 5 used 0 times, waiting to start 0.098966837, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 6 used 0 times, waiting to start 0.062871933, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Thread 7 used 0 times, waiting to start 0.028151035, 0 cpu time, 0 locks, 0 locked, 0 waiting for locks
Cbc0030I Main thread 0 waiting for threads, 1 locks, 0.00077700615 locked, 9.5367432e-07 waiting for locks
Cbc0001I Search completed - best objective -25507, took 0 iterations and 0 nodes (18.29 seconds)
, что означает, что все потоки были созданы, но не используется?
Одно решение, о котором я думал, но не знаю, как решить: возможно, мой путь к решателю неверен, то есть решатель COIN_CMD не должен быть направлен на .../cbc
но к чему-то еще.Я ничего не нашел по этому поводу.
Так что я делаю не так?Я не мог найти другую документацию о том, как использовать темы.Надеюсь, это глупый вопрос с простым решением.Спасибо за вашу помощь.