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 257 by notanpe, Sun Jan 2 06:13:37 2011 UTC revision 258 by notanpe, Fri Jan 7 09:02:08 2011 UTC
# Line 59  int    availCPU;       /* usage() で使うので大域?/span> Line 59  int    availCPU;       /* usage() で使うので大域?/span>
59  #define YOUSUMI 6       /* STS_PAN * YOUSUMI 秒様子見 */  #define YOUSUMI 6       /* STS_PAN * YOUSUMI 秒様子見 */
60  int     lCntMax;  int     lCntMax;
61    
62    /* 塩固定 */
63    char    fixedSalt[3];   /* log_print で使うので大域変数 */
64    #define NUMSC 64        /* 塩の文字種数 */
65    static char     saltChar[NUMSC] = "abcdefghijklmnopqrstuvwxyz"
66                                  "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
67                                  "0123456789./";
68    
69  static HANDLE mutex_key;  static HANDLE mutex_key;
70    
71  /* CRYPT64 記述子 */  /* CRYPT64 記述子 */
# Line 408  thread_crypt64_new(void *a_param) Line 415  thread_crypt64_new(void *a_param)
415    
416          OLDPRINT( "n_cpus %d\n", n_cpus );          OLDPRINT( "n_cpus %d\n", n_cpus );
417          ploop = &loop_cpu[n_cpus++];          ploop = &loop_cpu[n_cpus++];
418            lc = 0;
419    
420            OLDPRINT( "(unsigned)th %u\n", (unsigned)th );
421            OLDPRINT( "param->seed %u\n", param->seed );
422            /* th はスレッドが違っても同じ値になってる */
423          srand(usec() ^ param->seed ^ (unsigned)th);          srand(usec() ^ param->seed ^ (unsigned)th);
424          key_init(&key);          key_init(&key);
425    
426          ReleaseMutex(mutex_key);          ReleaseMutex(mutex_key);
427    
428  #ifdef thread_set_priority  #ifdef thread_set_priority
429          thread_set_priority(th, param->pri);          thread_set_priority(th, param->pri);
430  #endif  #endif
431    
432          lc = 0;    if ( fixedSalt[0] != '\0' ) {
433       int  ki;
434    
435       key.key[1] = fixedSalt[0];
436       key.key[2] = fixedSalt[1];
437       set_salt(code, crypt64_descs[0], key.key);
438       key.key[7] = '\0';
439       key.key[8] = '\0';
440       for ( ;; ) {
441        for ( ki = 0; ki < 4; ki++ ) {
442         key.key[ki] = rand() % 0x7f + 1;
443         key_set64(&pkt->key64, ki, key.key[ki], key.key[ki] ^ pkt->uk.key[ki], 0);
444         pkt->uk.key[ki] = key.key[ki];
445        }
446        for ( key.key[4] = 0x01; key.key[4] <= 0x7f; key.key[4]++ ) {
447         key_set64(&pkt->key64, 4, key.key[4], key.key[4] ^ pkt->uk.key[4], 0);
448         pkt->uk.key[4] = key.key[4];
449         for ( key.key[5] = 0x01; key.key[5] <= 0x7f; key.key[5]++ ) {
450          key_set64(&pkt->key64, 5, key.key[5], key.key[5] ^ pkt->uk.key[5], 0);
451          pkt->uk.key[5] = key.key[5];
452          for ( key.key[6] = 0x01; key.key[6] <= 0x7f; key.key[6]++ ) {
453           key_set64(&pkt->key64, 6, key.key[6], key.key[6] ^ pkt->uk.key[6], 0);
454           pkt->uk.key[6] = key.key[6];
455           CALL_CRYPT64(code, &pkt->key64, &pkt->param64);
456           CALL_CMP64(cmp, pkt->param64.hit, pkt->param64.lr);
457           check_hit(pkt, pkt->param64.hit);
458           (*ploop)++;
459    #ifdef ENABLE_GEAR
460                            lc++;
461                            if ( lCntMax != 0 ) {
462                             if ( lc > lCntMax ) {
463                              OLDPRINT( "before %I64u\n", usec() );
464                              Sleep( (DWORD)GEAR_SLEEP );
465                              OLDPRINT( "after %I64u\n", usec() );
466                              lc = 0;
467                             }
468                            }
469    #endif /* ENABLE_GEAR */
470          }
471         }
472        }
473       }
474      }
475    
476          for (;;)          for (;;)
477          {          {
478                  do                  do
# Line 491  char   *path; Line 546  char   *path;
546    
547    myName = bname( path );    myName = bname( path );
548    printf( "まあ、待て屋。魔改造版 (%s)\n", KIND );    printf( "まあ、待て屋。魔改造版 (%s)\n", KIND );
549    printf( "%s [-h] [-v] [-p num] [-t num|-m mask] [-g num]\n", myName );    printf( "%s [-h] [-v] [-p num] [-t num|-m mask] [-g num] [-z]\n", myName );
550    printf( " -h : これを表示\n" );    printf( " -h : これを表示\n" );
551    printf( " -v : 冗長メッセージ\n" );    printf( " -v : 冗長メッセージ\n" );
552    printf( " -p num : 優先度の設定 ( %d ≦ num ≦ %d, デフォルトは %d )\n",    printf( " -p num : 優先度の設定 ( %d ≦ num ≦ %d, デフォルトは %d )\n",
# Line 506  char   *path; Line 561  char   *path;
561    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",    printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n",
562            THREAD_MAX );            THREAD_MAX );
563    printf( " -g num : がんばりぐあい ( %d (やる気なし) ≦ num ≦ %d (フルパワー), デフォルトは、%d )\n", GEAR_MIN, GEAR_MAX, GEAR_DEF );    printf( " -g num : がんばりぐあい ( %d (やる気なし) ≦ num ≦ %d (フルパワー), デフォルトは、%d )\n", GEAR_MIN, GEAR_MAX, GEAR_DEF );
564      printf( " -z : 全空間モード\n" );
565  }  }
566    
567  /***************************************************************  /***************************************************************
# Line 545  main(int argc, char *argv[]) Line 601  main(int argc, char *argv[])
601    } status;    } status;
602    uint64_t curTime;    uint64_t curTime;
603    
604    #ifdef USECTEST
605    {
606      int   i;
607      for ( i = 0; i < USECTEST; i++ ) {
608       printf( "%I64u\n", usec() );
609      }
610    }
611    #endif /* USECTEST */
612    
613    if (!cpuid_issupported())    if (!cpuid_issupported())
614          {          {
615            fprintf(stderr, "この環境で走らせることが想定されていません。\n");            fprintf(stderr, "この環境で走らせることが想定されていません。\n");
# Line 569  main(int argc, char *argv[]) Line 634  main(int argc, char *argv[])
634    pmask = 0;    pmask = 0;
635    verbose = 0;    verbose = 0;
636    gear = GEAR_DEF;    gear = GEAR_DEF;
637      fixedSalt[0] = fixedSalt[1] = fixedSalt[2] = '\0';
638    
639    /* abcdef  ijkl no qrs u wxyz 未使用 */    /* abcdef  ijkl no qrs u wxy  未使用 */
640    /*       gh    m  p   t v     使用済み */    /*       gh    m  p   t v   z 使用済み */
641    while ( (optChar = getopt(argc, argv, "g:hm:p:t:v")) != EOF ) {    while ( (optChar = getopt(argc, argv, "g:hm:p:t:vz")) != EOF ) {
642     switch ( optChar ) {     switch ( optChar ) {
643      case 'g':      case 'g':
644  #ifdef ENABLE_GEAR  #ifdef ENABLE_GEAR
# Line 629  main(int argc, char *argv[]) Line 695  main(int argc, char *argv[])
695      case 'v':      case 'v':
696       verbose = 1;       verbose = 1;
697       break;       break;
698        case 'z':
699         srand( usec() );
700         fixedSalt[0] = saltChar[rand() % NUMSC];
701         fixedSalt[1] = saltChar[rand() % NUMSC];
702         break;
703      default:      default:
704       usage( argv[0] );       usage( argv[0] );
705       exit( 1 );       exit( 1 );
# Line 663  main(int argc, char *argv[]) Line 734  main(int argc, char *argv[])
734    }    }
735    
736    if ( gear != GEAR_MAX ) {    if ( gear != GEAR_MAX ) {
737       /* CPU 使用率が正しく見えるように、秘孔をついてみる */
738     TIMECAPS     tc;     TIMECAPS     tc;
739     if ( timeGetDevCaps( &tc, sizeof( TIMECAPS ) ) == MMSYSERR_NOERROR ) {     if ( timeGetDevCaps( &tc, sizeof( TIMECAPS ) ) == MMSYSERR_NOERROR ) {
740      timeBeginPeriod( tc.wPeriodMin );      timeBeginPeriod( tc.wPeriodMin );
# Line 693  main(int argc, char *argv[]) Line 765  main(int argc, char *argv[])
765     } else {     } else {
766      printf( "CPU を %d 割ぐらい使用\n", gear );      printf( "CPU を %d 割ぐらい使用\n", gear );
767     }     }
768       if ( fixedSalt[0] != '\0' ) {
769        printf( "全空間モード (salt:%c%c)\n", fixedSalt[0], fixedSalt[1] );
770       }
771    }    }
772    
773  #ifdef WIN32  #ifdef WIN32
# Line 838  main(int argc, char *argv[]) Line 913  main(int argc, char *argv[])
913    maxSrchCnt = 0;    maxSrchCnt = 0;
914    for ( ;; ) {    for ( ;; ) {
915            uint64_t diffTime;            uint64_t diffTime;
916        uint64_t spanLoop;            uint64_t spanLoop;
917    
918            Sleep(STS_SPAN);            Sleep(STS_SPAN);
919    
# Line 871  main(int argc, char *argv[]) Line 946  main(int argc, char *argv[])
946            if ( spanSpeed > bestSpeed ) {            if ( spanSpeed > bestSpeed ) {
947             bestSpeed = spanSpeed;             bestSpeed = spanSpeed;
948             if ( gear != GEAR_MAX ) {             if ( gear != GEAR_MAX ) {
949          tmplCntMax = ((maxSrchCnt / (N_ALU * ALU_BITS)) * gear / 10) / ((STS_SPAN - (STS_SPAN * gear / 10)) / GEAR_SLEEP) / nThread;              tmplCntMax = ((maxSrchCnt / (N_ALU * ALU_BITS)) * gear / 10) / ((STS_SPAN - (STS_SPAN * gear / 10)) / GEAR_SLEEP) / nThread;
950             }             }
951            }            }
952    

Legend:
Removed from v.257  
changed lines
  Added in v.258

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