2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 parallel toolbox (matlab) и .mex функции
Сообщение02.10.2017, 07:40 
Доброго времени суток.
Может быть кто то сталкивался с такой проблемой, что .mex функции в matlab не запускаются в нескольких потоках.
Вот примерный код:

Используется синтаксис Matlab M
Vals=[];
parfor ii=1:100;
a=myFun_mex(y',ii*2,ii);
Vals=[Vals; a];
end
 


При выполнении запускается, как и положено, 4 ядра, но на 100% загружается только одно из них. Соответственно, скорость вычислений у меня в 4 раза меньше ожидаемой, т.е. распараллеливание ничего не даёт, абсолютно.
Тем не менее, эта же программа (myFun), реализованная в виде .m - функции Matlab работает вполне корректно. Загружаются все 4 ядра, производительность увеличивается в 4 раза. В чём тут может быть дело?

 
 
 
 Проблемы с параллельными вычислениями в Matlab
Сообщение08.12.2017, 18:57 
Уважаемые участники форума, долгое время никак не могу разобраться с проблемой: при запуске .mex функции в параллельном цикле никакого увеличения производительности не наблюдается
Используется синтаксис Matlab M
Vals=[];
parfor ii=1:100;
a=myFun_mex(y',ii*2,ii);
Vals=[Vals; a];
end
 

Скорость выполнения точно такая же, как и при запуске в обычном цикле. При этом, все ядра загружаются на 100%. Если же запустить ту же программу с myFun, реализованной в виде .m файла - всё работает нормально. Ускорение работы в 4 раза (на 4-х ядрах). У меня есть такое подозрение, что myFun_mex пытается использовать одну и ту же область памяти,но это лишь догадки.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение08.12.2017, 21:07 
Аватара пользователя
Andrey_Kireew
С наскоку интернет про такое скрещивание ничего не отвечает.
Не проще ли запараллелить средствами С++?

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение08.12.2017, 22:03 
Конечно не отвечает, я и сам не один день искал.
На счёт проще ли - не знаю, для меня наверное нет, по крайней мере неудобно каждый раз .mex функцию переписывать и перекомпилировать, а так то, конечно, можно и вообще без matlab обходиться ...

Ну и просто интересно было бы узнать, почему так происходит. Дело скорее всего в .mex функции. Может быть память выделять нужно как то по особому? или ещё что? В общем хотелось бы услышать хоть какие то идеи по этому поводу.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение08.12.2017, 23:08 
Аватара пользователя

(Оффтоп)

Andrey_Kireew
Тоже так думал, но прикручивание std::thread заняло меньше рабочего дня. Но тут все индивидуально.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение11.12.2017, 21:32 
Аватара пользователя
electric_retard в сообщении #1273317 писал(а):

(Оффтоп)

Andrey_Kireew
Тоже так думал, но прикручивание std::thread заняло меньше рабочего дня. Но тут все индивидуально.

Многопоточное программирование имеет массу подводных камней. Если вы с ними не сталкивались до этого, то лучше пытаться все-таки решать средствами Matlab, поскольку самостоятельно без опыта организовать вычисления потокобезопасно может не получиться, и может случиться какая-нибудь трудноуловимая бяка потом: результат вычислений может меняться от запуска к запуску даже без наличия рандома в программе, а то и вовсе может случиться крэш или зависание, которое будет проявляться очень редко, но в самый неподходящий момент.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение11.12.2017, 23:30 
Спасибо, буду пытаться с matlab, но к сожалению пока не знаю с чего начать :-(

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 00:28 
Аватара пользователя
Я подозреваю, что матлаб не может проверить, что вы не станете в разных потоках писать в одну и ту же память в вашей mex-функции, поэтому и не параллелит. Если у вас не будет совместного чтения/записи в одну и ту же память и каких-то игр со взаимодействием потоков, то можете распараллелить и средствами С++.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 00:59 
photon Я копировал эту функцию под разными именами и запускал их параллельно с помощью spmd результат не изменился, будто память используется для всех экземпляров одна и та же. Может быть память выделять как то по особому (я хоть и пишу на С++, но специалист не большой в таких делах)?
Внутри .mex я выделяю память с помощью malloc(), потом высвобождаю с помощью free()

Первый Ваш пост мне внушил гораздо больше оптимизма чем последний.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:03 
Аватара пользователя
photon в сообщении #1274184 писал(а):
Я подозреваю, что матлаб не может проверить, что вы не станете в разных потоках писать в одну и ту же память в вашей mex-функции, поэтому и не параллелит. Если у вас не будет совместного чтения/записи в одну и ту же память и каких-то игр со взаимодействием потоков, то можете распараллелить и средствами С++.

Вроде бы в документации я видел, что mex принципиально не запускается в разных потоках - matlab никак не может проверить/узнать, что он является чистой функцией.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:08 
Geen Огромное спасибо! Теперь хоть буду знать. Хотя конечно жаль ...
Получается единственный вариант - многопоточный .mex (если конечно он запустится).

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:12 
Аватара пользователя
Andrey_Kireew в сообщении #1274196 писал(а):
Теперь хоть буду знать.

Но Вы проверьте на всякий случай - я читал это много лет назад (а последнее время не отслеживал подробно изменения).

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:29 
Да опробую, кстати, у меня сейчас новый matlab (2014b), может на нём и будет работать. Потом отпишусь.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 02:00 
Аватара пользователя
Я не работал с parallel toolbox. Но вот тут пишут, что помимо parfor есть другие механизмы распараллеливания. Мне кажется, они вам могут подойти.

 
 
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 02:28 
photon Спасибо, попробую.

 
 
 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group