首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开始使用MP进行SAS并行处理

开始使用MP进行SAS并行处理
EN

Stack Overflow用户
提问于 2015-06-01 06:49:01
回答 2查看 541关注 0票数 2

我正在努力理解MPConnect,以及如何将它用于并行处理。

作为一个简单的例子,我开始了一个会话,打印"Hello!“永远和另一个印着“再见的世界!”我说“等待任何”和"rget“,我希望”再见世界!“因为“你好世界!”在“再见世界”的时候将永远继续下去!已经结束了。不幸的是,这不起作用。

通常,我很难从远程提交的任务中检索输出。

代码语言:javascript
复制
option cpucount=4 sascmd="!sascmd" autosignon;

rsubmit task1 wait=no;

    data _null_;
        do while(1);
        put "Hello World!";
        end;

    run;

endrsubmit;


rsubmit task2 wait=no;

    data _null_;
        put "Bye World!";
    run;

endrsubmit;


waitfor _any_;
rget;

signoff task1;
signoff task2;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 09:41:48

问题似乎是,当同步进程运行时,它们就完全断开了。尽管您只是在等待快速的task2完成之后才继续:

代码语言:javascript
复制
rsubmit task2 wait=no;
    data _null_;
        put "Bye World!";
    run;
endrsubmit;

SAS也需要task1来完成最终的rget

代码语言:javascript
复制
rsubmit task1 wait=no;
    data _null_;
        do while(1);
        put "Hello World!";
        end;
    run;
endrsubmit;

我认为所发生的事情是,SAS task2满足waitfor _any_条件,并且能够在task2之后进行处理。但是,rget需要每个(已完成)进程的最终日志文件,然后才能将它们合并到客户端会话日志窗口中。

查看SAS文档这里的详细信息部分。

编辑:

更多地,您可以使用统一的libname测试它们之间的连接(每个进程都有自己独特的工作libname,这样它们就不会相互冲突):

根据客户端机器上的需要分配libname和选项:

代码语言:javascript
复制
libname testlib 'C:/test' ;
option cpucount=4 sascmd="!sascmd" autosignon;

定义两个并行运行的进程:

代码语言:javascript
复制
* Process 1 ;
rsubmit task1 wait=no;
libname testlib 'C:/test' ;
data testlib.test1 ;
  do i=1 to 1000 ;
    do j=1 to 1000;
      output ;
    end ;
  end ;
run ;
endrsubmit;

* Process 2 ;
rsubmit task2 wait=no;
libname testlib 'C:/test' ;
data testlib.test2 ;
  do i=1 to 1000 ;
    output ;
  end ;
run ;
endrsubmit;

然后,您可以在process1仍在运行时运行以下代码,但它将能够访问process2的输出数据集。

代码语言:javascript
复制
* Wait for either of the above processes and the process remaining code;
waitfor _any_;

proc sql noprint ;
  select sum(i)
  into :result
  from testlib.test2 
;quit ;

%put *** SUM OF TEST2 IS: &result *** ;
票数 2
EN

Stack Overflow用户

发布于 2015-06-02 15:00:09

问题是,正如您所说的,TASK1将永远运行。具体来说,这就是声明。

代码语言:javascript
复制
signoff task1;

导致了你的特殊问题。正如你对提交过程说的,等待无限期的过程结束,然后签署.

如果你有

代码语言:javascript
复制
signoff task2;
killtask task1;

您将看到您确实使用RGET从TASK2收集日志信息( SIGNOFF语句也将在不使用RGET的情况下收集日志信息)。在本例中,来自TASK1的信息丢失了,但是使用前面提到的选项(LOG="task1.log"),您可以单独恢复信息。

在这样的情况下,RGET语句不会等待一切完成。它将从请求时已完成的任何任务中收集它所能收集的内容,除非您特别请求RGET TASK1,在这种情况下,它将暂停。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30567288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档