diff --git a/matlab/parallel/dynareParallelGetFiles.m b/matlab/parallel/dynareParallelGetFiles.m index 2c81d8692185bd3e69f4430c28ce957dbd086d4f..0f0e29c2142c4fba0187ebd62bd0a9a302f6f4b1 100644 --- a/matlab/parallel/dynareParallelGetFiles.m +++ b/matlab/parallel/dynareParallelGetFiles.m @@ -6,8 +6,8 @@ function dynareParallelGetFiles(NamFileInput,PRCDir,Parallel) % % INPUTS % o NamFileInput [] ... -% o PRCDir [] ... -% o Parallel [] ... +% o PRCDir [] ... +% o Parallel [] ... % % OUTPUTS % None @@ -43,9 +43,46 @@ for indPC=1:length(Parallel), if Parallel(indPC).Local==0, if ~ispc, %isunix || (~matlab_ver_less_than('7.4') && ismac), for jfil=1:size(NamFileInput,1), - % if ~isempty(dynareParallelDir(NamFileInput{jfil,2},[PRCDir,filesep,NamFileInput{jfil,1}],Parallel(indPC))), - [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]); - % end + % if ~isempty(dynareParallelDir(NamFileInput{jfil,2},[PRCDir,filesep,NamFileInput{jfil,1}],Parallel(indPC))), + + if exist('OCTAVE_VERSION') % Patch for peculiar behaviour of ls under Linux. + % It is necessary to manage the jolly char '*'! + + FindAst=strfind(NamFileInput{jfil,2},'comp_status_random_walk_metropolis_hastings_core*'); + + if isempty (FindAst) + + [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]); + + else + + filenameTemp=NamFileInput{jfil,2}; + + [NotUsed FlI]=system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' ls ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',filenameTemp, ' 2> OctaveStandardOutputMessage.txt']); + + if isempty (FlI) + return + end + + AstPos=strfind(filenameTemp,'.mat')-1; + FiMat=findstr(FlI, '.mat'); + NumFileToCopy=length(FiMat); + + + for i=1: NumFileToCopy + Ni=num2str(i); + filenameTemp(1,AstPos)=Ni; + [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},filenameTemp,' ',NamFileInput{jfil,1}]); + end + end + + else + + [NonServeL NonServeR]= system(['scp ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',NamFileInput{jfil,1}]); + end + + + % end end else for jfil=1:size(NamFileInput,1), diff --git a/matlab/parallel/dynareParallelSendFiles.m b/matlab/parallel/dynareParallelSendFiles.m index 3728ac3658ff97441053d31eeb8569e528d47e97..838499fe73d54e73f1957e785978cf243c677529 100644 --- a/matlab/parallel/dynareParallelSendFiles.m +++ b/matlab/parallel/dynareParallelSendFiles.m @@ -6,8 +6,8 @@ function dynareParallelSendFiles(NamFileInput,PRCDir,Parallel) % % INPUTS % o NamFileInput [] ... -% o PRCDir [] ... -% o Parallel [] ... +% o PRCDir [] ... +% o Parallel [] ... % % OUTPUTS % None @@ -44,7 +44,7 @@ for indPC=1:length(Parallel), if ~ispc, %isunix || (~matlab_ver_less_than('7.4') && ismac), for jfil=1:size(NamFileInput,1), if ~isempty(NamFileInput{jfil,1}) - system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' mkdir -p ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}]) + [NonServeL NonServeR]=system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' mkdir -p ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}]); end [NonServeL NonServeR]=system(['scp ',NamFileInput{jfil,1},NamFileInput{jfil,2},' ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,':',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',NamFileInput{jfil,1}]); end @@ -52,10 +52,56 @@ for indPC=1:length(Parallel), for jfil=1:size(NamFileInput,1) if ~isempty(NamFileInput{jfil,1}) if isempty(dynareParallelDir(NamFileInput{jfil,1},PRCDir,Parallel(indPC))) - mkdir(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]); + + if exist('OCTAVE_VERSION') % Patch for peculiar behaviour of mkdir under Windows. + + % It is Necessary because Octave is not able to + % create two nested directory at the same time. + + % Remove (if present) the '/' chars. Can be easily transformed + % in a function. + + NamFileInputTemp=NamFileInput{jfil,1}; + while(1) + Bs=strfind(NamFileInputTemp,'/'); + if isempty(Bs), + break; + else + NamFileInputTemp(1,Bs)='\'; + end + end + + [NonServeL NonServeR]=system(['mkdir \\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInputTemp]); + + else + mkdir(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]); + end + end + end + + if exist('OCTAVE_VERSION') % Patch for peculiar behaviour copyfile ls under Windows. + + % It is Necessary because Octave is not able to + % use the jolly char '*' with copyfile. + + % Remove (if present) the '/' chars. Can be easily transformed + % in a function. + + NamFileInputTemp=NamFileInput{jfil,1}; + while(1) + Bs=strfind(NamFileInputTemp,'/'); + if isempty(Bs), + break; + else + NamFileInputTemp(1,Bs)='\'; + end end + + [NonServeS NonServeD]=system(['copy ',NamFileInputTemp, NamFileInput{jfil,2},' \\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInputTemp]); + + else + copyfile([NamFileInput{jfil,1},NamFileInput{jfil,2}],['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]); end - copyfile([NamFileInput{jfil,1},NamFileInput{jfil,2}],['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',NamFileInput{jfil,1}]) end end end diff --git a/matlab/pm3.m b/matlab/pm3.m index 267078106ac4592e54d23cd66d9c451a5128437d..129ac2f61df80b4822fd94b33b5958dcc96d6a2c 100644 --- a/matlab/pm3.m +++ b/matlab/pm3.m @@ -85,7 +85,7 @@ for i = 1:nvar eval(['oo_.' name3 '.HPDsup.' name ' = HPD(2,:,i);']); end %% -%% Finally I build the plots. +%% Finally I build the plots. %% % Block of code executed in parallel, with the exception of file @@ -147,16 +147,24 @@ localVars.tit3=tit3; localVars.Mean=Mean; % Like sequential execution! + +if ~exist('OCTAVE_VERSION') % Commenting for testing! if isnumeric(options_.parallel) || ceil(size(varlist,1)/MaxNumberOfPlotsPerFigure)<4, - fout = pm3_core(localVars,1,nvar,0); - - % Parallel execution! -else + fout = pm3_core(localVars,1,nvar,0); + + % Parallel execution! + else globalVars = struct('M_',M_, ... - 'options_', options_, ... - 'oo_', oo_); - [fout, nBlockPerCPU, totCPU] = masterParallel(options_.parallel, 1, nvar, [],'pm3_core', localVars,globalVars, options_.parallel_info); + 'options_', options_, ... + 'oo_', oo_); + [fout, nBlockPerCPU, totCPU] = masterParallel(options_.parallel, 1, nvar, [],'pm3_core', localVars,globalVars, options_.parallel_info); + end +else + % For the time being in Octave enviroment the pm3.m is executed only in + % serial modality, to avoid problem with the plots. + + fout = pm3_core(localVars,1,nvar,0); end