| 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 |
|
|
| 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 ) { |
| 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", |
| 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] ); |
| 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 ); |
| 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 ); |
| 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 ) |
| 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++ ) { |
| 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" ); |
| 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; |
| 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 ); |
| 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 |
/* 自分自身のスケジューリング |
/* 自分自身のスケジューリング |
| 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) |