2

脚本如下:

    Lambdass = [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000];
    numcores = feature('numcores'); % get the number of cpu cores
    num_slices = floor(length(Lambdass)/numcores); % get the number of slices for parallel computing
    if mod(length(Lambdass), numcores)~=0
        num_slices = num_slices + 1;
    end
    for slice_i=1:num_slices
        if slice_i~=num_slices
            Lambdas = Lambdass(((slice_i-1)*numcores+1):((slice_i)*numcores));
        else
            Lambdas = Lambdass(((slice_i-1)*numcores+1):end);
        end

        % start the parallel processing
        myparpool = parpool(length(Lambdas))
        parfor li = 1:length(Lambdas)
        % spmd
            lambda = Lambdas(li);
            save_path1 = sprintf('results/lambda_%f/', lambda);
            if ~exist([save_path1, '/fs_results.mat'], 'file') 
                do_something_and_save_results(lambda, save_path1);
            end
        end
        delete(myparpool)
    end

该脚本可以在一台计算机上正确运行,但在另一台计算机上,parfor似乎无法正常运行,并且有一些警告信息如下,并且parfor最终在没有并行模式的情况下运行,似乎是for按顺序运行的。有人可以帮忙给点建议吗?

    Starting parallel pool (parpool) using the 'local' profile ... Warning: Could not launch SMPD process manager. Using fallback parallel mechanism.
    > In SmpdGateway>SmpdGateway.canUseSmpd at 81
    In Local.hSubmitCommunicatingJob at 15
    In CJSCommunicatingJob>CJSCommunicatingJob.submitOneJob at 81
    In Job.Job>Job.submit at 302
    In InteractiveClient>InteractiveClient.start at 327
    In Pool.Pool>iStartClient at 537
    In Pool.Pool>Pool.hBuildPool at 434
    In parpool at 104
4

0 回答 0