mailr3276 - in /branches/multi_processor: ./ multi/


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by garyt on April 29, 2007 - 23:21:
Author: varioustoxins
Date: Sun Apr 29 23:20:42 2007
New Revision: 3276

URL: http://svn.gna.org/viewcvs/relax?rev=3276&view=rev
Log:
modifications to make the multi hierachy indepndant of relax; multi can
now be used to run other multiprocessor tasks (uni processor and mpi
work)

Modified:
    branches/multi_processor/multi/commands.py
    branches/multi_processor/multi/mpi4py_processor.py
    branches/multi_processor/multi/processor.py
    branches/multi_processor/multi/uni_processor.py
    branches/multi_processor/relax

Modified: branches/multi_processor/multi/commands.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor/multi/commands.py?rev=3276&r1=3275&r2=3276&view=diff
==============================================================================
--- branches/multi_processor/multi/commands.py (original)
+++ branches/multi_processor/multi/commands.py Sun Apr 29 23:20:42 2007
@@ -110,7 +110,7 @@
         self.hc=hc
         self.warning=warning
 
-    def run(self,relax,processor,memo):
+    def run(self,processor,memo):
         m_f=memo.model_free
         m_f.iter_count = 0
         m_f.f_count = 0
@@ -457,7 +457,7 @@
         self.hc=hc
         self.warning=warning
 
-    def run(self,relax,processor,memo):
+    def run(self,processor,memo):
 
         # FIXME: Check against full result
         # FIXME: names not consistent in memo

Modified: branches/multi_processor/multi/mpi4py_processor.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor/multi/mpi4py_processor.py?rev=3276&r1=3275&r2=3276&view=diff
==============================================================================
--- branches/multi_processor/multi/mpi4py_processor.py (original)
+++ branches/multi_processor/multi/mpi4py_processor.py Sun Apr 29 23:20:42 
2007
@@ -126,7 +126,7 @@
         self.result_commands=result_commands
 
 
-    def run(self,relax,processor,batched_memo):
+    def run(self,processor,batched_memo):
 
         processor.assert_on_master()
         if batched_memo != None:
@@ -198,8 +198,8 @@
 
 
 
-    def __init__(self,relax_instance, chunkyness=1):
-        super(Mpi4py_processor,self).__init__(relax_instance = 
relax_instance, chunkyness=chunkyness)
+    def __init__(self,callback):
+        super(Mpi4py_processor,self).__init__(callback=callback)
 
 
 
@@ -315,7 +315,7 @@
                 memo=None
                 if result.memo_id != None:
                     memo=self.memo_map[result.memo_id]
-                result.run(self.relax_instance,self,memo)
+                result.run(self,memo)
                 if result.memo_id != None and result.completed:
                     del self.memo_map[result.memo_id]
 
@@ -386,13 +386,12 @@
         if self.on_master():
             try:
                 self.pre_run()
-                self.relax_instance.run()
+                self.callback.init_master(self)
                 self.post_run()
             except Exception,e:
-                # check me could be moved outside
-                #print e
-                traceback.print_exc(file=sys.stdout)
-                self.abort()
+                self.callback.handle_exception(self,e)
+
+
 
             # note this a modified exit that kills all MPI processors
             sys.exit()

Modified: branches/multi_processor/multi/processor.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor/multi/processor.py?rev=3276&r1=3275&r2=3276&view=diff
==============================================================================
--- branches/multi_processor/multi/processor.py (original)
+++ branches/multi_processor/multi/processor.py Sun Apr 29 23:20:42 2007
@@ -44,6 +44,20 @@
             print e
             break
 
+class Application_callback(object):
+
+    def __init__(self,master):
+        self.master=master
+        self.init_master = self.default_init_master
+        self.handle_error= self.default_handle_error
+
+    def default_init_master(self,processor):
+        self.master.run()
+
+    def default_handle_error(self,processor,exception):
+        traceback.print_exc(file=sys.stdout)
+        processor.abort()
+
 
 def raise_unimplimented(method):
     raise NotImplementedError("Attempt to invoke unimplemented abstract 
method %s") % method.__name__
@@ -56,11 +70,11 @@
 class Processor(object):
 
     #FIXME: remname chunk* grain*
-    def __init__(self,relax_instance,chunkyness=1):
+    def __init__(self,callback):
+        self.callback=callback
+        self.chunkyness=1
         self.pre_queue_command=None
         self.post_queue_command=None
-        self.chunkyness = chunkyness
-        self.relax_instance = relax_instance
         self.NULL_RESULT=Null_result_command(processor=self)
 
     def add_to_queue(self,command,memo=None):
@@ -169,7 +183,7 @@
         self.memo_id=memo_id
 
 
-    def run(self,relax,processor,memo):
+    def run(self,processor,memo):
         pass
 
 class Null_result_command(Result_command):
@@ -183,7 +197,7 @@
         
super(Result_exception,self).__init__(processor=processor,completed=completed)
         self.exception=exception
 
-    def run(self,relax,processor,memos):
+    def run(self,processor,memos):
         raise self.exception
 
 

Modified: branches/multi_processor/multi/uni_processor.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor/multi/uni_processor.py?rev=3276&r1=3275&r2=3276&view=diff
==============================================================================
--- branches/multi_processor/multi/uni_processor.py (original)
+++ branches/multi_processor/multi/uni_processor.py Sun Apr 29 23:20:42 2007
@@ -71,8 +71,9 @@
 class Uni_processor(Processor):
 
 
-    def __init__(self,relax_instance):
-        self.relax_instance= relax_instance
+    def __init__(self,callback):
+        super(Uni_processor,self).__init__(callback=callback)
+
 
         self.command_queue=[]
         self.memo_map={}
@@ -103,9 +104,11 @@
 #        start_time =  time.clock()
         try:
             self.pre_run()
-            self.relax_instance.run()
-        finally:
+            self.callback.init_master(self)
             self.post_run()
+        except Exception,e:
+            self.callback.handle_exception(self,e)
+
 #        end_time = time.clock()
 #        time_diff= end_time - start_time
 #        time_delta = datetime.timedelta(seconds=time_diff)
@@ -148,7 +151,7 @@
             memo=None
             if result.memo_id != None:
                 memo=self.memo_map[result.memo_id]
-            result.run(self.relax_instance,self,memo)
+            result.run(self,memo)
             if result.memo_id != None and result.completed:
                 del self.memo_map[result.memo_id]
 

Modified: branches/multi_processor/relax
URL: 
http://svn.gna.org/viewcvs/relax/branches/multi_processor/relax?rev=3276&r1=3275&r2=3276&view=diff
==============================================================================
--- branches/multi_processor/relax (original)
+++ branches/multi_processor/relax Sun Apr 29 23:20:42 2007
@@ -1,4 +1,5 @@
 #! /usr/bin/env python
+from numpy.f2py.cfuncs import callbacks
 
 
###############################################################################
 #                                                                            
 #
@@ -43,6 +44,7 @@
 from string import split, strip
 import sys
 from warnings import warn
+from multi.processor import Application_callback
 
 # Numeric.
 try:
@@ -560,7 +562,7 @@
 #FIXME error checking for if module require not found
 #FIXME move module loading to processor
 #FIXME module loading code needs to be in a util module
-def load_multiprocessor(relax_instance):
+def load_multiprocessor(callback):
 
     processor_name = relax_instance.multiprocessor_type + '_processor'
     class_name= processor_name[0].upper() + processor_name[1:]
@@ -575,7 +577,7 @@
     else:
         raise RelaxError("can't load class %s from module %s" % 
(class_name,module_path))
 
-    object = clazz(relax_instance)
+    object = clazz(callback)
     relax_instance.processor =  object
     return object
 
@@ -590,7 +592,8 @@
     if not profile_flag:
         relax_instance = Relax()
         mode=relax_instance.arguments(sys.argv[1:])
-        multi_processor = load_multiprocessor(relax_instance)
+        callbacks =  Application_callback(master=relax_instance)
+        multi_processor = load_multiprocessor(callbacks)
         multi_processor.run()
 
     else:




Related Messages


Powered by MHonArc, Updated Mon Apr 30 16:00:06 2007