Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
getMessageSize
[simgrid.git] / org / simgrid / msg / Task.java
index bc2cdaa..e5e5fbf 100644 (file)
@@ -1,15 +1,13 @@
 /*
- * simgrid.msg.Task.java       1.00 07/05/01
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier           
+ * Copyright 2006-2012 The SimGrid Team.           
  * All right reserved. 
  *
  * This program is free software; you can redistribute 
  * it and/or modify it under the terms of the license 
- *(GNU LGPL) which comes with this package. 
+ * (GNU LGPL) which comes with this package.
  */
 
-package simgrid.msg;
+package org.simgrid.msg;
 
 /**
  * A task is either something to compute somewhere, or something to exchange between two hosts (or both).
@@ -22,13 +20,26 @@ public class Task {
         * a native task. Even if this attribute is public you must never
         * access to it. It is set automatically during the build of the object.
         */
-       public long bind = 0;
+       private long bind = 0;
+       /**
+        * Task name
+        */
+       protected String name;
+
+       private double messageSize;
+
+       static private Long idCpt = 0L;
 
+       private Long id;
 
        /** Default constructor (all fields to 0 or null) */
        public Task() {
-               MsgNative.taskCreate(this, null, 0, 0);
+               create(null, 0, 0);
+               this.messageSize = 0;
+               setId(idCpt);
+               idCpt++;
        }
+
        /* *              * *
         * * Constructors * *
         * *              * */
@@ -47,7 +58,10 @@ public class Task {
         *                              This value has to be >= 0.
         */ 
        public Task(String name, double computeDuration, double messageSize) {
-               MsgNative.taskCreate(this, name, computeDuration, messageSize);
+               create(name, computeDuration, messageSize);
+               this.messageSize = messageSize;
+               setId(idCpt);
+               idCpt++;
        }
        /**
         * Construct an new parallel task with the specified processing amount and amount for each host
@@ -59,165 +73,234 @@ public class Task {
         * @param messageSizes  A matrix describing the amount of data to exchange between hosts.
         */ 
        public Task(String name, Host[]hosts, double[]computeDurations, double[]messageSizes) {
-               MsgNative.parallelTaskCreate(this, name, hosts, computeDurations, messageSizes);
+               parallelCreate(name, hosts, computeDurations, messageSizes);
        }
+       
+       /**
+        * The natively implemented method to create a MSG task.
+        *
+        * @param name            The name of th task.
+        * @param computeDuration    A value of the processing amount (in flop) needed 
+        *                        to process the task. If 0, then it cannot be executed
+        *                        with the execute() method. This value has to be >= 0.
+        * @param messageSize        A value of amount of data (in bytes) needed to transfert 
+        *                        this task. If 0, then it cannot be transfered this task. 
+        *                        If 0, then it cannot be transfered with the get() and put() 
+        *                        methods. This value has to be >= 0.
+        * @exception             IllegalArgumentException if compute duration <0 or message size <0
+        */
+       private final native void create(String name,
+                       double computeDuration,
+                       double messageSize)
+       throws IllegalArgumentException;                
+       /**
+        * The natively implemented method to create a MSG parallel task.
+        *
+        * @param name                The name of the parallel task.
+        * @param hosts                The list of hosts implied by the parallel task.
+        * @param computeDurations    The total number of operations that have to be performed
+        *                            on the hosts.
+        * @param messageSizes        An array of doubles
+        *
+        */
+       private final native void parallelCreate(String name,
+                       Host[]hosts,
+                       double[]computeDurations,
+                       double[]messageSizes)
+       throws NullPointerException, IllegalArgumentException;
        /* *                   * *
         * * Getters / Setters * *
         * *                   * */
-       /** Gets the name of a task */ 
+    /** 
+     * Gets the name of a task
+     */
        public String getName() {
-               return MsgNative.taskGetName(this);
-       }
-       /** Gets the sender of the task */ 
-       Process getSender() {
-               return MsgNative.taskGetSender(this);
-       }
-       /** Gets the source of the task */ 
-       public Host getSource()  {
-               return MsgNative.taskGetSource(this);
-       }
-       /** Gets the computing amount of the task */ 
-       public double getComputeDuration() {
-               return MsgNative.taskGetComputeDuration(this);
-       }
-       /** Gets the remaining computation of the task */ 
-       public double getRemainingDuration() {
-               return MsgNative.taskGetRemainingDuration(this);
+               return name;
        }
+       /**
+        * Gets the sender of the task 
+        * Returns null if the task hasn't been sent yet
+        */
+       public native Process getSender();
+       /** Gets the source of the task.
+        * Returns null if the task hasn't been sent yet.
+     */
+       public native Host getSource();   
+       /** Gets the computing amount of the task
+     * FIXME: Cache it !
+     */
+       public native double getComputeDuration();
+       /** Gets the remaining computation of the task
+     */
+       public native double getRemainingDuration();
+       /**
+        * Sets the name of the task
+        * @param name the new task name.c
+        */
+       public native void setName(String name);
        /**
         * This method sets the priority of the computation of the task.
-        * The priority doesn't affect the transfert rate. For example a
+        * The priority doesn't affect the transfer rate. For example a
         * priority of 2 will make the task receive two times more cpu than
         * the other ones.
         *
         * @param priority      The new priority of the task.
         */ 
-       public void setPriority(double priority) {
-               MsgNative.taskSetPriority(this, priority);
-       }
-       /* *                       * *
-        * * Communication-related * *
-        * *                       * */
-
-
+       public native void setPriority(double priority);
+       /**
+        * Set the computation amount needed to process the task
+        * @param computationAmount the amount of computation needed to process the task
+        */
+       public native void setComputeDuration(double computationAmount);
        /* *                     * *
         * * Computation-related * *
         * *                     * */
        /**
         * Executes a task on the location on which the process is running.
         *
-        * @exception HostFailureException,TaskCancelledException 
-        */ 
-       public void execute() throws HostFailureException,TaskCancelledException {
-               MsgNative.taskExecute(this);
-       }
+     *
+     * @throws HostFailureException
+     * @throws TaskCancelledException
+     */
+       public native void execute() throws HostFailureException,TaskCancelledException;
        /**
         * Cancels a task.
         *
-        * @exception NativeException if the cancellation failed.
         */ 
-       public void cancel()  {
-               MsgNative.taskCancel(this);
-       }
+       public native void cancel();
        /** Deletes a task.
         *
         * @exception                   NativeException if the destruction failed.
         */ 
        protected void finalize() throws NativeException {
-               if (this.bind != 0)
-                       MsgNative.taskDestroy(this);
+               destroy();
        }
+       /**
+        * The natively implemented method to destroy a MSG task.
+        */
+       protected native void destroy();
+       /* *                       * *
+        * * Communication-related * *
+        * *                       * */
 
+       /** Send the task asynchronously on the mailbox identified by the specified name, 
+        *  with no way to retrieve whether the communication succeeded or not
+        * 
+        */
+       public native void dsend(String mailbox);       
        /**
         * Sends the task on the mailbox identified by the specified name 
         *
-        * @throws TimeoutException 
+     * @param mailbox
+     * @throws TimeoutException
         * @throws HostFailureException 
         * @throws TransferFailureException 
         */
        public void send(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException {
-               MsgNative.taskSend(mailbox, this, -1);
+               send(mailbox, -1);
        } 
 
        /**
         * Sends the task on the mailbox identified by the specified name (wait at most \a timeout seconds)
         *
-        * @exception  NativeException if the retrieval fails.
+     * @param mailbox
+     * @param timeout
+     * @exception  NativeException if the retrieval fails.
         * @throws TimeoutException 
         * @throws HostFailureException 
         * @throws TransferFailureException 
         */
-       public void send(String mailbox, double timeout) throws NativeException, TransferFailureException, HostFailureException, TimeoutException {
-               MsgNative.taskSend(mailbox, this, timeout);
-       } 
-
+       public native void send(String mailbox, double timeout) throws TransferFailureException, HostFailureException, TimeoutException;
        /**
         * Sends the task on the mailbox identified by the specified alias  (capping the sending rate to \a maxrate) 
         *
-        * @exception  TransferFailureException, HostFailureException, TimeoutException.
+     * @param alias
+     * @param maxrate 
+     * @throws TransferFailureException
+     * @throws HostFailureException
+     * @throws TimeoutException
         */
-       public void sendBounded(String alias, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException {
-               MsgNative.taskSendBounded(alias, this, maxrate);
-       } 
-
+       public native void sendBounded(String alias, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException;
+       /**
+        * Sends the task on the mailbox asynchronously
+        */
+       public native Comm isend(String mailbox);
+       
+       /**
+        * Starts listening for receiving a task from an asynchronous communication
+        * @param mailbox
+        */
+       public static native Comm irecv(String mailbox);
        /**
         * Retrieves next task from the mailbox identified by the specified name
         *
-        * @exception  TransferFailureException, HostFailureException, TimeoutException if the retrieval fails.
+     * @param mailbox
         */
 
        public static Task receive(String mailbox) throws TransferFailureException, HostFailureException, TimeoutException {
-               return MsgNative.taskReceive(mailbox, -1.0, null);
+               return receive(mailbox, -1.0, null);
        }
 
        /**
         * Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds)
         *
-        * @exception  TransferFailureException, HostFailureException, TimeoutException if the retrieval fails.
+     * @param mailbox
+     * @param timeout
         */
        public static Task receive(String mailbox, double timeout) throws  TransferFailureException, HostFailureException, TimeoutException {
-               return MsgNative.taskReceive(mailbox, timeout, null);
+               return receive(mailbox, timeout, null);
        }
 
        /**
         * Retrieves next task sent by a given host on the mailbox identified by the specified alias 
         *
-        * @exception  TransferFailureException, HostFailureException, TimeoutException if the retrieval fails.
+     * @param mailbox
+     * @param host
         */
 
        public static Task receive(String mailbox, Host host) throws TransferFailureException, HostFailureException, TimeoutException {
-               return MsgNative.taskReceive(mailbox, -1.0, host);
+               return receive(mailbox, -1.0, host);
        }
 
        /**
         * Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
         *
-        * @exception  TransferFailureException, HostFailureException, TimeoutException if the retrieval fails.
+     * @param mailbox
+     * @param timeout 
+     * @param host
         */
-       public static Task receive(String mailbox, double timeout, Host host) throws TransferFailureException, HostFailureException, TimeoutException {
-               return MsgNative.taskReceive(mailbox, timeout, host);
-       }
-
+       public native static Task receive(String mailbox, double timeout, Host host) throws TransferFailureException, HostFailureException, TimeoutException;
        /**
         * Tests whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
-        *
-        */ 
-       public static int listenFrom(String mailbox)  {
-               return MsgNative.taskListenFrom(mailbox);
-       }
+     */
+       public native static int listenFrom(String mailbox);
        /**
         * Listen whether there is a waiting task on the mailbox identified by the specified alias
-        *
-        */ 
-       public static boolean listen(String mailbox)   {
-               return MsgNative.taskListen(mailbox);
-       }
+     */
+       public native static boolean listen(String mailbox);
 
        /**
         * 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.
-        *
-        */ 
-       public static int listenFromHost(String alias, Host host)   {
-               return MsgNative.taskListenFromHost(alias, host);
+     */
+       public native static int listenFromHost(String alias, Host host);
+       
+       /**
+        * Class initializer, to initialize various JNI stuff
+        */
+       public static native void nativeInit();
+       static {
+               nativeInit();
+       }
+
+       public double getMessageSize() {
+               return this.messageSize;
+       }
+
+       public Long getId() {
+               return id;
+       }
+
+       public void setId(Long id) {
+               this.id = id;
        }
 }