Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'v3_9_x'
authorPaul Bédaride <paul.bedaride@gmail.com>
Wed, 30 Jan 2013 21:45:44 +0000 (22:45 +0100)
committerPaul Bédaride <paul.bedaride@gmail.com>
Wed, 30 Jan 2013 21:45:44 +0000 (22:45 +0100)
examples/masterslave/masterslaveDeployment.xml
org/simgrid/msg/Task.java
src/jmsg_task.c
src/jmsg_task.h
src/jtrace.c
src/smx_context_cojava.c

index 6c01ac0..7794206 100644 (file)
@@ -2,7 +2,7 @@
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
   <process host="Jacquelin" function="masterslave.Master">
-     <argument value="5"/>     <!-- Amount of tasks to dispatch -->
+     <argument value="5000"/>     <!-- Amount of tasks to dispatch -->
      <argument value="50000"/> <!-- Computation size of each task -->
      <argument value="10"/>    <!-- Communication size of each one -->
      <argument value="7"/>     <!-- Amount of slaves waiting for orders -->
index a81e8fc..1b2e0cd 100644 (file)
@@ -26,9 +26,18 @@ public class Task {
         */
        protected String name;
 
+       private double messageSize;
+
+       static private Long idCpt = 0L;
+
+       private Long id;
+
        /** Default constructor (all fields to 0 or null) */
        public Task() {
                create(null, 0, 0);
+               this.messageSize = 0;
+               setId(idCpt);
+               idCpt++;
        }
 
        /* *              * *
@@ -50,6 +59,9 @@ public class Task {
         */ 
        public Task(String name, double computeDuration, double 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
@@ -77,7 +89,7 @@ public class Task {
         *                        methods. This value has to be >= 0.
         * @exception             IllegalArgumentException if compute duration <0 or message size <0
         */
-       final native void create(String name,
+       private final native void create(String name,
                        double computeDuration,
                        double messageSize)
        throws IllegalArgumentException;                
@@ -91,7 +103,7 @@ public class Task {
         * @param messageSizes        An array of doubles
         *
         */
-       final native void parallelCreate(String name,
+       private final native void parallelCreate(String name,
                        Host[]hosts,
                        double[]computeDurations,
                        double[]messageSizes)
@@ -140,6 +152,11 @@ public class Task {
         * @param computationAmount the amount of computation needed to process the task
         */
        public native void setComputeDuration(double computationAmount);
+       /**
+        * Set the data size of the task
+        * @param dataSize the size of the task
+        */
+       public native void setDataSize(double dataSize);
        /* *                     * *
         * * Computation-related * *
         * *                     * */
@@ -175,7 +192,15 @@ public class Task {
         *  with no way to retrieve whether the communication succeeded or not
         * 
         */
-       public native void dsend(String mailbox);       
+       public native void dsendBounded(String mailbox, double maxrate);
+
+
+       /** 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 
         *
@@ -208,12 +233,37 @@ public class Task {
      * @throws HostFailureException
      * @throws TimeoutException
         */
-       public native void sendBounded(String alias, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException;
+       public void sendBounded(String alias, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException {
+              sendBounded(alias,-1,maxrate);
+        }
+
+
+/**
+        * Sends the task on the mailbox identified by the specified alias  (capping the sending rate to \a maxrate) with a timeout
+        *
+     * @param alias
+     * @param timeout
+     * @param maxrate 
+     * @throws TransferFailureException
+     * @throws HostFailureException
+     * @throws TimeoutException
+        */
+       public void sendBounded(String alias, double timeout, double maxrate) throws TransferFailureException, HostFailureException, TimeoutException {
+              sendBounded(alias,timeout,maxrate);
+        }
+
+
        /**
         * Sends the task on the mailbox asynchronously
         */
        public native Comm isend(String mailbox);
+
+       /**
+        * Sends the task on the mailbox asynchronously (capping the sending rate to \a maxrate)
+        */
+       public native Comm isendBounded(String mailbox, double maxrate);
        
+
        /**
         * Starts listening for receiving a task from an asynchronous communication
         * @param mailbox
@@ -280,4 +330,16 @@ public class Task {
                Msg.nativeInit();
                nativeInit();
        }
+
+       public double getMessageSize() {
+               return this.messageSize;
+       }
+
+       public Long getId() {
+               return id;
+       }
+
+       public void setId(Long id) {
+               this.id = id;
+       }
 }
index 67a87de..a2e4b92 100644 (file)
@@ -347,6 +347,18 @@ Java_org_simgrid_msg_Task_setComputeDuration
        }
        MSG_task_set_compute_duration(task, (double) computationAmount);
 }
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Task_setDataSize
+               (JNIEnv *env, jobject jtask, jdouble dataSize) {
+       msg_task_t task = jtask_to_native_task(jtask, env);
+
+       if (!task) {
+    jxbt_throw_notbound(env, "task", jtask);
+    return;
+       }
+       MSG_task_set_data_size(task, (double) dataSize);
+}
+
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Task_send(JNIEnv * env,jobject jtask,
                                     jstring jalias,
@@ -381,27 +393,28 @@ Java_org_simgrid_msg_Task_send(JNIEnv * env,jobject jtask,
 }
 
 JNIEXPORT void JNICALL
-Java_org_simgrid_msg_Task_sendBounded(JNIEnv * env, jobject jtask,
-                                           jstring jalias,
-                                           jdouble jmaxRate)
+Java_org_simgrid_msg_Task_sendBounded(JNIEnv * env,jobject jtask,
+                                    jstring jalias,
+                                    jdouble jtimeout,
+                                   jdouble maxrate)
 {
-  msg_task_t task = jtask_to_native_task(jtask, env);
   msg_error_t rv;
-  const char *alias;
+  const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+  msg_task_t task = jtask_to_native_task(jtask, env);
+
 
   if (!task) {
+    (*env)->ReleaseStringUTFChars(env, jalias, alias);
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
 
-  alias = (*env)->GetStringUTFChars(env, jalias, 0);
-
   /* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
   MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
-
   xbt_ex_t e;
   TRY {
-    rv = MSG_task_send_bounded(task, alias, (double) jmaxRate);
+    rv = MSG_task_send_with_timeout_bounded(task, alias, (double) jtimeout, (double) maxrate);
   }
   CATCH(e) {
     xbt_ex_free(e);
@@ -409,11 +422,10 @@ Java_org_simgrid_msg_Task_sendBounded(JNIEnv * env, jobject jtask,
   (*env)->ReleaseStringUTFChars(env, jalias, alias);
 
   if (rv != MSG_OK) {
-    jmsg_throw_status(env, rv);
+       jmsg_throw_status(env, rv);
   }
 }
 
-
 JNIEXPORT jobject JNICALL
 Java_org_simgrid_msg_Task_receive(JNIEnv * env, jclass cls,
                                        jstring jalias, jdouble jtimeout,
@@ -538,6 +550,47 @@ MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
   return jcomm;
 }
 
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jobject jtask, jstring jmailbox, jdouble maxrate) {
+  jclass comm_class;
+
+  const char *mailbox;
+
+  msg_task_t task;
+
+  jobject jcomm;
+  msg_comm_t comm;
+
+  comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm");
+
+  if (!comm_class) return NULL;
+
+  jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor);
+  mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0);
+
+  task = jtask_to_native_task(jtask, env);
+
+  if (!task) {
+    (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+    (*env)->DeleteLocalRef(env, jcomm);
+    jxbt_throw_notbound(env, "task", jtask);
+        return NULL;
+  }
+
+MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+  comm = MSG_task_isend_bounded(task,mailbox,maxrate);
+
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm));
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(NULL));
+  (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE);
+
+  (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
+
+  return jcomm;
+}
+
+
+
 static void msg_task_cancel_on_failed_dsend(void*t) {
   msg_task_t task = t;
   JNIEnv *env =get_current_thread_env();
@@ -570,6 +623,29 @@ Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jtask,
   (*env)->ReleaseStringUTFChars(env, jalias, alias);
 }
 
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Task_dsendBounded(JNIEnv * env, jobject jtask,
+                                jstring jalias, jdouble maxrate) {
+  const char *alias = (*env)->GetStringUTFChars(env, jalias, 0);
+
+  msg_task_t task = jtask_to_native_task(jtask, env);
+
+
+  if (!task) {
+    (*env)->ReleaseStringUTFChars(env, jalias, alias);
+    jxbt_throw_notbound(env, "task", jtask);
+    return;
+  }
+
+  /* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
+  MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
+  MSG_task_dsend_bounded(task, alias, msg_task_cancel_on_failed_dsend,(double)maxrate);
+
+  (*env)->ReleaseStringUTFChars(env, jalias, alias);
+}
+
+
+
 JNIEXPORT jboolean JNICALL
 Java_org_simgrid_msg_Task_listen(JNIEnv * env, jclass cls,
                                                                                                           jstring jalias) {
index b0dfbbe..2bae18d 100644 (file)
@@ -183,6 +183,16 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setPriority
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Task_setComputeDuration
                (JNIEnv *env, jobject jtask, jdouble computationAmount);
+               
+               /**
+ * Class               org_simgrid_msg_Task
+ * Method              setDataSize
+ * Signature   (D)V
+ */
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Task_setDataSize
+               (JNIEnv *env, jobject jtask, jdouble dataSize);
+               
 /**
  * Class               org_simgrid_msg_Task
  * Method              send
@@ -191,13 +201,14 @@ JNIEXPORT void JNICALL
     Java_org_simgrid_msg_Task_send
     (JNIEnv *, jobject, jstring, jdouble);
 
-/*
+/**
  * Class               org_simgrid_msg_Task
  * Method              sendBounded
  */
 JNIEXPORT void JNICALL
-Java_org_simgrid_msg_Task_sendBounded(JNIEnv *, jobject, jstring,
-                                               jdouble);
+    Java_org_simgrid_msg_Task_sendBounded
+    (JNIEnv *, jobject, jstring, jdouble, jdouble);
+
 
 /**
  * Class               org_simgrid_msg_Task
@@ -221,6 +232,14 @@ Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass cls, jstring jmailbox);
  */
 JNIEXPORT jobject JNICALL
 Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject jtask, jstring jmailbox);
+/**
+ * Class               org_simgrid_msg_Task
+ * Method              isend
+ * Signature   (Lorg/simgrid/msg/Task;Ljava/lang/String;)Lorg/simgrid/msg/Comm;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jobject jtask, jstring jmailbox, jdouble maxrate);
+
 /**
  * Class               org_simgrid_msg_Task
  * Method              dsend
@@ -228,6 +247,15 @@ Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject jtask, jstring jmailbox);
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jtask,
                                 jstring jalias);
+
+/**
+ * Class               org_simgrid_msg_Task
+ * Method              dsendBounded
+ */
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Task_dsendBounded(JNIEnv * env, jobject jtask,
+                                jstring jalias, jdouble maxrate);
+
 /**
  * Class               org_simgrid_msg_Task
  * Method              listen
index cf17157..1bdfa67 100644 (file)
@@ -113,6 +113,20 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSet
   (*env)->ReleaseStringUTFChars(env, js_state, state);
 }
 
+JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSub
+  (JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jdouble value)
+{
+  const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
+  const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+
+  TRACE_host_variable_sub(host, state, value);
+
+  (*env)->ReleaseStringUTFChars(env, js_host, host);
+  (*env)->ReleaseStringUTFChars(env, js_state, state);
+}
+
+
+
 JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableDeclare
   (JNIEnv *env, jclass cls, jstring js_state)
 {
@@ -134,3 +148,15 @@ JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableSet
   (*env)->ReleaseStringUTFChars(env, js_vm, vm);
   (*env)->ReleaseStringUTFChars(env, js_state, state);
 }
+
+JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableAdd
+  (JNIEnv *env, jclass cls, jstring js_host, jstring js_state, jdouble value) {
+
+  const char *host = (*env)->GetStringUTFChars(env, js_host, 0);
+  const char *state = (*env)->GetStringUTFChars(env, js_state, 0);
+
+  TRACE_host_variable_set(host, state, value);
+
+  (*env)->ReleaseStringUTFChars(env, js_host, host);
+  (*env)->ReleaseStringUTFChars(env, js_state, state);
+}
index 0c4c9f6..00fe9b5 100644 (file)
@@ -83,6 +83,7 @@ void SIMIX_ctx_cojava_factory_init(smx_context_factory_t * factory)
 
   jclass class_thread = (*global_env)->FindClass(global_env, "java/lang/Thread");
   xbt_assert((class_thread != NULL), "Can't find java.lang.Thread class");
+  
   jclass class_coroutine_support = (*global_env)->FindClass(global_env, "java/dyn/CoroutineSupport");
   xbt_assert((class_coroutine_support != NULL), "Can't find java.dyn.CoroutineSupport class");
   jmethodID thread_get_current = (*global_env)->GetStaticMethodID(global_env, class_thread, "currentThread", "()Ljava/lang/Thread;");
@@ -244,10 +245,12 @@ static void smx_ctx_cojava_runall(void)
 {
   cojava_processes = SIMIX_process_get_runnable();
   smx_process_t process;
-  process = xbt_dynar_get_as(cojava_processes, 0, smx_process_t);
-  cojava_process_index = 1;
-  /* Execute the first process */
-  smx_ctx_cojava_resume(SIMIX_process_get_context(process));
+  if (xbt_dynar_length(cojava_processes) > 0) {
+    process = xbt_dynar_get_as(cojava_processes, 0, smx_process_t);
+    cojava_process_index = 1;
+    /* Execute the first process */
+    smx_ctx_cojava_resume(SIMIX_process_get_context(process));
+  }
 }
 
 static void smx_ctx_cojava_create_coroutine(smx_ctx_cojava_t context) {