For statistic reasons, there is one and only one RngStream for the platform.
*/
void surf_config_models_setup(void);
*/
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 */
#endif /* SG_PLATF_INTERFACE_H */
#include "xbt/log.h"
#include "xbt/str.h"
#include "xbt/dict.h"
#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);
#include "simgrid/platf_interface.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
static int surf_parse_models_setup_already_called;
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) {
/** Module management function: creates all internal data structures */
void sg_platf_init(void) {
void sg_platf_mount_add_cb(sg_platf_mount_cb_t fct) {
xbt_dynar_push(sg_platf_mount_cb_list, &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;
+}
static xbt_dict_t trace_list = NULL;
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;
XBT_INLINE tmgr_history_t tmgr_history_new(void)
{
tmgr_history_t h;
probabilist_event_generator_t generator2)
{
tmgr_trace_t trace = NULL;
probabilist_event_generator_t generator2)
{
tmgr_trace_t trace = NULL;
RngStream rng_stream = NULL;
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;
trace = xbt_new0(s_tmgr_trace_t, 1);
trace->type = e_trace_probabilist;