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 213 by notanpe, Thu Nov 27 09:04:41 2008 UTC revision 214 by notanpe, Tue Jan 20 13:59:02 2009 UTC
# Line 81  FILE   *tfp;   /* ↑以外の特殊検索 */ Line 81  FILE   *tfp;   /* ↑以外の特殊検索 */
81  FILE    *rfp;   /* 正規表現 */  FILE    *rfp;   /* 正規表現 */
82  #endif /* REON */  #endif /* REON */
83    
84    /*
85     Cygwin 32bit
86     time_t = long = int
87     INT_MIN                              -2147483648
88     INT_MAX                               2147483647
89     (2009 - 1970)  * 365 * 24 * 60 * 60 = 1229904000
90     2147483647 - 1229904000 =              917579647
91     10y * 365 * 24 * 60 * 60 =             315360000
92    */
93    #define MIN_SOFF -1229904000
94    #define MAX_SOFF   315360000
95  unsigned int    seed;  unsigned int    seed;
96    int     seedOffset;
97  int     verbose;  int     verbose;
98  /* MAKAI end */  /* MAKAI end */
99    
# Line 138  char   *str; Line 150  char   *str;
150       case '8': special |= ST_BUOO; break;       case '8': special |= ST_BUOO; break;
151       case '9': special |= (ST_DOSU | ST_ALLN); break;       case '9': special |= (ST_DOSU | ST_ALLN); break;
152       case 'd': special |= ST_HREN; break;       case 'd': special |= ST_HREN; break;
153         case 'S':
154          seedOffset = atoi( str + 4 );
155          if ( seedOffset < MIN_SOFF || seedOffset > MAX_SOFF ) {
156           fprintf( stderr, "乱数の種のオフセットは、%d 以上 %d 以下で指定してね。\n", MIN_SOFF, MAX_SOFF );
157           fprintf( stderr, "%d は範囲外なので無視します。\n", seedOffset );
158           seedOffset = 0;
159          }
160          break;
161       case 'R':       case 'R':
162  #ifdef REON  #ifdef REON
163        if ( strlen( str ) >= REGEXPLEN ) {        if ( strlen( str ) >= REGEXPLEN ) {
# Line 1398  char   *path; Line 1418  char   *path;
1418             MIN_THREAD, MAX_THREAD );             MIN_THREAD, MAX_THREAD );
1419    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",
1420            MAX_THREAD );            MAX_THREAD );
   printf( " 【-t と -m は排他】\n" );  
1421    printf( " -s num : 乱数の種 ( 1 ≦ num ≦ %u )\n", UINT_MAX );    printf( " -s num : 乱数の種 ( 1 ≦ num ≦ %u )\n", UINT_MAX );
1422    printf( " -v : 冗長メッセージ\n" );    printf( " -v : 冗長メッセージ\n" );
1423    printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n",    printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n",
# Line 1557  main(int argc, char *argv[]) Line 1576  main(int argc, char *argv[])
1576    nThread = 0;    nThread = 0;
1577    pmask = 0;    pmask = 0;
1578    seed = 0;    seed = 0;
1579      seedOffset = 0; /* コマンドラインオプションではないが、ここで初期化 */
1580    verbose = 0;    verbose = 0;
1581    while ( (optChar = getopt(argc, argv, "t:m:s:vh")) != EOF ) {    while ( (optChar = getopt(argc, argv, "t:m:s:vh")) != EOF ) {
1582     switch ( optChar ) {     switch ( optChar ) {
1583      case 't':      case 't':
      pmask = 0;  
1584       nThread = atoi( optarg );       nThread = atoi( optarg );
1585       if ( nThread < MIN_THREAD || nThread > MAX_THREAD ) {       if ( nThread < MIN_THREAD || nThread > MAX_THREAD ) {
1586        usage( argv[0] );        usage( argv[0] );
# Line 1569  main(int argc, char *argv[]) Line 1588  main(int argc, char *argv[])
1588       }       }
1589       break;       break;
1590      case 'm':      case 'm':
      nThread = 0;  
1591       if ( strlen( optarg ) > MAX_THREAD ) {       if ( strlen( optarg ) > MAX_THREAD ) {
1592        usage( argv[0] );        usage( argv[0] );
1593        exit( 1 );        exit( 1 );
# Line 1673  main(int argc, char *argv[]) Line 1691  main(int argc, char *argv[])
1691     } else {     } else {
1692      printf( "オールオフ!\n" );      printf( "オールオフ!\n" );
1693     }     }
1694       if ( seedOffset != 0 ) {
1695        printf( "乱数の種のオフセット = %d\n", seedOffset );
1696       }
1697  #ifdef REON  #ifdef REON
1698     if ( regExpStr[0] != '\0' ) {     if ( regExpStr[0] != '\0' ) {
1699      printf( "正規表現 : %s\n", regExpStr );      printf( "正規表現 : %s\n", regExpStr );
# Line 1688  main(int argc, char *argv[]) Line 1709  main(int argc, char *argv[])
1709    fwrite(crypt64_descs[0]->pro, 1, crypt64_descs[0]->cmp_pro - crypt64_descs[0]->pro, sfp);     /* prologue & コアループ */    fwrite(crypt64_descs[0]->pro, 1, crypt64_descs[0]->cmp_pro - crypt64_descs[0]->pro, sfp);     /* prologue & コアループ */
1710    
1711  /* MAKAI start */  /* MAKAI start */
1712    if ( nThread == 0 ) {     /* proc_mask に使用する CPU のマスクをセット */
1713     if ( pmask == 0 ) {     if ( pmask == 0 ) {
1714        /* 指定がなければ、使える CPU 全部 */
1715      proc_mask = thread_avail();      proc_mask = thread_avail();
1716     } else {     } else {
1717  /* だがしかし、Win32 のコードしかここにはない。w */      /* 指定された CPU の存在チェック。だが、今は Win32 のコードしかない。 */
1718  #ifdef WIN32  #ifdef WIN32
1719      DWORD_PTR   processMask, systemMask;      DWORD_PTR   processMask, systemMask;
1720      if ( GetProcessAffinityMask( GetCurrentProcess(), &processMask, &systemMask )      if ( GetProcessAffinityMask( GetCurrentProcess(), &processMask, &systemMask )
# Line 1705  main(int argc, char *argv[]) Line 1727  main(int argc, char *argv[])
1727       exit( 1 );       exit( 1 );
1728      }      }
1729  #endif /* WIN32 */  #endif /* WIN32 */
1730    
1731      proc_mask = pmask;      proc_mask = pmask;
1732      printf( "CPU : " );      printf( "CPU : " );
1733      for ( i = 0; i < MAX_THREAD; i++ ) {      for ( i = 0; i < MAX_THREAD; i++ ) {
# Line 1714  main(int argc, char *argv[]) Line 1737  main(int argc, char *argv[])
1737       pmask >>= 1;       pmask >>= 1;
1738      }      }
1739      printf( "を使用します。\n" );      printf( "を使用します。\n" );
1740    
1741        /* CPU の割り当て。だが、今は Wi(r */
1742  #ifdef WIN32  #ifdef WIN32
1743      if ( SetProcessAffinityMask( GetCurrentProcess(), proc_mask ) == 0 ) {      if ( SetProcessAffinityMask( GetCurrentProcess(), proc_mask ) == 0 ) {
1744       printf( "CPU の割り当てに失敗 その 2\n" );       printf( "CPU の割り当てに失敗 その 2\n" );
# Line 1721  main(int argc, char *argv[]) Line 1746  main(int argc, char *argv[])
1746      }      }
1747  #endif /* WIN32 */  #endif /* WIN32 */
1748     }     }
1749    } else {  
1750     int  i;     /* スレッド数の指定がない場合は、proc_mask からゲッツ */
1751     proc_mask = 0U;     if ( nThread == 0 ) {
1752     for ( i = 0; i < nThread; i++ ) {      nThread = popcnt64( proc_mask );
     proc_mask <<= 1;  
     proc_mask |= 1U;  
1753     }     }
1754    
1755     printf( "%d 個の検索スレッドを生成\n", nThread );     printf( "%d 個の検索スレッドを生成\n", nThread );
   }  
1756  /* MAKAI end */  /* MAKAI end */
1757    
1758    if (popcnt64(proc_mask) == 1) /* MAKAI */    if (nThread == 1) /* MAKAI */
1759          {          {
1760            /* single */            /* single */
1761            npkts = 1;            npkts = 1;
# Line 1764  main(int argc, char *argv[]) Line 1787  main(int argc, char *argv[])
1787    /* キーの初期化 */    /* キーの初期化 */
1788  /* MAKAI start */  /* MAKAI start */
1789    if ( seed == 0 ) {    if ( seed == 0 ) {
1790     seed = (unsigned int)time( NULL );     seed = (unsigned int)time( NULL ) + seedOffset;
1791    }    }
1792    if ( verbose ) {    if ( verbose ) {
1793     printf( "乱数の種 = %u\n", seed );     printf( "乱数の種 = %u\n", seed );
# Line 1786  main(int argc, char *argv[]) Line 1809  main(int argc, char *argv[])
1809          {          {
1810            THREAD_TH_T h;            THREAD_TH_T h;
1811            int ots = -1;            int ots = -1;
1812            threads = calloc(2 * popcnt64(proc_mask), sizeof(*threads));            threads = calloc(2 * nThread, sizeof(*threads));
1813            for (i = 0; proc_mask; i++, proc_mask >>= 1)            for (i = 0; i < nThread; i++ ) { /* MAKAI */
                 if (proc_mask & 1)  
                   {  
1814                          if (ots < 0)                          if (ots < 0)
1815                            {                            {
1816                                  /* 自分自身のスケジューリング                                  /* 自分自身のスケジューリング
# Line 1827  main(int argc, char *argv[]) Line 1848  main(int argc, char *argv[])
1848  #ifdef thread_set_priority  #ifdef thread_set_priority
1849                                  threads[nthreads].th = h;                                  threads[nthreads].th = h;
1850  #endif  #endif
1851    /* MAKAI start */
1852    #if 0
1853  #ifdef thread_get_tid  #ifdef thread_get_tid
1854                                  thread_set_affinity(h, i);                                  thread_set_affinity(h, i);
1855  #endif  #endif
1856    #endif /* 0 */
1857    /* MAKAI end */
1858                                  nthreads++;                                  nthreads++;
1859                            }                            }
1860                    }            }
1861    /* MAKAI start */
1862    #if 0
1863  #ifdef thread_get_tid  #ifdef thread_get_tid
1864            if (ots)            if (ots)
1865                  thread_set_affinity(thread_get_tid(), ots);                  thread_set_affinity(thread_get_tid(), ots);
1866  #endif  #endif
1867    #endif /* 0 */
1868    /* MAKAI end */
1869          }          }
1870    
1871    if ((ofp = fopen("log.txt", "at")) == NULL)    if ((ofp = fopen("log.txt", "at")) == NULL)

Legend:
Removed from v.213  
changed lines
  Added in v.214

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