Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make rngStream management functions in platform more visible
authorjbrv <jean-baptiste.herve@esial.net>
Tue, 19 Jun 2012 14:15:07 +0000 (16:15 +0200)
committerjbrv <jean-baptiste.herve@esial.net>
Tue, 19 Jun 2012 14:15:07 +0000 (16:15 +0200)
For statistic reasons, there is one and only one RngStream for the platform.

src/include/simgrid/platf_interface.h
src/surf/sg_platf.c
src/surf/trace_mgr.c

index 8a61ba9..3956166 100644 (file)
@@ -49,7 +49,9 @@ void sg_platf_mount_add_cb(sg_platf_mount_cb_t fct);
  */
 void surf_config_models_setup(void);
 
-
-
+/* RngStream management functions */
+typedef struct RngStream_InfoState *RngStream; //Not to have to include RngStream.h
+void sg_platf_rng_stream_init(unsigned long seed[6]);
+RngStream sg_platf_rng_stream_get(const char* id);
 
 #endif                          /* SG_PLATF_INTERFACE_H */
index 5cdf39b..65cc84c 100644 (file)
@@ -8,6 +8,7 @@
 #include "xbt/log.h"
 #include "xbt/str.h"
 #include "xbt/dict.h"
+#include "xbt/RngStream.h"
 #include "simgrid/platf_interface.h"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
@@ -27,6 +28,8 @@ xbt_dynar_t sg_platf_mount_cb_list = NULL; // of sg_platf_storage_cb_t
 
 static int surf_parse_models_setup_already_called;
 
+/* one RngStream for the platform, to respect some statistic rules */
+static RngStream sg_platf_rng_stream = NULL;
 
 /** Module management function: creates all internal data structures */
 void sg_platf_init(void) {
@@ -211,3 +214,20 @@ void sg_platf_mstorage_add_cb(sg_platf_mstorage_cb_t fct) {
 void sg_platf_mount_add_cb(sg_platf_mount_cb_t fct) {
   xbt_dynar_push(sg_platf_mount_cb_list, &fct);
 }
+
+
+void sg_platf_rng_stream_init(unsigned long seed[6]) {
+  RngStream_SetPackageSeed(seed);
+  sg_platf_rng_stream = RngStream_CreateStream(NULL);
+}
+
+RngStream sg_platf_rng_stream_get(const char* id) {
+  RngStream stream = NULL;
+  unsigned int id_hash;
+  
+  stream = RngStream_CopyStream(sg_platf_rng_stream);
+  id_hash = xbt_str_hash(id);
+  RngStream_AdvanceState(stream, 0, (long)id_hash);
+  
+  return stream;
+}
index 7a3b76a..b3db085 100644 (file)
@@ -17,10 +17,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_trace, surf, "Surf trace management");
 
 static xbt_dict_t trace_list = NULL;
 
-// a unique RngStream structure for everyone
-// FIXME : has to be created by someone
-static RngStream common_rng_stream = NULL;
-
 XBT_INLINE tmgr_history_t tmgr_history_new(void)
 {
   tmgr_history_t h;
@@ -43,12 +39,9 @@ tmgr_trace_t tmgr_trace_new_from_generator(const char *id,
                                           probabilist_event_generator_t generator2)
 {
   tmgr_trace_t trace = NULL;
-  unsigned int id_hash;
   RngStream rng_stream = NULL;
   
-  rng_stream = RngStream_CopyStream(common_rng_stream);
-  id_hash = xbt_str_hash(id);
-  RngStream_AdvanceState(rng_stream, 0, id_hash);
+  rng_stream = sg_platf_rng_stream_get(id);
   
   trace = xbt_new0(s_tmgr_trace_t, 1);
   trace->type = e_trace_probabilist;