Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/mty-makai/mty.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 227 by notanpe, Thu Jul 16 11:54:15 2009 UTC revision 229 by notanpe, Mon Aug 10 09:18:50 2009 UTC
# Line 97  unsigned int   seed; Line 97  unsigned int   seed;
97  int     seedOffset;  int     seedOffset;
98  int     verbose;  int     verbose;
99    
100    #define   MAX_GEAR   10
101    #define   MIN_GEAR    1
102    #define   DEF_GEAR   10
103    int     gear;
104    
105  unsigned char   saltChar[2];  unsigned char   saltChar[2];
106    
107  #ifdef ALLKEY  #ifdef ALLKEY
# Line 1203  char   *path; Line 1208  char   *path;
1208      break;      break;
1209     }     }
1210    }    }
1211    printf( "%s [-t num|-m mask] [-s num] [-k salt] [-v] [\"str\"]\n", myName );  #ifdef ALLKEY
1212      printf( "%s [-t num|-m mask] [-s num] [-g num] [-k salt] [-v] [\"str\"]\n", myName );
1213    #else /* ALLKEY */
1214      printf( "%s [-t num|-m mask] [-s num] [-g num] [-v] [\"str\"]\n", myName );
1215    #endif /* ALLKEY */
1216    printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n",    printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n",
1217             MIN_THREAD, MAX_THREAD );             MIN_THREAD, MAX_THREAD );
1218    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",
1219            MAX_THREAD );            MAX_THREAD );
1220    printf( " -s num : 乱数の種 ( 1 ≦ num ≦ %u )\n", UINT_MAX );    printf( " -s num : 乱数の種 ( 1 ≦ num ≦ %u )\n", UINT_MAX );
1221      printf( " -g num : がんばりぐあい ( %d (やる気なし) ≦ num ≦ %d (フルパワー), デフォルトは、%d )\n", MIN_GEAR, MAX_GEAR, DEF_GEAR );
1222  #ifdef ALLKEY  #ifdef ALLKEY
1223    printf( " -k salt : 塩を指定\n" );    printf( " -k salt : 塩を指定\n" );
1224  #endif /* ALLKEY */  #endif /* ALLKEY */
# Line 1354  main(int argc, char *argv[]) Line 1364  main(int argc, char *argv[])
1364    
1365    int xhash_loaded;    int xhash_loaded;
1366    
1367    #if defined(WIN32)
1368    #define YOUSUMI 6
1369      int   maxSpeed; /* 一秒間に検索した個数の最大値 (YOUSUMI 回計測中) */
1370      int   sCnt; /* 速度を表示した回数 */
1371      int   lCntMax; /* Sleep() のためのループ最大値 */
1372      int   lCnt; /* Sleep() のためのループカウンタ */
1373    #endif /* WIN32 */
1374    
1375  #define UPDATE_INTERVAL 8       /* 速度表示の間隔 秒 */  #define UPDATE_INTERVAL 8       /* 速度表示の間隔 秒 */
1376    struct status {    struct status {
1377      uint64_t startTime; /* 開始時刻 ミリ秒 */      uint64_t startTime; /* 開始時刻 ミリ秒 */
# Line 1366  main(int argc, char *argv[]) Line 1384  main(int argc, char *argv[])
1384    
1385  #if defined(WIN32)  #if defined(WIN32)
1386    SetPriorityClass( GetCurrentProcess(), IDLE_PRIORITY_CLASS );    SetPriorityClass( GetCurrentProcess(), IDLE_PRIORITY_CLASS );
1387      maxSpeed = 0;
1388      sCnt = 0;
1389      lCntMax = 0;
1390      lCnt = 0;
1391  #endif  #endif
1392    
1393  {  {
# Line 1379  main(int argc, char *argv[]) Line 1401  main(int argc, char *argv[])
1401    seed = 0;    seed = 0;
1402    seedOffset = 0; /* コマンドラインオプションではないが、ここで初期化 */    seedOffset = 0; /* コマンドラインオプションではないが、ここで初期化 */
1403    verbose = 0;    verbose = 0;
1404      gear = DEF_GEAR;
1405  #ifdef ALLKEY  #ifdef ALLKEY
1406    fixedSaltChar[0] = '\0';    fixedSaltChar[0] = '\0';
1407    while ( (optChar = getopt(argc, argv, "t:m:s:k:vh")) != EOF ) {    while ( (optChar = getopt(argc, argv, "t:m:s:g:k:vh")) != EOF ) {
1408  #else /* ALLKEY */  #else /* ALLKEY */
1409    while ( (optChar = getopt(argc, argv, "t:m:s:vh")) != EOF ) {    while ( (optChar = getopt(argc, argv, "t:m:s:g:vh")) != EOF ) {
1410  #endif /* ALLKEY */  #endif /* ALLKEY */
1411     switch ( optChar ) {     switch ( optChar ) {
1412      case 't':      case 't':
# Line 1429  main(int argc, char *argv[]) Line 1452  main(int argc, char *argv[])
1452        exit( 1 );        exit( 1 );
1453       }       }
1454       break;       break;
1455        case 'g':
1456         gear = atoi( optarg );
1457         if ( gear < MIN_GEAR || gear > MAX_GEAR ) {
1458          usage( argv[0] );
1459          exit( 1 );
1460         }
1461         break;
1462  #ifdef ALLKEY  #ifdef ALLKEY
1463      case 'k':      case 'k':
1464       if ( strlen( optarg ) != 2 ) {       if ( strlen( optarg ) != 2 ) {
# Line 1542  main(int argc, char *argv[]) Line 1572  main(int argc, char *argv[])
1572      printf( "正規表現 : %s\n", regExpStr );      printf( "正規表現 : %s\n", regExpStr );
1573     }     }
1574  #endif /* REON */  #endif /* REON */
1575       if ( gear != DEF_GEAR ) {
1576        printf( "がんばりぐあい : %d\n", gear );
1577       }
1578    }    }
1579    
1580    /* コードを生成・展開    /* コードを生成・展開
# Line 1985  main(int argc, char *argv[]) Line 2018  main(int argc, char *argv[])
2018    
2019     /* 速度計測 */     /* 速度計測 */
2020     status.loop += N_ALU * ALU_BITS;     status.loop += N_ALU * ALU_BITS;
2021    
2022    #if defined(WIN32)
2023       if ( sCnt >= YOUSUMI ) {
2024        lCnt++;
2025        if ( lCnt > lCntMax ) {
2026         Sleep( (DWORD)10 );
2027         lCnt = 0;
2028        }
2029       }
2030    #endif /* WIN32 */
2031    
2032     if ( status.loop >= status.lastloop + upd_int     if ( status.loop >= status.lastloop + upd_int
2033          && (curTime = usec()) != status.lastTime ) {          && (curTime = usec()) != status.lastTime ) {
2034      uint64_t diffTime;      uint64_t diffTime;
# Line 2001  main(int argc, char *argv[]) Line 2045  main(int argc, char *argv[])
2045      /* 区間(単位 trips/sec) */      /* 区間(単位 trips/sec) */
2046      diffTime = curTime - status.lastTime;      diffTime = curTime - status.lastTime;
2047      b = USEC_SEC * (status.loop - status.lastloop) / diffTime;      b = USEC_SEC * (status.loop - status.lastloop) / diffTime;
2048    #if defined(WIN32)
2049        if ( gear != DEF_GEAR ) {
2050         if ( sCnt < YOUSUMI ) {
2051          if ( b > maxSpeed ) {
2052           maxSpeed = b;
2053           /* x = l/s * (gear / (10 - gear)) / 100 */
2054           lCntMax = maxSpeed / (N_ALU * ALU_BITS) * (gear * 1000 / (10 - gear)) / 100000;
2055           if ( lCntMax < 1 ) {
2056            lCntMax = 1;
2057           }
2058          }
2059          sCnt++;
2060         }
2061        }
2062    #endif /* WIN32 */
2063      /* 予測 */      /* 予測 */
2064      c = UPDATE_INTERVAL * b;      c = UPDATE_INTERVAL * b;
2065      /* 立ち上がりなど、誤差があり upd_int が小さすぎたときは      /* 立ち上がりなど、誤差があり upd_int が小さすぎたときは

Legend:
Removed from v.227  
changed lines
  Added in v.229

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26