Matlab Parallel Jobs с участками - PullRequest
0 голосов
/ 23 января 2019

Для очень простого, но утомительного и трудоемкого интерфейса, включающего plot и ginput, мне требуется своего рода распараллеливание: пока пользователь решает и выбирает свои входные данные, изображение загружается и обрабатывается.

Поскольку Matlab Parallel Workers с parfor batch графически отключены, есть ли какой-нибудь обходной путь, чтобы это произошло? Без фактического открытия двух разных экземпляров Matlab в командной строке и решения этой проблемы после этого?

1 Ответ

0 голосов
/ 23 января 2019

вы пробовали использовать функцию parfeval? Обеспечивает асинхронную работу в Matlab

https://uk.mathworks.com/help/distcomp/parfeval.html

Не идеальное решение, но оно будет работать.

clc
clear
close all
format compact
p = gcp;

I = imread('peppers.png');
f = figure;
[h,w,c] = size(I);
imshow(I);
k = 0;
while true
    [xb,yb,button] = ginput(1);
    if button == 3
        % If mouse right button was clicked brake the loop
        break
    else
        % For other button add job to the cue
        xe = xb+99;
        xe(xe>w) = w;
        ye = yb+99;
        ye(ye>h) = h;
        Imini = I(yb:ye,xb:xe,:);
        filt = fspecial('motion', 50, 45);
        ff(k+1) = parfeval(p,@imfilter,1,Imini,filt);
        k = k +1;
    end

    % Check the cue for finished jobs and get output.
    idx = [];
    for k = 1:length(ff)
        if strcmp(ff(k).State,'finished')
            idx(k) = 1;
            Ifilt = ff(k).OutputArguments{1};
            figure; imshow(Ifilt);
        else
            idx(k) = 0;
        end
    end
    % Remove finished jobs from cue
    idx = logical(idx);
    ff(idx) = [];
    set(0, 'currentfigure', f);
end

Лучшее решение могло бы использовать рисунок WindowButtonDownFcn для добавления задания в parfeval cue и WindowButtonMotionFcn, чтобы проверить, является ли cue для завершенных заданий.

...