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 * 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) */
30 MsgNative.taskCreate(this, null, 0, 0);
36 * Construct an new task with the specified processing amount and amount
39 * @param name Task's name
41 * @param computeDuration A value of the processing amount (in flop) needed to process the task.
42 * If 0, then it cannot be executed with the execute() method.
43 * This value has to be >= 0.
45 * @param messageSize A value of amount of data (in bytes) needed to transfert this task.
46 * If 0, then it cannot be transfered with the get() and put() methods.
47 * This value has to be >= 0.
49 public Task(String name, double computeDuration, double messageSize) {
50 MsgNative.taskCreate(this, name, computeDuration, messageSize);
53 * Construct an new parallel task with the specified processing amount and amount for each host
56 * @param name The name of the parallel task.
57 * @param hosts The list of hosts implied by the parallel task.
58 * @param computeDurations The amount of operations to be performed by each host of \a hosts.
59 * @param messageSizes A matrix describing the amount of data to exchange between hosts.
61 public Task(String name, Host[]hosts, double[]computeDurations, double[]messageSizes) {
62 MsgNative.parallelTaskCreate(this, name, hosts, computeDurations, messageSizes);
65 * * Getters / Setters * *
67 /** Gets the name of a task */
68 public String getName() {
69 return MsgNative.taskGetName(this);
71 /** Gets the sender of the task */
73 return MsgNative.taskGetSender(this);
75 /** Gets the source of the task */
76 public Host getSource() throws NativeException {
77 return MsgNative.taskGetSource(this);
79 /** Gets the computing amount of the task */
80 public double getComputeDuration() {
81 return MsgNative.taskGetComputeDuration(this);
83 /** Gets the remaining computation of the task */
84 public double getRemainingDuration() {
85 return MsgNative.taskGetRemainingDuration(this);
88 * This method sets the priority of the computation of the task.
89 * The priority doesn't affect the transfert rate. For example a
90 * priority of 2 will make the task receive two times more cpu than
93 * @param priority The new priority of the task.
95 public void setPriority(double priority) {
96 MsgNative.taskSetPriority(this, priority);
99 * * Communication-related * *
104 * * Computation-related * *
107 * Executes a task on the location on which the process is running.
109 * @exception NativeException if the execution failed.
111 public void execute() throws NativeException {
112 MsgNative.taskExecute(this);
117 * @exception NativeException if the cancellation failed.
119 public void cancel() throws NativeException {
120 MsgNative.taskCancel(this);
124 * @exception NativeException if the destruction failed.
126 protected void finalize() throws NativeException {
128 MsgNative.taskDestroy(this);
132 * Sends the task on the mailbox identified by the specified name
134 * @exception NativeException if the retrieval fails.
135 * @throws TimeoutException
136 * @throws HostFailureException
137 * @throws TransferFailureException
139 public void send(String mailbox) throws NativeException, TransferFailureException, HostFailureException, TimeoutException {
140 MsgNative.taskSend(mailbox, this, -1);
144 * Sends the task on the mailbox identified by the specified name (wait at most \a timeout seconds)
146 * @exception NativeException if the retrieval fails.
147 * @throws TimeoutException
148 * @throws HostFailureException
149 * @throws TransferFailureException
151 public void send(String mailbox, double timeout) throws NativeException, TransferFailureException, HostFailureException, TimeoutException {
152 MsgNative.taskSend(mailbox, this, timeout);
156 * Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate)
158 * @exception NativeException if the retrieval fails.
160 public void sendBounded(String alias, double maxrate) throws NativeException {
161 MsgNative.taskSendBounded(alias, this, maxrate);
165 * Retrieves next task from the mailbox identified by the specified name
167 * @exception NativeException if the retrieval fails.
170 public static Task receive(String mailbox) throws NativeException {
171 return MsgNative.taskReceive(mailbox, -1.0, null);
175 * Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds)
177 * @exception NativeException if the retrieval fails.
179 public static Task receive(String mailbox, double timeout) throws NativeException {
180 return MsgNative.taskReceive(mailbox, timeout, null);
184 * Retrieves next task sent by a given host on the mailbox identified by the specified alias
186 * @exception NativeException if the retrieval fails.
189 public static Task receive(String mailbox, Host host) throws NativeException {
190 return MsgNative.taskReceive(mailbox, -1.0, host);
194 * Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
196 * @exception NativeException if the retrieval fails.
198 public static Task receive(String mailbox, double timeout, Host host) throws NativeException {
199 return MsgNative.taskReceive(mailbox, timeout, host);
203 * Tests whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
205 * @exception NativeException if the retrieval fails.
207 public static int listenFrom(String mailbox) throws NativeException {
208 return MsgNative.taskListenFrom(mailbox);
211 * Listen whether there is a waiting task on the mailbox identified by the specified alias
213 * @exception NativeException if the retrieval fails.
215 public static boolean listen(String mailbox) throws NativeException {
216 return MsgNative.taskListen(mailbox);
220 * 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.
222 * @exception NativeException if the retrieval fails.
224 public static int listenFromHost(String alias, Host host) throws NativeException {
225 return MsgNative.taskListenFromHost(alias, host);