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.
12 package org.simgrid.msg;
15 * A task is either something to compute somewhere, or something to exchange between two hosts (or both).
16 * It is defined by a computing amount and a message size.
21 * This attribute represents a bind between a java task object and
22 * a native task. Even if this attribute is public you must never
23 * access to it. It is set automatically during the build of the object.
28 /** Default constructor (all fields to 0 or null) */
37 * Construct an new task with the specified processing amount and amount
40 * @param name Task's name
42 * @param computeDuration A value of the processing amount (in flop) needed to process the task.
43 * If 0, then it cannot be executed with the execute() method.
44 * This value has to be >= 0.
46 * @param messageSize A value of amount of data (in bytes) needed to transfert this task.
47 * If 0, then it cannot be transfered with the get() and put() methods.
48 * This value has to be >= 0.
50 public Task(String name, double computeDuration, double messageSize) {
51 create(name, computeDuration, messageSize);
54 * Construct an new parallel task with the specified processing amount and amount for each host
57 * @param name The name of the parallel task.
58 * @param hosts The list of hosts implied by the parallel task.
59 * @param computeDurations The amount of operations to be performed by each host of \a hosts.
60 * @param messageSizes A matrix describing the amount of data to exchange between hosts.
62 public Task(String name, Host[]hosts, double[]computeDurations, double[]messageSizes) {
63 parallelCreate(name, hosts, computeDurations, messageSizes);
67 * The natively implemented method to create a MSG task.
69 * @param name The name of th task.
70 * @param computeDuration A value of the processing amount (in flop) needed
71 * to process the task. If 0, then it cannot be executed
72 * with the execute() method. This value has to be >= 0.
73 * @param messageSize A value of amount of data (in bytes) needed to transfert
74 * this task. If 0, then it cannot be transfered this task.
75 * If 0, then it cannot be transfered with the get() and put()
76 * methods. This value has to be >= 0.
77 * @exception IllegalArgumentException if compute duration <0 or message size <0
79 final native void create(String name,
80 double computeDuration,
82 throws IllegalArgumentException;
84 * The natively implemented method to create a MSG parallel task.
86 * @param name The name of the parallel task.
87 * @param hosts The list of hosts implied by the parallel task.
88 * @param computeDurations The total number of operations that have to be performed
90 * @param messageSizes An array of doubles
93 final native void parallelCreate(String name,
95 double[]computeDurations,
97 throws NullPointerException, IllegalArgumentException;
99 * * Getters / Setters * *
101 /** Gets the name of a task
105 public native String getName();
106 /** Gets the sender of the task */
107 Process getSender() {
108 return MsgNative.taskGetSender(this);
110 /** Gets the source of the task
113 public Host getSource() {
114 return MsgNative.taskGetSource(this);
116 /** Gets the computing amount of the task
119 public double getComputeDuration() {
120 return MsgNative.taskGetComputeDuration(this);
122 /** Gets the remaining computation of the task
125 public double getRemainingDuration() {
126 return MsgNative.taskGetRemainingDuration(this);
129 * This method sets the priority of the computation of the task.
130 * The priority doesn't affect the transfer rate. For example a
131 * priority of 2 will make the task receive two times more cpu than
134 * @param priority The new priority of the task.
136 public void setPriority(double priority) {
137 MsgNative.taskSetPriority(this, priority);
140 * * Communication-related * *
145 * * Computation-related * *
148 * Executes a task on the location on which the process is running.
151 * @throws HostFailureException
152 * @throws TaskCancelledException
154 public void execute() throws HostFailureException,TaskCancelledException {
155 MsgNative.taskExecute(this);
161 public void cancel() {
162 MsgNative.taskCancel(this);
166 * @exception NativeException if the destruction failed.
168 protected void finalize() throws NativeException {
172 * The natively implemented method to destroy a MSG task.
174 protected native void destroy();
176 /** Send the task asynchronously on the mailbox identified by the specified name,
177 * with no way to retrieve whether the communication succeeded or not
180 public void dsend(String mailbox) {
181 MsgNative.taskDSend(mailbox, this);
185 * Sends the task on the mailbox identified by the specified name
188 * @throws TimeoutException
189 * @throws HostFailureException
190 * @throws TransferFailureException
192 public void send(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException {
193 MsgNative.taskSend(mailbox, this, -1);
197 * Sends the task on the mailbox identified by the specified name (wait at most \a timeout seconds)
201 * @exception NativeException if the retrieval fails.
202 * @throws TimeoutException
203 * @throws HostFailureException
204 * @throws TransferFailureException
206 public void send(String mailbox, double timeout) throws NativeException, TransferFailureException, HostFailureException, TimeoutException {
207 MsgNative.taskSend(mailbox, this, timeout);
211 * Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate)
215 * @throws TransferFailureException
216 * @throws HostFailureException
217 * @throws TimeoutException
219 public void sendBounded(String alias, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException {
220 MsgNative.taskSendBounded(alias, this, maxrate);
223 * Sends the task on the mailbox asynchronously
225 public native Comm isend(String mailbox);
228 * Starts listening for receiving a task from an asynchronous communication
232 public static native Comm irecv(String mailbox);
234 * Retrieves next task from the mailbox identified by the specified name
238 * @throws TransferFailureException
239 * @throws HostFailureException
240 * @throws TimeoutException
243 public static Task receive(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException {
244 return MsgNative.taskReceive(mailbox, -1.0, null);
248 * Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds)
253 * @throws TransferFailureException
254 * @throws HostFailureException
255 * @throws TimeoutException
257 public static Task receive(String mailbox, double timeout) throws TransferFailureException, HostFailureException, TimeoutException {
258 return MsgNative.taskReceive(mailbox, timeout, null);
262 * Retrieves next task sent by a given host on the mailbox identified by the specified alias
267 * @throws TransferFailureException
268 * @throws TimeoutException
269 * @throws HostFailureException
272 public static Task receive(String mailbox, Host host) throws TransferFailureException, HostFailureException, TimeoutException {
273 return MsgNative.taskReceive(mailbox, -1.0, host);
277 * Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
283 * @throws TransferFailureException
284 * @throws HostFailureException
285 * @throws TimeoutException
287 public static Task receive(String mailbox, double timeout, Host host) throws TransferFailureException, HostFailureException, TimeoutException {
288 return MsgNative.taskReceive(mailbox, timeout, host);
292 * Tests whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
298 public static int listenFrom(String mailbox) {
299 return MsgNative.taskListenFrom(mailbox);
302 * Listen whether there is a waiting task on the mailbox identified by the specified alias
308 public static boolean listen(String mailbox) {
309 return MsgNative.taskListen(mailbox);
313 * 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.
320 public static int listenFromHost(String alias, Host host) {
321 return MsgNative.taskListenFromHost(alias, host);
325 * Class initializer, to initialize various JNI stuff
327 public static native void nativeInit();