2 * simgrid.msg.Task.java 1.00 07/05/01
4 * Copyright 2006,2007 Martin Quinson, Malek Cherier
7 * This program is free software; you can redistribute
8 * it and/or modify it under the terms of the license
9 *(GNU LGPL) which comes with this package.
15 * Since most scheduling algorithms rely on a concept of
16 * task that can be either computed locally or transferred
17 * on another processor, it seems to be the right level of
18 * abstraction for our purposes. A task may then be defined
19 * by a computing amount, a message size and some private
20 * data. To transfer a task you use an instance of the class
21 * Channel identified by an number.
23 * @author Abdelmalek Cherier
24 * @author Martin Quinson
30 * This attribute represents a bind between a java task object and
31 * a native task. Even if this attribute is public you must never
32 * access to it. It is set automaticatly during the build of the object.
37 /* Default constructor (disabled) */
43 * Construct an new task with the specified processing amount and amount
46 * @param name Task's name
48 * @param computeDuration A value of the processing amount (in flop) needed to process the task.
49 * If 0, then it cannot be executed with the execute() method.
50 * This value has to be >= 0.
52 * @param messageSize A value of amount of data (in bytes) needed to transfert this task.
53 * If 0, then it cannot be transfered with the get() and put() methods.
54 * This value has to be >= 0.
56 * @exception JniException if the binding mecanism fails.
57 */ public Task(String name, double computeDuration,
58 double messageSize) throws JniException {
59 MsgNative.taskCreate(this, name, computeDuration, messageSize);
62 * Construct an new parallel task with the specified processing amount and amount for each host
65 * @param name The name of the parallel task.
66 * @param hosts The list of hosts implied by the parallel task.
67 * @param computeDurations The amount of operations to be performed by each host of \a hosts.
68 * @param messageSizes A matrix describing the amount of data to exchange between hosts.
70 * @exception JniException if the binding mecanism fails.
71 */ public Task(String name, Host[]hosts, double[]computeDurations,
72 double[]messageSizes) throws JniException {
73 MsgNative.parallelTaskCreate(this, name, hosts, computeDurations,
77 * * Getters / Setters * *
79 * This method gets the name of a task.
81 * @return The name of the task.
83 * @exception JniException if the binding mecanism fails.
84 * @exception InvalidTaskException is the specified task is not valid. A task
85 * is invalid if it is not binded with a native task.
86 */ public String getName() throws JniException {
87 return MsgNative.taskGetName(this);
90 * This method gets the sender of the task.
92 * @return The sender of the task.
94 * @exception JniException if the binding mecanism fails.
96 */ Process getSender() throws JniException {
97 return MsgNative.taskGetSender(this);
100 * This method gets the source of the task.
102 * @return The source of the task.
104 * @exception JniException if the binding mecanism fails.
105 */ public Host getSource() throws JniException, NativeException {
106 return MsgNative.taskGetSource(this);
109 * This method gets the computing amount of the task.
111 * @return The computing amount of the task.
113 * @exception JniException if the binding mecanism fails.
114 */ public double getComputeDuration() throws JniException {
115 return MsgNative.taskGetComputeDuration(this);
118 * This method gets the remaining computation.
120 * @return The remaining duration.
122 * @exception JniException if the binding mecanism fails.
123 */ public double getRemainingDuration() throws JniException {
124 return MsgNative.taskGetRemainingDuration(this);
127 * This method sets the priority of the computation of the task.
128 * The priority doesn't affect the transfert rate. For example a
129 * priority of 2 will make the task receive two times more cpu than
132 * @param priority The new priority of the task.
134 * @exception JniException is the specified task is not valid (ie, not binded to a native task)
136 public void setPriority(double priority) throws JniException {
137 MsgNative.taskSetPriority(this, priority);
140 * * Communication-related * *
144 * Retrieves next task on given channel of local host
146 * @exception JniException if the binding mecanism fails.
147 * @exception NativeException if the retrival fails.
149 public static Task get(int channel) throws JniException, NativeException {
150 return MsgNative.taskGet(channel, -1.0, null);
153 * Retrieves next task on given channel of local host (wait at most \a timeout seconds)
155 * @exception JniException if the binding mecanism fails.
156 * @exception NativeException if the retrival fails.
158 public static Task get(int channel, double timeout) throws JniException,
160 return MsgNative.taskGet(channel, timeout, null);
163 * Retrieves next task from given host on given channel of local host
165 * @exception JniException if the binding mecanism fails.
166 * @exception NativeException if the retrival fails.
168 public static Task get(int channel, Host host) throws JniException,
170 return MsgNative.taskGet(channel, -1, host);
173 * Retrieves next task from given host on given channel of local host (wait at most \a timeout seconds)
175 * @exception JniException if the binding mecanism fails.
176 * @exception NativeException if the retrival fails.
177 */ public static Task get(int channel, double timeout,
178 Host host) throws JniException, NativeException {
179 return MsgNative.taskGet(channel, timeout, host);
183 * Probes whether there is a waiting task on the given channel of local host
185 * @exception JniException if the binding mecanism fails.
186 * @exception NativeException if the retrival fails.
187 */ public static boolean probe(int channel) throws JniException {
188 return MsgNative.taskProbe(channel);
191 * Counts tasks waiting on the given \a channel of local host and sent by given \a host
193 * @exception JniException if the binding mecanism fails.
194 */ public static int probe(int channel, Host host) throws JniException {
195 return MsgNative.taskProbeHost(channel, host);
199 * * Computation-related * *
202 * This method execute a task on the location on which the
203 * process is running.
205 * @exception JniException if the binding mecanism fails.
206 * @exception NativeException if the cancelation failed.
208 public void execute() throws JniException, NativeException {
209 MsgNative.taskExecute(this);
212 * This method cancels a task.
214 * @exception JniException if the binding mecanism fails.
215 * @exception NativeException if the cancelation failed.
216 */ public void cancel() throws JniException, NativeException {
217 MsgNative.taskCancel(this);
220 * This method deletes a task.
222 * @exception InvalidTaskException is the specified task is not valid. A task
223 * is invalid if it is not binded with a native task.
224 * MsgException if the destruction failed.
225 */ protected void finalize() throws JniException, NativeException {
227 MsgNative.taskDestroy(this);
231 * Send the task on the mailbox identified by the default alias (defaultAlias = "currentHostName:CurrentProcessName")
233 * @exception JniException if the binding mecanism fails.
234 * @exception NativeException if the retrival fails.
236 public void send() throws JniException,NativeException {
238 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
240 MsgNative.taskSend(alias, this, -1);
244 * Send the task on the mailbox identified by the specified alias
246 * @exception JniException if the binding mecanism fails.
247 * @exception NativeException if the retrival fails.
249 public void send(String alias) throws JniException,NativeException {
250 MsgNative.taskSend(alias, this, -1);
254 * Send the task on the mailbox identified by the default alias (wait at most \a timeout seconds)
256 * @exception JniException if the binding mecanism fails.
257 * @exception NativeException if the retrival fails.
259 public void send(double timeout) throws JniException,NativeException {
260 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
261 MsgNative.taskSend(alias, this, timeout);
265 * Send the task on the mailbox identified by the specified alias (wait at most \a timeout seconds)
267 * @exception JniException if the binding mecanism fails.
268 * @exception NativeException if the retrival fails.
270 public void send(String alias, double timeout) throws JniException,NativeException {
271 MsgNative.taskSend(alias, this, timeout);
276 * Send the task on the mailbox identified by the default alias (capping the emision rate to \a maxrate)
278 * @exception JniException if the binding mecanism fails.
279 * @exception NativeException if the retrival fails.
281 public void sendBounded(double maxrate) throws JniException,NativeException {
282 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
283 MsgNative.taskSendBounded(alias, this, maxrate);
287 * Send the task on the mailbox identified by the specified alias (capping the emision rate to \a maxrate)
289 * @exception JniException if the binding mecanism fails.
290 * @exception NativeException if the retrival fails.
292 public void sendBounded(String alias, double maxrate) throws JniException,NativeException {
293 MsgNative.taskSendBounded(alias, this, maxrate);
297 * Retrieves next task from the mailbox identified by the default alias (defaultAlias = "currentHostName:CurrentProcessName")
299 * @exception JniException if the binding mecanism fails.
300 * @exception NativeException if the retrival fails.
302 public static Task receive() throws JniException, NativeException {
303 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
304 return MsgNative.taskReceive(alias, -1.0, null);
308 * Retrieves next task from the mailbox identified by the specified alias
310 * @exception JniException if the binding mecanism fails.
311 * @exception NativeException if the retrival fails.
314 public static Task receive(String alias) throws JniException, NativeException {
315 return MsgNative.taskReceive(alias, -1.0, null);
319 * Retrieves next task on the mailbox identified by the specified alias (wait at most \a timeout seconds)
321 * @exception JniException if the binding mecanism fails.
322 * @exception NativeException if the retrival fails.
324 public static Task receive(String alias, double timeout) throws JniException, NativeException {
325 return MsgNative.taskReceive(alias, timeout, null);
329 * Retrieves next task sended by a given host on the mailbox identified by the specified alias
331 * @exception JniException if the binding mecanism fails.
332 * @exception NativeException if the retrival fails.
335 public static Task receive(String alias, Host host) throws JniException, NativeException {
336 return MsgNative.taskReceive(alias, -1.0, host);
340 * Retrieves next task sended by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
342 * @exception JniException if the binding mecanism fails.
343 * @exception NativeException if the retrival fails.
345 public static Task receive(String alias, double timeout, Host host) throws JniException, NativeException {
346 return MsgNative.taskReceive(alias, timeout, host);
350 * Listen whether there is a waiting task on the mailbox identified by the default alias of local host
352 * @exception JniException if the binding mecanism fails.
353 * @exception NativeException if the retrival fails.
355 public static boolean listen() throws JniException, NativeException {
356 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
358 return MsgNative.taskListen(alias);
362 * Test whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
364 * @exception JniException if the binding mecanism fails.
365 * @exception NativeException if the retrival fails.
367 public static int listenFrom(String alias) throws JniException, NativeException {
368 return MsgNative.taskListenFrom(alias);
372 * Test whether there is a pending communication on the mailbox identified by the default alias, of the current host, and who sent it
374 * @exception JniException if the binding mecanism fails.
375 * @exception NativeException if the retrival fails.
377 public static int listenFrom() throws JniException, NativeException {
378 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
380 return MsgNative.taskListenFrom(alias);
384 * Listen whether there is a waiting task on the mailbox identified by the specified alias
386 * @exception JniException if the binding mecanism fails.
387 * @exception NativeException if the retrival fails.
389 public static boolean listen(String alias) throws JniException, NativeException {
390 return MsgNative.taskListen(alias);
394 * Counts the number of tasks waiting to be received on the \a mailbox identified by the specified alias and sended by the current host.
396 * @exception JniException if the binding mecanism fails.
397 * @exception NativeException if the retrival fails.
399 public static int listenFromHost(Host host) throws JniException, NativeException {
400 String alias = Host.currentHost().getName() + ":" + Process.currentProcess().msgName();
401 return MsgNative.taskListenFromHost(alias,host);
405 * Counts the number of tasks waiting to be received on the \a mailbox identified by the specified alia and sended by the specified \a host.
407 * @exception JniException if the binding mecanism fails.
408 * @exception NativeException if the retrival fails.
410 public static int listenFromHost(String alias, Host host) throws JniException, NativeException {
411 return MsgNative.taskListenFromHost(alias, host);