Artifact d8f0a1cc48918038ab7bf078a44145c45f5a570365771866adedb8b2d3266a5a:
- Executable file
r38/packages/crack/crpvm.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 4911) [annotate] [blame] [check-ins using] [more...]
%********************************************************************** module crackpvm$ %********************************************************************** % Procedures to support parallel computing on PVM % Authors: Thomas Wolf and Winfried Neun 2002 symbolic procedure pvm_activate$ if getd('pvm_mytid) then <<pvm_able:=t;current_dir:=pwd()>> else <<pvm_able:=nil;current_dir:=nil>>$ symbolic procedure pvm_active$ if pvm_able then t else << terpri()$write"PVM is either not active on this computer"$ terpri()$write"or interactively switched off. Try 'ep'."$ terpri()$ nil >>$ symbolic procedure pvm_try$ if pvm_able and (read_proczaehler()<24) then t else nil$ %symbolic procedure inc_session$ %begin scalar sess$ % setq(sess,bldmsg("%w%w",session_,"processes")); % lock sess; % in sess; % backup_:=add1 backup_; % out sess; % write "off echo$backup_:=",backup_,"$ end$"$ % terpri()$ % shut sess; % unlock sess; %end$ symbolic procedure read_proczaehler$ begin scalar zae,zaef$ zaef:=open("/home/twolf/zaehler",'input); zae:=channelread(zaef); close(zaef); return zae end$ symbolic procedure add_process(processes,pdes,forg)$ begin scalar s,ss,h$ %----- passing on the current status ss:=level_string(session_)$ setq(h,bldmsg("%w%w%w",current_dir,ss,"tmp")); backup_to_file(pdes,forg,h); !*iconic:=nil$ %t; %not !*batch_mode; % =t --> only an icon opens, =nil --> a window opens %----- start new process s:=remote_process(""); processes:=cons(s,processes); %----- update the counting of processes system "/home/twolf/proczaehler plus"$ %----- print the new level remote_write(s,{'list,"Process id: ",s," level: ",ss}); terpri()$write"A process with id no ",s," has been started."$ %----- change directory remote_call!*(s,'cd,{current_dir},0)$ %----- load crack remote_call!*(s,'load_package,{{"~/red/src5/crack"}},0)$ %----- specify what crack should load (and do) remote_call!*(s,'set,{'old_history,{'rb,h}},0); %----- start Crack remote_call(s,'crackshell,{'list},0)$ %----- if interactive then not instant closure of window %----- when computation is finished to inspect the result %----- so wait for 1000 sec. if null !*iconic then remote_call!*(s,'system,{"sleep 1000"},0); %----- close the REDUCE session when crackshell() finished remote_call!*(s,'system,{"/home/twolf/proczaehler minus"},0)$ remote_call!*(s,'system,{bldmsg("%w%w","rm ",h)},0)$ remote_call!*(s,'exitlisp,{'list},0)$ return processes end$ symbolic procedure drop_process(processes)$ begin scalar s$ terpri()$write"The following processes are active: "$ listprint(processes)$ terpri()$write"To kill ALL remote processes that have been"$ terpri()$write"generated by this process enter -1,"$ terpri()$write"to kill a single process enter its process id: "$ promptstring!*:=""$ s:=termread()$ if s=-1 then << processes:=nil; system "/home/twolf/proczaehler init" >> else << delete(s,processes); system "/home/twolf/proczaehler minus" >>$ remote_kill(s); return processes end$ symbolic procedure remote_crackmain(pdes,forg)$ begin scalar h,s,ss; %BUG? Some global variables have to be passed on even if they %should not be read when returning!? %----- passing on the current status ss:=level_string(session_)$ setq(h,bldmsg("%w%w%w",current_dir,ss,"tmp")); backup_to_file(pdes,forg,h); % !*iconic:=nil$ %t; %not !*batch_mode; % =t --> only an icon opens, =nil --> a window opens %----- start new process s:=remote_process(""); %----- update the counting of processes system "/home/twolf/proczaehler plus"$ %----- print the new level remote_write(s,{'list,"Process id: ",s," level: ",ss}); %----- change directory remote_call!*(s,'cd,{current_dir},0)$ %----- load crack remote_call!*(s,'load_package,{{"~/red/src5/crack"}},0)$ %----- specify what crack should load (and do) remote_call!*(s,'set,{'old_history,{'rb,h}},0); %----- start Crack remote_call(s,'crackshell,{'list},0)$ %----- if interactive then not instant closure of window %----- when computation is finished to inspect the result %----- so wait for 1000 sec. if null !*iconic then remote_call!*(s,'system,{"sleep 1000"},0); %----- close the REDUCE session when crackshell() finished remote_call!*(s,'system,{"/home/twolf/proczaehler minus"},0)$ remote_call!*(s,'system,{bldmsg("%w%w","rm ",h)},0)$ remote_call!*(s,'exitlisp,{},0)$ %----- changes done at the end of crackmain(), e.g. delete property lists level_:=cdr level_; for each s in pdes do drop_pde(s,pdes,nil)$ for each s in forg do if pairp s then setprop(cadr s,nil) else setprop( s,nil)$ end$ endmodule$ end$