2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 parallel toolbox (matlab) и .mex функции
Сообщение02.10.2017, 07:40 


07/10/15

2400
Доброго времени суток.
Может быть кто то сталкивался с такой проблемой, что .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 


07/10/15

2400
Уважаемые участники форума, долгое время никак не могу разобраться с проблемой: при запуске .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 
Аватара пользователя


31/12/13
148
Andrey_Kireew
С наскоку интернет про такое скрещивание ничего не отвечает.
Не проще ли запараллелить средствами С++?

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение08.12.2017, 22:03 


07/10/15

2400
Конечно не отвечает, я и сам не один день искал.
На счёт проще ли - не знаю, для меня наверное нет, по крайней мере неудобно каждый раз .mex функцию переписывать и перекомпилировать, а так то, конечно, можно и вообще без matlab обходиться ...

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

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


31/12/13
148

(Оффтоп)

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

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


23/12/05
12046
electric_retard в сообщении #1273317 писал(а):

(Оффтоп)

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

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

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение11.12.2017, 23:30 


07/10/15

2400
Спасибо, буду пытаться с matlab, но к сожалению пока не знаю с чего начать :-(

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 00:28 
Экс-модератор
Аватара пользователя


23/12/05
12046
Я подозреваю, что матлаб не может проверить, что вы не станете в разных потоках писать в одну и ту же память в вашей mex-функции, поэтому и не параллелит. Если у вас не будет совместного чтения/записи в одну и ту же память и каких-то игр со взаимодействием потоков, то можете распараллелить и средствами С++.

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 00:59 


07/10/15

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

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

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:03 
Заслуженный участник
Аватара пользователя


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

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

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:08 


07/10/15

2400
Geen Огромное спасибо! Теперь хоть буду знать. Хотя конечно жаль ...
Получается единственный вариант - многопоточный .mex (если конечно он запустится).

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:12 
Заслуженный участник
Аватара пользователя


01/09/13
4318
Andrey_Kireew в сообщении #1274196 писал(а):
Теперь хоть буду знать.

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

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 01:29 


07/10/15

2400
Да опробую, кстати, у меня сейчас новый matlab (2014b), может на нём и будет работать. Потом отпишусь.

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 02:00 
Экс-модератор
Аватара пользователя


23/12/05
12046
Я не работал с parallel toolbox. Но вот тут пишут, что помимо parfor есть другие механизмы распараллеливания. Мне кажется, они вам могут подойти.

 Профиль  
                  
 
 Re: parallel toolbox (matlab) и .mex функции
Сообщение12.12.2017, 02:28 


07/10/15

2400
photon Спасибо, попробую.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group