/[xulu]/trunk/src/appl/parallel/spmd/SPMDServerController.java
ViewVC logotype

Annotation of /trunk/src/appl/parallel/spmd/SPMDServerController.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide annotations)
Wed Feb 25 11:54:01 2009 UTC (15 years, 9 months ago) by mojays
File size: 7424 byte(s)
First Commit, corresponds to Revision 1008 of Wikisquare-SVN 
1 mojays 2 package appl.parallel.spmd;
2    
3     import java.awt.Rectangle;
4     import java.rmi.RemoteException;
5     import java.util.HashMap;
6     import java.util.Vector;
7    
8     import org.apache.log4j.LogManager;
9     import org.apache.log4j.Logger;
10    
11     import appl.parallel.ComputingResource;
12     import appl.parallel.client.DataServer;
13     import appl.parallel.data.WritableGridArrayPartition;
14     import appl.parallel.model.AbstractParallelStepModel;
15     import appl.parallel.server.PartitionDataManager;
16     import appl.parallel.spmd.split.DataPartition;
17     import appl.parallel.spmd.split.PartitionInfo;
18     import appl.parallel.spmd.split.SplitMap;
19     import appl.parallel.spmd.split.SplittableResource;
20    
21     /**
22     * This class controls all the parallelization action on the server side and is
23     * the counterpart to {@link SPMDClientController}. It is accessed by the model
24     * developer by retrieving the {@link SPMDServerInterface} from a
25     * {@link SPMDTask}.
26     *
27     * @author Dominik Appl
28     */
29     public class SPMDServerController implements SPMDServerInterface {
30    
31     private Logger LOG = LogManager.getLogger(this.getClass().getName());
32    
33     PartitionDataManager dataManager;
34    
35     private Rectangle localCalculationBounds;
36    
37     private final SplitMap referenceSplitMap;
38    
39     /**
40     * the partition position (used for splitmaps)
41     */
42     protected final int mapPosition;
43    
44     /**
45     * Creates a new instance
46     * @param dataManager the partition data server responsible for managing the data on the server
47     * @param referenceResouceID the id of the reference resource
48     */
49     public SPMDServerController(PartitionDataManager dataManager,
50     int referenceResouceID) {
51     this.dataManager = dataManager;
52     // if there are any partitions the referenceID should be != -1
53     if (referenceResouceID != -1) {
54     referenceSplitMap = dataManager.getInfo(referenceResouceID)
55     .getSplitMap();
56     mapPosition = dataManager.getInfo(referenceResouceID)
57     .getSplitMapPos();
58     } else {
59     referenceSplitMap = null;
60     mapPosition = 0;
61     }
62     //setting the calculation bounds to the default area
63     localCalculationBounds=referenceSplitMap.getLocalCalculationBounds(mapPosition);
64     }
65    
66     /**
67     * This method sets new calculation bounds. This is used to divide the rasters for
68     * parallel computation on one machine (using multiple cpu's or cpu cores)
69     *
70     * @param newBounds the new calculation bounds
71     */
72     public void setLocalCalculationBounds(Rectangle newBounds){
73     localCalculationBounds = newBounds;
74     }
75    
76     /* (non-Javadoc)
77     * @see appl.parallel.spmd.SPMDServerInterface#getBaseParameter(java.lang.String)
78     */
79     public Object getBaseParameter(String parameterName) {
80     Object returnValue = dataManager.getBaseParameter(parameterName);
81     if(returnValue==null)
82     LOG.warn("No value for parameter '" + parameterName + "' found or value was null" );
83     return returnValue;
84     }
85    
86    
87    
88    
89     /* (non-Javadoc)
90     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalculationBounds(appl.parallel.spmd.split.DataPartition)
91     */
92     public Rectangle getLocalCalculationBounds(DataPartition partition) {
93     return dataManager.getInfo(partition.getRootID()).getSplitMap()
94     .getLocalCalculationBounds(mapPosition);
95     }
96    
97     /* (non-Javadoc)
98     * @see appl.parallel.spmd.SPMDServerInterface#getLocalBounds(appl.parallel.spmd.split.DataPartition)
99     */
100     public Rectangle getLocalBounds(DataPartition partition) {
101     PartitionInfo info = dataManager.getInfo(partition.getRootID());
102     return info.getSplitMap().getLocalBounds(mapPosition);
103     }
104    
105     /* (non-Javadoc)
106     * @see appl.parallel.spmd.SPMDServerInterface#getGlobalBounds(appl.parallel.spmd.split.DataPartition)
107     */
108     public Rectangle getGlobalBounds(DataPartition partition) {
109     PartitionInfo info = dataManager.getInfo(partition.getRootID());
110     return info.getSplitMap().getGlobalBounds();
111     }
112    
113     /* (non-Javadoc)
114     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalculationBounds()
115     */
116     public Rectangle getLocalCalculationBounds() {
117     return localCalculationBounds;
118     }
119    
120     /* (non-Javadoc)
121     * @see appl.parallel.spmd.SPMDServerInterface#getLocalBounds()
122     */
123     public Rectangle getLocalBounds() {
124     return referenceSplitMap.getLocalBounds(mapPosition);
125     }
126    
127     /* (non-Javadoc)
128     * @see appl.parallel.spmd.SPMDServerInterface#getPartition(java.lang.String)
129     */
130     public DataPartition getPartition(String name) {
131     DataPartition partition = dataManager.getData(name);
132     if (partition == null)
133     LOG.error("ERROR: The Partition with the name '" + name
134     + "' was not found or was null");
135     return partition;
136     }
137    
138     /* (non-Javadoc)
139     * @see appl.parallel.spmd.SPMDServerInterface#getMultiPartition(java.lang.String)
140     */
141     public DataPartition[] getMultiPartition(String name) {
142     DataPartition[] partitions = dataManager.getMultiData(name);
143     if (partitions == null)
144     LOG.error("ERROR: The Partition with the name '" + name
145     + "' was not found or was null");
146     // if(partitions.length>0)
147     // if(partitions[0] instanceof WritableGridArrayPartition.Float){
148     // WritableGridArrayPartition[] wgPartitions = new WritableGridArrayPartition[partitions.length];
149     // System.arraycopy(partitions, 0, wgPartitions, 0, partitions.length);
150     // return (DataPartition[]) wgPartitions;
151     // }
152     return partitions;
153     }
154    
155     /* (non-Javadoc)
156     * @see appl.parallel.spmd.SPMDServerInterface#getMultiData(java.lang.String)
157     */
158     public MultiDataObject getMultiData(String name){
159     MultiDataObject multiDataObject=null;
160     try {
161     multiDataObject = dataManager.getMultiDataObject(name);
162     if(multiDataObject==null)
163     LOG.warn("No Multidataobject with name '" + name + "' found. Returning null!");
164     } catch (RemoteException e) {
165     // Should never be be called (local call)
166     e.printStackTrace();
167     }
168     return multiDataObject;
169     }
170    
171     /* (non-Javadoc)
172     * @see appl.parallel.spmd.SPMDServerInterface#getMultiPartition(java.lang.String, int)
173     */
174     public DataPartition getMultiPartition(String name, int idx) {
175     DataPartition partition = dataManager.getMultiData(name,idx);
176     if (partition == null)
177     LOG.error("ERROR: The Partition with the name '" + name
178     + "' was not found or was null");
179     return partition;
180     }
181    
182     /* (non-Javadoc)
183     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalcMinX()
184     */
185     public int getLocalCalcMinX() {
186     return (int) getLocalCalculationBounds().getX();
187     }
188    
189     /* (non-Javadoc)
190     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalcMinY()
191     */
192     public int getLocalCalcMinY() {
193     return (int) getLocalCalculationBounds().getY();
194     }
195    
196     /* (non-Javadoc)
197     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalcMaxX()
198     */
199     public int getLocalCalcMaxX() {
200     return (int) (getLocalCalculationBounds().getX()
201     + getLocalCalculationBounds().getWidth() - 1);
202     }
203    
204     /* (non-Javadoc)
205     * @see appl.parallel.spmd.SPMDServerInterface#getLocalCalcMaxY()
206     */
207     public int getLocalCalcMaxY() {
208     return (int) (getLocalCalculationBounds().getY()
209     + getLocalCalculationBounds().getHeight() - 1);
210     }
211    
212     /* (non-Javadoc)
213     * @see appl.parallel.spmd.SPMDServerInterface#destroyData(java.lang.Object)
214     */
215     public void destroyPartition(String name) {
216     dataManager.removeData(name);
217     }
218    
219     public void destroyMultiPartition(String name,int idx)
220     {
221     MultiDataObject multiData = this.getMultiData(name);
222     multiData.deleteElement(idx);
223     }
224    
225     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26