| 59 |
#define MIN_THREAD 1 |
#define MIN_THREAD 1 |
| 60 |
#define MAX_THREAD 32 |
#define MAX_THREAD 32 |
| 61 |
int nThread = 0; |
int nThread = 0; |
| 62 |
|
uint64_t pmask = 0; |
| 63 |
|
|
| 64 |
#define MIN_UME 3 |
#define MIN_UME 3 |
| 65 |
#define MAX_UME 6 |
#define MAX_UME 6 |
| 1361 |
break; |
break; |
| 1362 |
} |
} |
| 1363 |
} |
} |
| 1364 |
printf( "%s [-t num] [\"str\"]\n", myName ); |
printf( "%s [-t num|-m mask] [\"str\"]\n", myName ); |
| 1365 |
printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n", |
printf( " -t num : 検索スレッド数 ( %d ≦ num ≦ %d )\n", |
| 1366 |
MIN_THREAD, MAX_THREAD ); |
MIN_THREAD, MAX_THREAD ); |
| 1367 |
|
printf( " -m mask : 実行する CPU を指定するマスク ( 1 ビット ≦ mask のビット数 ≦ %d ビット )\n", |
| 1368 |
|
MAX_THREAD ); |
| 1369 |
|
printf( " 【 -t と -m は排他】\n" ); |
| 1370 |
printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n", |
printf( " str : 先頭に埋め込む文字列 ( %d ≦ str のバイト数 ≦ %d )\n", |
| 1371 |
MIN_UME, MAX_UME ); |
MIN_UME, MAX_UME ); |
| 1372 |
} |
} |
| 1463 |
int optChar; |
int optChar; |
| 1464 |
extern char *optarg; |
extern char *optarg; |
| 1465 |
extern int optind; |
extern int optind; |
| 1466 |
|
char *chPtr; |
| 1467 |
|
|
| 1468 |
nThread = 0; |
nThread = 0; |
| 1469 |
while ( (optChar = getopt(argc, argv, "t:h")) != EOF ) { |
pmask = 0; |
| 1470 |
|
while ( (optChar = getopt(argc, argv, "t:m:h")) != EOF ) { |
| 1471 |
switch ( optChar ) { |
switch ( optChar ) { |
| 1472 |
case 't': |
case 't': |
| 1473 |
|
pmask = 0; |
| 1474 |
nThread = atoi( optarg ); |
nThread = atoi( optarg ); |
| 1475 |
if ( nThread < MIN_THREAD || nThread > MAX_THREAD ) { |
if ( nThread < MIN_THREAD || nThread > MAX_THREAD ) { |
| 1476 |
usage( argv[0] ); |
usage( argv[0] ); |
| 1477 |
exit( 1 ); |
exit( 1 ); |
| 1478 |
} |
} |
| 1479 |
break; |
break; |
| 1480 |
|
case 'm': |
| 1481 |
|
nThread = 0; |
| 1482 |
|
if ( strlen( optarg ) > MAX_THREAD ) { |
| 1483 |
|
usage( argv[0] ); |
| 1484 |
|
exit( 1 ); |
| 1485 |
|
} |
| 1486 |
|
for ( chPtr = optarg; *chPtr != '\0'; chPtr++ ) { |
| 1487 |
|
pmask <<= 1; |
| 1488 |
|
switch ( *chPtr ) { |
| 1489 |
|
case '0': |
| 1490 |
|
/* なにもしない */ |
| 1491 |
|
break; |
| 1492 |
|
case '1': |
| 1493 |
|
pmask |= 1; |
| 1494 |
|
break; |
| 1495 |
|
default: |
| 1496 |
|
usage( argv[0] ); |
| 1497 |
|
exit( 1 ); |
| 1498 |
|
break; |
| 1499 |
|
} |
| 1500 |
|
} |
| 1501 |
|
break; |
| 1502 |
case 'h': |
case 'h': |
| 1503 |
usage( argv[0] ); |
usage( argv[0] ); |
| 1504 |
exit( 0 ); |
exit( 0 ); |
| 1545 |
|
|
| 1546 |
/* MAKAI start */ |
/* MAKAI start */ |
| 1547 |
if ( nThread == 0 ) { |
if ( nThread == 0 ) { |
| 1548 |
proc_mask = thread_avail(); |
if ( pmask == 0 ) { |
| 1549 |
|
proc_mask = thread_avail(); |
| 1550 |
|
} else { |
| 1551 |
|
proc_mask = pmask; |
| 1552 |
|
printf( "%d 個の検索スレッドを生成\n", popcnt64( proc_mask ) ); |
| 1553 |
|
} |
| 1554 |
} else { |
} else { |
| 1555 |
int i; |
int i; |
| 1556 |
proc_mask = 0U; |
proc_mask = 0U; |
| 1557 |
for ( i = 0; i < nThread; i++ ) { |
for ( i = 0; i < nThread; i++ ) { |
|
proc_mask |= 1U; |
|
| 1558 |
proc_mask <<= 1; |
proc_mask <<= 1; |
| 1559 |
|
proc_mask |= 1U; |
| 1560 |
} |
} |
| 1561 |
|
printf( "%d 個の検索スレッドを生成\n", nThread ); |
| 1562 |
} |
} |
| 1563 |
/* MAKAI end */ |
/* MAKAI end */ |
| 1564 |
|
|
| 1592 |
code = scoreboard_map(sfp); |
code = scoreboard_map(sfp); |
| 1593 |
|
|
| 1594 |
/* キーの初期化 */ |
/* キーの初期化 */ |
| 1595 |
|
/* MAKAI start */ |
| 1596 |
srand(time(NULL)); |
srand(time(NULL)); |
| 1597 |
|
/* MAKAI end */ |
| 1598 |
key_init(key); |
key_init(key); |
| 1599 |
set_salt(code, crypt64_descs[0], key); |
set_salt(code, crypt64_descs[0], key); |
| 1600 |
|
|