Параллельные процессы в MATLAB

Обсуждение вопросов связанных с параллельными и распределенными вычислениями

Модератор: Admin

lennen
Пользователь
Сообщения: 31
Зарегистрирован: Пт окт 12, 2012 2:31 pm
Контактная информация:

Параллельные процессы в MATLAB

Сообщение lennen » Вт май 10, 2016 5:04 pm

Вот и настал момент, когда я оптимизировал код максимально, у меня почти нет for, тем более parfor, и, казалось бы, код работает уже довольно красиво. Но теперь я понял, что у меня картинка 50 кБ, и я в своем коде ей манипулирую от начала и до конца, допустим, за 10 секунд. Тогда скорость обработки - 5 кБ/c, хиловато, не так ли? Но умножим эту величину на 40 параллельных процессов, на которые хватит моего компьютера. Получим 200 кБ/c или 1600 кб/c, чего мне и надо.

Вот и думаю я, как добиться такой скорости? И придумал, что можно разделить картинку на 40 частей, сделать parfor, в котором будет мой код, но работающий уже с трехмерными массивами, где 3 размерность - это часть картинки. Скажите, правильно ли я соображаю, или что поинтереснее и попроще есть?

Если правильно, то конкретное уточнение. У меня по нажатию на эту кнопку происходит генерация массива
Xmod, ну и другой мелочи.

Код: Выделить всё

function pushbutton3_Callback(tab1, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
bin_data = get_data_from_file(get(handles.edit1,'string'));
assignin('base','bin_data',bin_data);
set(0,'DefaultAxesFontSize',12,'DefaultAxesFontName','Arial Cyr'); set(0,'DefaultTextFontSize',12,'DefaultTextFontName','Arial Cyr');
axes(handles.axes2);
stairs(abs(bin_data)); xlabel('n, samples');  ylabel('Bin(n), units'); grid minor; 
axis([get(handles.slider1,'Value') get(handles.slider1,'Value')+str2num(get(handles.edit2,'String')) -0.1 1.1]);
set(handles.text3, 'String', ['bin_data n = ' num2str(length(bin_data))]);

encod_type = get(handles.popupmenu5,'Value');
switch encod_type;
    case 1 % User selects peaks.
    case 2 % User selects peaks.
        bin_data = BCH_encoder(bin_data);
    case 3 % User selects peaks.
        bin_data = Ham_encoder(bin_data);
    case 4 % User selects peaks.
        bin_data = Cyc_encoder(bin_data);
    case 5 % User selects peaks.
        bin_data = Lin_encoder(bin_data);
end

val = get(handles.popupmenu1,'Value');
% Set current data to the selected data set.
switch val;
case 1 % User selects peaks.
   Nbps = 1;
case 2 % User selects peaks.
   Nbps = 2;
case 3 % User selects peaks.
   Nbps = 4;
end
Xmod = mapper(bin_data,Nbps)';
set(0,'DefaultAxesFontSize',12,'DefaultAxesFontName','Arial Cyr'); set(0,'DefaultTextFontSize',12,'DefaultTextFontName','Arial Cyr');
axes(handles.axes2);
axes(handles.axes3);
plot(Xmod); xlabel('I, units');  ylabel('Q, units'); grid minor;
set(handles.text6, 'String', ['Xmod n = ' num2str(length(Xmod))]);
assignin('base','Xmod',Xmod);
assignin('base','Nbps',Nbps);


Как я могу наиболее простым образом организовать для этого кода распределенные вычисления?
Исходные данные - bin_data - это вектор данных некоторой длины. То есть именно его я могу reshape, 40, а затем обрабатывать получившиеся массивы с parfor? А реально ли вообще делать 40 процессов? Или думаете, мой ноутбук больше 20 не выдержит? И сколько максимум процессов можно сделать с помощью parfor, как настраивать вообще это все? Ну опять же, если не предложите вариант попроще.
Xai

sandy
Эксперт
Сообщения: 5525
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Параллельные процессы в MATLAB

Сообщение sandy » Вт май 10, 2016 6:27 pm

И сколько максимум процессов можно сделать с помощью parfor

Столько, сколько у вас ядер в процессоре.
С уважением

Александр Сергиенко

lennen
Пользователь
Сообщения: 31
Зарегистрирован: Пт окт 12, 2012 2:31 pm
Контактная информация:

Re: Параллельные процессы в MATLAB

Сообщение lennen » Вт май 10, 2016 8:04 pm

Ок, тогда 8. А можно сделать больше параллельных процессов? То есть вопрос-то в том, как мне добиться хорошей скорости работы программы, если, как мне кажется, я уже все что можно оптимизировал?
Xai

sandy
Эксперт
Сообщения: 5525
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Параллельные процессы в MATLAB

Сообщение sandy » Вт май 10, 2016 8:26 pm

как мне добиться хорошей скорости работы программы, если, как мне кажется, я уже все что можно оптимизировал?

В профайлере смотрели, на что время тратится? Если нет, то посмотрите. Результаты иногда сильно удивляют.
С уважением



Александр Сергиенко