00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "scv/scv_config.h"
00040
00041 #ifndef _MSC_VER
00042 #include <sys/times.h>
00043 #endif
00044
00045 #include <string.h>
00046
00047 #ifdef __linux__
00048 # include <sys/time.h>
00049 #else
00050 #include <time.h>
00051 #endif
00052
00053 extern unsigned long long _scv_get_global_seed(void);
00054
00055 unsigned long long
00056 _scv_default_global_init_seed(unsigned long job_number)
00057 {
00058 #ifdef _MSC_VER
00059 __time64_t ltime_sec;
00060 _time64( <ime_sec );
00061 unsigned __int64 ltime_usec = 0;
00062 long i = 6000000L;
00063 unsigned int clk;
00064 clock_t start, finish;
00065
00066
00067 start = clock();
00068 while( i-- ) ;
00069 finish = clock();
00070 clk = finish - start;
00071
00072
00073 unsigned __int64 seed
00074 = ((unsigned long)(ltime_sec^ltime_usec^clk^job_number) * 654435769) >> 1;
00075 #else
00076
00077 struct timeval tp;
00078 struct timezone dummy1;
00079 gettimeofday(&tp, &dummy1);
00080
00081
00082 struct tms dummy2;
00083 clock_t clk;
00084 clk = times(&dummy2);
00085
00086
00087 unsigned long long seed
00088 = ((unsigned long)(tp.tv_sec^tp.tv_usec^clk^job_number) * 654435769) >> 1;
00089 #endif
00090
00091 if (seed==0) seed = 46831694;
00092 return seed;
00093 }
00094
00095 unsigned long long
00096 _scv_get_seed_from_name(const char * name, unsigned inst_num)
00097 {
00098 unsigned long long seed = 0;
00099
00100 if (name) {
00101 for (unsigned i=0;i < strlen(name); i++) {
00102 if (name[i] != 0) {
00103 seed += name[i];
00104 }
00105 }
00106 } else {
00107 seed = 1;
00108 }
00109
00110 seed = ((unsigned long) ((_scv_get_global_seed() * seed) +
00111 inst_num * 1023 ) * 654435769) >> 1;
00112
00113 if (seed==0) seed = 46831694;
00114 return seed;
00115 }
00116