У меня довольно масштабная проблема оптимизации, хотя сама проблема довольно проста. Это просто квадратичная c + линейная задача с линейными ограничениями. Так что проблема решаема с помощью cplexqp. Масштаб проблемы составляет около 1300 переменных, но мне нужно решить ~ 200 независимых задач.
Если я просто наберу l oop более 200 раз и вызову cplexqp как обычно, то для решения всех потребуется около 16 минут. проблемы. Я подумал об использовании параллельных вычислений, поэтому я изменил l oop на parfor, и теперь это занимает около 14 минут. Я бы подумал, что мы получим гораздо больший коэффициент ускорения, учитывая, что у нас 12 ядер и 12 рабочих.
Я убедился, что параллельный рабочий уже инициализирован (поэтому MATLAB не нужно тратить время на их инициализацию) , Я также проверил, что все 12 рабочих потоков были активны в диспетчере задач, и все они использовали нетривиальные объемы ЦП каждый.
Мой вопрос: как вы думаете, cplexqp имеет механизм блокировки, как он может ' не может быть вызвано с более чем одной проблемой в данный момент (из разных потоков?) Что если у меня разные процессы MATLAB? (Например, я могу сохранить входные данные в файл и запустить несколько сеансов MATLAB для использования файла, и каждый сеанс будет знать, какой индекс проблем нужно решить).
16 минут - это неплохо, но мы можем Мне нужно делать это несколько раз в день (с потенциально разными входами), поэтому мне было интересно, сможем ли мы ускорить процесс еще больше.
TIA