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 @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 The new priority of the task.
134 * @exception InvalidTaskException is the specified task is not valid. A task
135 * is invalid if it is not binded with a native task.
136 */ public void setPrirority(double priority) throws JniException {
137 MsgNative.taskSetPriority(this, priority);
140 * * Communication-related * *
142 * Retrieves next task on given channel of local host
144 * @exception JniException if the binding mecanism fails.
145 * @exception NativeException if the retrival fails.
147 public static Task get(int channel) throws JniException, NativeException {
148 return MsgNative.taskGet(channel, -1.0, null);
151 * Retrieves next task on given channel of local host (wait at most #timeout seconds)
153 * @exception JniException if the binding mecanism fails.
154 * @exception NativeException if the retrival fails.
156 public static Task get(int channel, double timeout) throws JniException,
158 return MsgNative.taskGet(channel, timeout, null);
161 * Retrieves next task from given host on given channel of local host
163 * @exception JniException if the binding mecanism fails.
164 * @exception NativeException if the retrival fails.
166 public static Task get(int channel, Host host) throws JniException,
168 return MsgNative.taskGet(channel, -1, host);
171 * Retrieves next task from given host on given channel of local host (wait at most #timeout seconds)
173 * @exception JniException if the binding mecanism fails.
174 * @exception NativeException if the retrival fails.
175 */ public static Task get(int channel, double timeout,
176 Host host) throws JniException, NativeException {
177 return MsgNative.taskGet(channel, timeout, host);
180 * Probes whether there is a waiting task on the given channel of local host
182 * @exception JniException if the binding mecanism fails.
183 * @exception NativeException if the retrival fails.
184 */ public static boolean probe(int channel) throws JniException {
185 return MsgNative.taskProbe(channel);
188 * Counts tasks waiting on the given #channel of local host and sent by given #host
190 * @exception JniException if the binding mecanism fails.
191 */ public static int probe(int channel, Host host) throws JniException {
192 return MsgNative.taskProbeHost(channel, host);
195 * * Computation-related * *
197 * This method execute a task on the location on which the
198 * process is running.
200 * @exception JniException if the binding mecanism fails.
201 * @exception NativeException if the cancelation failed.
202 */ public void execute() throws JniException, NativeException {
203 MsgNative.taskExecute(this);
206 * This method cancels a task.
208 * @exception JniException if the binding mecanism fails.
209 * @exception NativeException if the cancelation failed.
210 */ public void cancel() throws JniException, NativeException {
211 MsgNative.taskCancel(this);
214 * This method deletes a task.
216 * @exception InvalidTaskException is the specified task is not valid. A task
217 * is invalid if it is not binded with a native task.
218 * MsgException if the destruction failed.
219 */ protected void finalize() throws JniException, NativeException {
221 MsgNative.taskDestroy(this);