From: Paul Bédaride Date: Wed, 30 Jan 2013 21:45:44 +0000 (+0100) Subject: Merge branch 'v3_9_x' X-Git-Tag: v3_9_90~569^2~19^2~4 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/5f6048cb018bff3560cdbb4da438474a5a23301e?hp=9a8394275cc43d5fbaf74bbfc0d87fb2862f766b Merge branch 'v3_9_x' --- diff --git a/examples/masterslave/masterslaveDeployment.xml b/examples/masterslave/masterslaveDeployment.xml index 6c01ac0120..7794206c2c 100644 --- a/examples/masterslave/masterslaveDeployment.xml +++ b/examples/masterslave/masterslaveDeployment.xml @@ -2,7 +2,7 @@ - + diff --git a/org/simgrid/msg/Task.java b/org/simgrid/msg/Task.java index a81e8fcaef..1b2e0cdac1 100644 --- a/org/simgrid/msg/Task.java +++ b/org/simgrid/msg/Task.java @@ -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; + } } diff --git a/src/jmsg_task.c b/src/jmsg_task.c index 67a87def81..a2e4b9281d 100644 --- a/src/jmsg_task.c +++ b/src/jmsg_task.c @@ -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) { diff --git a/src/jmsg_task.h b/src/jmsg_task.h index b0dfbbe631..2bae18d6f3 100644 --- a/src/jmsg_task.h +++ b/src/jmsg_task.h @@ -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 diff --git a/src/jtrace.c b/src/jtrace.c index cf17157079..1bdfa67e68 100644 --- a/src/jtrace.c +++ b/src/jtrace.c @@ -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); +} diff --git a/src/smx_context_cojava.c b/src/smx_context_cojava.c index 0c4c9f6c0b..00fe9b5db4 100644 --- a/src/smx_context_cojava.c +++ b/src/smx_context_cojava.c @@ -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) {