【问题标题】:Parallelizing MATLAB code并行化 MATLAB 代码
【发布时间】:2018-05-09 22:52:58
【问题描述】:

您好,我想使用并行化我的 MATLAB 代码来运行高计算服务器。它是为深度学习制作图像数据库的代码。为了并行化我发现我必须 for 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

【问题讨论】:

  • 你只需要一个关于你可以并行做什么和不能做什么的教程

标签: matlab parallel-processing


【解决方案1】:

这里的主要问题是您无法按照您尝试的方式分配给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;

【讨论】:

  • 加载后cur_image的大小为250x250x10。数据应存储在imdb.images.data 中,例如第一张图像的 (250x250x10x1) 和第二张图像的 (250x250x10x2)。 data_out(:, :, :, i) = data_tmp;imdb.images.data = data_out; 会表现得一样吗?
  • 还有一件事是这个parfor 循环正在另一个for 循环工作,因为它没有集合。有 3 组,每组都运行 parfor。第一组的大小是data_out28x28x61x11028。第二组和第三组的大小是data_out28x28x61x2048。如何连接它是集合循环?
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2013-11-12
  • 1970-01-01
相关资源
最近更新 更多