sage推奨
プエダ?
ふむ。
遊んでたら立っちゃった。
どうせだから漏れの実験メモに使わせてもらうよ
了解了解∠(`Д´)
\●ノ \●ノ <●>
へ■ ▼へ ■へ
> < <
>>6 実際にはたしか98らしい。
100まで間近だが、ここに来て失速中。
本日の作業
http://ranobe.com/up/updata/up0926.gif こんな感じで、Bitslice SboxのVCインラインアセンブリ(MMX)化は完了。
UFCのアセンブリコードより確実に長くなってるのだが、本当に速くなるのか疑問に思えてきた。
DES/crypt(3)の基本的なコードを見ながら書いてるのだが、さて、まだコアループのルーチンが
出来上がってないわけであるが。
Johnのコードをパクればいいのだが、GPLとかいうややこいライセンスな上に
コードの見通しが悪すぎるので、独自に書くことにした。
なお、MMX非対応のマシン用のコードは、マンドクセーのでコンパイラの最適化に任せることにする。
アセンブリコードの読み書きにもだいぶ慣れてきた。
今回のプロジェクトはあんま関係ないが、この程度のものは書けるようになった
ものすごい速さで64ビットデータの真値のビットをカウントするアルゴリズム@MMX
unsigned int BitCount64_MMX(unsigned __int64 n) {
static const unsigned __int64 mask[5] = { 0x5555555555555555, 0x3333333333333333,
0x0F0F0F0F0F0F0F0F, 0x00FF00FF00FF00FF, 0x0000FFFF0000FFFF };
static const int shifts = 1;
unsigned int r;
__asm movq mm0,n __asm movd mm3,shifts
__asm movq mm1,mm0 __asm movq mm2,mm3 __asm psrlq mm0,mm2 __asm movq mm4,[mask]
__asm pand mm0,mm4 __asm pand mm1,mm4 __asm paddusb mm0,mm1
__asm movq mm1,mm0 __asm psllq mm2,mm3 __asm psrlq mm0,mm2 __asm movq mm4,[mask+8]
__asm pand mm0,mm4 __asm pand mm1,mm4 __asm paddusb mm0,mm1
__asm movq mm1,mm0 __asm psllq mm2,mm3 __asm psrlq mm0,mm2 __asm movq mm4,[mask+16]
__asm pand mm0,mm4 __asm pand mm1,mm4 __asm paddusb mm0,mm1
__asm movq mm1,mm0 __asm psllq mm2,mm3 __asm psrlq mm0,mm2 __asm movq mm4,[mask+24]
__asm pand mm0,mm4 __asm pand mm1,mm4 __asm paddusb mm0,mm1
__asm movq mm1,mm0 __asm psllq mm2,mm3 __asm psrlq mm0,mm2 __asm movq mm4,[mask+32]
__asm pand mm0,mm4 __asm pand mm1,mm4 __asm paddusb mm0,mm1
__asm movq mm1,mm0 __asm psllq mm2,mm3 __asm psrlq mm0,mm2 __asm paddusb mm0,mm1
__asm movd r,mm0 __asm emms
return r;
}
プエダさんに弟子入りしたい
14 :
ありなさん:04/02/26 20:48 ID:tF0paa8+
プエダさんのトリッパ使いたい
15 :
だって:04/02/26 23:16 ID:ncmbbE28
弟子にしてください
○| ̄|_
16 :
はるかさん ◆HALUKA3/Bs :04/02/27 08:52 ID:g3yoBP8S
削れるとこ削ってみた
unsigned int BitCountMMX(unsigned __int64 n)
{
static const unsigned __int64 mask[] = {
0x5555555555555555, 0x3333333333333333, 0x0F0F0F0F0F0F0F0F
};
static const unsigned __int64 shifts = 1;
unsigned int r;
__asm {
movq mm0, n;
movq mm1, mm0 ;
movq mm2, shifts ;
psrlq mm0, mm2 ;
movq mm3, [mask] ;
pand mm0, mm3 ;
pand mm1, mm3 ;
paddusw mm0, mm1 ;
;
movq mm1, mm0 ;
paddusw mm2, mm2 ;
psrlq mm0, mm2 ;
movq mm3, [mask+8] ;
pand mm0, mm3 ;
pand mm1, mm3 ;
paddusw mm0, mm1 ;
17 :
はるかさん ◆HALUKA3/Bs :04/02/27 08:53 ID:g3yoBP8S
;
movq mm1, mm0 ;
paddusw mm2, mm2 ;
psrlq mm0, mm2 ;
movq mm3, [mask+16] ;
pand mm0, mm3 ;
pand mm1, mm3 ;
paddusw mm0, mm1 ;
;
movq mm1, mm0 ;
paddusw mm2, mm2 ;
psrlq mm0, mm2 ;
paddusw mm0, mm1 ;
;
movq mm1, mm0 ;
paddusw mm2, mm2 ;
psrlq mm0, mm2 ;
paddusw mm0, mm1 ;
;
movq mm1, mm0 ;
paddusw mm2, mm2 ;
psrlq mm0, mm2 ;
paddusw mm0, mm1 ;
;
movd r, mm0;
emms ;
}
return (r & 0xFF);
}
18 :
はるかさん ◆HALUKA3/Bs :04/02/27 09:20 ID:g3yoBP8S
さて、某所でハッタリかましてきたわけだが
20 :
けいり:04/02/27 12:41 ID:/2nRzG2k
(・3・)<思念ぱぴこ
のたんぺ氏と対談中
基本的に外見はMona上位互換の機能でいこうかな、と。
エセ正規表現機能を強化します。
なぜエセなのかというと、 | や () のサポートを諦めたからです。
[Aa][0-9]などはサポートします。
文字列判定は3段階ですが、エセ正規表現が噛ましてなければ一次判定のみでチェックが完了します。
ちなみに [Aa][Aa][Aa][Aa] で検索して Yagi が1次判定を通過したりする仕様ですが、
決してSoftEtherの作者とは関係ありません。
Trip-Monaの仕様だと、ターゲットに AAAAAAAA を指定した場合、
AAAAAAAA?? / ?AAAAAAAA? / ??AAAAAAAA
の3つのパターンを生成しますが、うちでもそうなってます。
上の場合、??AAAAAA?? で検索して、あとは自分で篩にかけた方が速いかも知れません。
いつになるかわかりませんが、正規表現の後方参照をサポートしたいと思います。
^?????#1#2#3#4#5 と記述すれば、ABCDEABCDE型などのパターンに一致します。
[A-Z]#1#1#1 で、AAAA BBBB ... ZZZZにマッチします
# なのは正規表現の\1などと区別するためでありますが、#1は1つ目の ? もしくは [] の中身と
同じ文字になる、という意味です。
この似非正規表現のコンパイラ、作るのが大変な上に、内部アルゴリズムを変えたら
コードが全く無駄になるかもしれません。
23 :
はるかさん ◆HALUKA3/Bs :04/02/27 16:37 ID:g3yoBP8S
24 :
はるかさん ◆HALUKA3/Bs :04/02/28 00:27 ID:i2CdyQRg
ほぅほぅ
応援。
26 :
はるかさん ◆HALUKA3/Bs :04/02/28 00:46 ID:i2CdyQRg
ちなみに
>>23は思いっきり捏造。トリッパーのスクリーンショットをペイントで書き換えただけです。
プエダはもうもうちゃんねるにはこんのか?
28 :
はるかさん ◆HALUKA3/Bs :04/02/28 04:50 ID:i2CdyQRg
>>28 ・・・ついにやっちまったな、、、。
曝しを。
ということで、落ちの方向に(>_<)
enchanted に見えたのもご愛嬌(うは
31 :
ぐぇばら:04/02/28 05:42 ID:UuX9Zcje
牛スレいっぱいたってるなw
notanpe氏と連絡を取ろうとしたらしいですが・・・
・大小区別なし?
・検索引数は一定(+指定)?もしくはランダムれすか?
個人的な好み rd8>rc8>rb8>ra8 (あはん
正規は似非で充分かな。。。連物より完物好みなの(えへ
33 :
はるかさん ◆HALUKA3/Bs :04/02/28 06:39 ID:i2CdyQRg
のたんぺ氏とはちょっとばかし某掲示板で意見交換してきましたよ
あんま収穫は無かった
つか、
^(AAAAA|BBBBB|CCCCC)
みたいなのって、やっぱ読みにくいし書きにくいでしょ?
かといって遅いマシン用トリッパーみたいに大量にターゲット書くのもマンドクセーし
ソフト側の処理も大変。
Mona+αの機能で逝きます。
[Aa][Bb][Cc][Dd][Ee] で、区別無し検索をできます。
区別あり、エセ正規表現無しの場合の挙動は、Monaと同じです。
むしろ遅いはず。
Monaだと内部表現で32個パターンに展開しますが、
Enhanced Tripper(以下ET)では1つのパターンとして検索します。
比較のループ回数が減る分、速くなるはずです。
よく考えたら#はコメントとして使いたいから、@1〜@9みたいな感じにするかも。
先頭一致で9連ならこんな感じですね。
^?@1@1@1@1@1@1@1@1
10連だとこんな感じになります。
[.26AEIMQUYcgkosw]@1@1@1@1@1@1@1@1@1
34 :
はるかさん ◆HALUKA3/Bs :04/02/28 06:56 ID:i2CdyQRg
で、構想だけが一人歩きして肝心のコードが書けてないわけですが。
35 :
はるかさん ◆HALUKA3/Bs :04/02/28 07:00 ID:i2CdyQRg
>>24のようなグラフィカルなインターフェイスを搭載するかどうかはわかりません
とりあえずコマンドプロンプト上で動く奴をリリースし、その後で気が向いたら
GUIを載せようと思います。
37 :
ありなさん:04/02/29 07:58 ID:EAMGht9M
URL書いちゃダメだよ上田くん
◆WasedaHL52
解析きぼん
うちのソフトは7bit ASCIIの印字可能な文字の範囲しか検索しない仕様です。
他人のトリップのクラックも想定してません。
WASEDA????
Waseda????
waseda????
????WASEDA
とか、それ以外には、何でもいいから人名を検索したいって人とかには
有用なツールになります。
あと、複数の検索依頼を受けてる人とかね。
つまり、微妙にプロ仕様。
トリッパーより速いということも保証できません。
同時に複数のキーを検索することで、検索効率をあげてるだけです。
ついでに言うと、うちのマシンは多分あなた方の使ってるマシンより、遅いです。
なんかわからんががんがれ、未来のブルゲイツ
もうもう党員なら迷わずアスロソ64。
党首お勧めの一品です。
A あの
M もうもうが使う
D ダメCPU
ベンチマークテストの依頼
ftp://ftp.distributed.net/pub/dcti/archives/v2.7112/ から
rc5des444b-win32-x86-cli.zip
をDLして
rc5des.exe -benchmark
で実行キボン
んで、ベンチマーク結果を実行環境とともに報告キボンです
ああ、DESのほうだけでヨイですよ
1つのトリップを作るのに25回の暗号化処理が必要なので、1/25ほどの速度になります。
で、Enhancedのコアルーチンにはこいつと同じものを使う予定です。
当方の結果は
CPU:Mobile PentiumIII (Coppermine) 500MHz
メモリ:256MB
OS:Windows 2000 SP3
で、約2,608k/s出てます
つまりこいつのルーチンを使えば、104k trip/s 程度は出る計算になります
この速度を犠牲にしないために判定ルーチンをいかに軽くするかにかかってますね。
ちなみにTrip-Monaで 74k trip/s程度だからだいぶ速い。
はいじんさんはどんくらい出ますか?
Panasonicのノートが良さそうですね
SXGA+萌え
はるかさんに絡んでre8の話題があがっとるだなp
46 :
はるかさん ◆HALUKA3/Bs :04/03/05 17:57 ID:Wi2rf26X
なんとなく保守age
ぉぃ、プエダ。
HPからアスロソ64搭載ノートが出たぞ。
AMDは専用のコンパイラが無い時点で駄目じゃん。
SSE2命令とかも弱いらしいし。
ハード側で新命令に最適化してくれる機構があれば別だけど。
49 :
エリート街道さん:04/03/07 22:45 ID:T5BJXU85
まあがんばれや
CPU Pentium4 2.6CGHz(HTオン)
MEMORY PC3200 1024MB CL3 デュアルチャンネル駆動
マザー Intel 865PERLX
HD HGST HDS722516VLAT80(ULTRA ATA100 7200rmp 80GBプラッタ)
OS XP Home SP1
で 33,554,432,00ですたが、これでええのでしょうか・・・
なんか違う気が。
>>51 おお、やっぱ滅茶苦茶速いですな。
DESのメインループを25回実行することになるので、ベンチマークの値の1/25くらいが
トリップに応用した場合の大凡の検索速度になります。
まあ1Mtrip/sは間違いないですね。
疑問なのですがHP HomeってHTの意味あるんでせうか?
>>52 これでええんかのう。
なんか見るとこ間違ったのかと心配なんだが。
DESのベンチの値でいいんだよね?
それと、計測後固まってしまうがなぜじゃろう。
XP homeの間違い
で、やたら遅いと言われるPentium4ですが、単純な論理演算の組み合わせで構成される
処理はメチャ速いわけでして。
一般にPen4で遅くなる要因としては、条件分岐命令なんかですね。
まあ、あんま良く知りませんが
>>53 固まるって?カウントダウン後勝手に終了しません?
まあ、ルーチン自体の不具合ではないはずです。
まあ、SSE2専用のコードを書かなくても十分な速度は得られそうですな。
なるほど。流石にSMPマシンとしては認識しないのでしょうか。
とりあえずMMX対応版としてリリースし、その後個別の最適化を行っていく方向で。
>>55 手持ちの2000マシソ(Pen3 500MHz)のはカウントダウン後に終了すんだけど、
XPの方は固まって終了しないのよ。うーん。
結局ノートはDothanが出るまで買わないことにしたのか?
とりあえず金貯めないことには
シェアウェアにしてみたら誰か買いますかね?藁
61 :
はるかさん ◆DKh/HARUKA :04/03/11 00:07 ID:i2DxyrgX
ついでにage
(il゚iдi゚l)<またあげられた!
63 :
ありなさん:04/03/11 18:44 ID:BsJNb3f0
有菜LOVE
LOVE♥
65 :
700系のぞみ:04/03/13 01:45 ID:QfJ1LpLt
スマソ
今ここを見るまで、「はるかさん」と「ありなさん」を
ずっと混同していました。
66 :
エリート街道さん:04/03/13 20:30 ID:OmhLACIu
LOVE
67 :
はるかさん ◆DKh/HARUKA :04/03/14 15:54 ID:PKoQ+6yH
あ
68 :
はるかさん ◆DKh/HARUKA :04/03/16 04:14 ID:M2NG3Kx/
謎のスクリプトage
#!/usr/bin/ruby -Ks
AR = Array.new(64) {|i| 55 - ((i / 8 * 7) + (i % 8)) }
PC1_C = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36]
PC1_D = [63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
PC2_C = [ 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2 ]
PC2_D = [ 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ]
c = Array.new(28) {|i| AR[ PC1_C[i] -1 ] }
d = Array.new(28) {|i| AR[ PC1_D[i] -1 ] }
16.times {|i|
[ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 ][i].times { tmp = c.shift; c.push(tmp); tmp = d.shift; d.push(tmp) }
puts "// round #{i+1}"
8.times {|j|
print "s", j+1, "("
6.times {|k|
print i&1==1? "L" : "R"
printf("[E[%2d]] ^ Key[%2d], " , j*6+k,c, (j < 24 ? c[PC2_C[j*6+k]-1] : d[PC2_D[j*6+k]-29]))
print "\n " if(k % 3 == 2)
}
outbits = [8,16,22,30,12,27, 1,17,23,15,29, 5,25,19, 9, 0, 7,13,24, 2, 3,28,10,18,31,11,21, 6, 4,26,14,20,]
4.times {|k|
print i&1==1? "&R" : "&L"
printf("[%2d]", outbits[j*4+k])
print k != 3 ? ", " : ");\n"
}
}
}
AR = Array.new(64) {|i| 55 - ((i / 8 * 7) + (i % 8)) }
PC1_C = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36]
PC1_D = [63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
SHIFTS = [ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 ]
PC2 = [ 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ]
OUT = [8, 16, 22, 30, 12, 27, 1, 17, 23, 15, 29, 5, 25, 19, 9, 0,
7, 13, 24, 2, 3, 28, 10, 18, 31, 11, 21, 6, 4, 26, 14, 20]
C = Array.new(28) {|i| AR[ PC1_C[i] -1 ] }
D = Array.new(28) {|i| AR[ PC1_D[i] -1 ] }
16.times {|i|
SHIFTS[i].times { tmp = C.shift; C.push(tmp); tmp = D.shift; D.push(tmp) }
puts "// round #{i+1}"
8.times {|j|
print "s", j+1, "("
6.times {|k|
print i&1==1? "L" : "R"
printf("[E[%2d]] ^ Key[%2d], " , j*6+k, (C+D)[PC2[j*6+k]-1] )
print "\n " if(k == 3)
}
4.times {|k|
print i&1==1? "&R" : "&L"
printf("[%2d]", ob[j*4+k])
print k != 3 ? ", " : ");\n"
}
}
}
また動作確認せずにageてもた
○報○能○学科に名前が一致する人ハッケソ、、
75 :
エリート街道さん:04/03/17 15:10 ID:ycIwA+0R
同姓同名はいるよ〜
76 :
はるかさん ◆DKh/HARUKA :04/03/18 20:09 ID:R0cC/gAt
コアは完成してるのに、トリップを1つも生成できないという駄作の悪寒・・・。
腹を切って(ry
78 :
はるかさん ◆DKh/HARUKA :04/03/19 15:32 ID:36Cyuq/K
キースケジューリングを何とかせねば
79 :
ありなさん:04/03/21 08:57 ID:Hk4V4ygF
廃人イエスage
はるかさん発狂
81 :
だって:04/03/21 11:14 ID:Tbwb3XOF
マウマウ(゜∀゜)
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ