并行化MATLAB代码

时间:2018-05-09 06:01:58

标签: matlab parallel-processing

您好我想使用并行化我的MATLAB代码来运行高计算服务器。它是为深度学习制作图像数据库的代码。为了并行化代码我找到了我必须用于parfor循环。但我使用第一个循环或第二个循环,它显示我错误parfor由于变量imdb和image_counter无法运行。任何人都可以帮我改变代码以使用parfor

for i = 1:length(cur_images)
            X = sprintf('image Numb: %d ',i);
            disp(X)
        cur_image = load(cur_images{i,:});
        cur_image=(cur_image.Image.crop);


        %----------------------------------------------

        cur_image = imresize(cur_image, image_size);


        if(rgb < 1)
            imdb.images.data(:,:,1,image_counter) = cur_image;
        else
            imdb.images.data(:,:,1,image_counter) = cur_image(:,:,1); 
            imdb.images.data(:,:,2,image_counter) = cur_image(:,:,2);
            imdb.images.data(:,:,3,image_counter) = cur_image(:,:,3); 
            imdb.images.data(:,:,4,image_counter) = cur_image(:,:,4); 
            imdb.images.data(:,:,5,image_counter) = cur_image(:,:,5); 
            imdb.images.data(:,:,6,image_counter) = cur_image(:,:,6); 
            imdb.images.data(:,:,7,image_counter) = cur_image(:,:,7); 
            imdb.images.data(:,:,8,image_counter) = cur_image(:,:,8); 
            imdb.images.data(:,:,9,image_counter) = cur_image(:,:,9); 
            imdb.images.data(:,:,10,image_counter) = cur_image(:,:,10);

        end


        imdb.images.set(     1,image_counter) = set;             
        image_counter = image_counter + 1;
    end

1 个答案:

答案 0 :(得分:2)

这里的主要问题是您无法按照您尝试的方式分配parfor内的结构字段。此外,您的输出需要由循环变量索引以符合"sliced" - 即不使用image_counter。把它放在一起,你需要更像:

% Make a numeric array to store the output.
data_out = zeros([image_size, 10, length(cur_images)]);

parfor i = 1:length(cur_images)
    cur_image = load(cur_images{i, :});
    cur_image=(cur_image.Image.crop);
    cur_image = imresize(cur_image, image_size);

    % Now, assign into 'data_out'. A little care needed
    % here.
    if rgb < 1
        data_tmp = zeros([image_size, 10]);
        data_tmp(:, :, 1) = cur_image;
    else
        data_tmp = cur_image;
    end
    data_out(:, :, :, i) = data_tmp;
end
imdb.images.data = data_out;