ECCp-109 challengeメモ

この頁はECCp-109 challengeに参加するに当たって気がついたことなどのメモをまとめています。

が、解けちゃったので、もうあんまり意味なさそうだなぁ。

以下の内容については無保障です。 嘘を書いているつもりはありませんが、書いてあるとおりに実行して問題が起きてもしりません。 自己責任で行なって下さい。

もくじ


参加に当たって (for FreeBSD-4.6R on x86)

binaryが準備されている環境の人(MS-Windows, Linux, BeOS)はそれを拾ってきて実行したらいいんだろうけど、残念ながらFreeBSDは準備できているように見えて、link先が無くなっていた。:-< (2002/10/14に見たら復活していた。) ただ、clientのsource (eccp109-132-2.tar.gz)も公開されているので、何も考えずにmake一発と思ったら、ちょっとMakefileに問題があって出来なかった。 一箇所sをSにするだけだから手で直してもいいけど一応パッチ。 sourceを展開したディレクトリで 「patch -p1 < 132-2MakefileFix.diff」 とでもして当てて下さい。

で、Makefileを直したら

make x86lCL
でeccp109-x86lCLというバイナリを作ってくれる。 あとはこれを適当なディレクトリにコピって実行すればOKと、いいたいんだけど 最初は色々初期化するとかあるので、とりあえず
./eccp109-x86lCL
として実行するとHandle, Email address, Unique Real Nameというのを聞いてくるのでいれる。 Unique Real Nameは「no spaces!」と宣言されているにも関わらずどうも入れたくなるので注意。:-) で、「OK? (y/n)」に「y」と答えると というファイルを作成&初期化してくれる。 userinf.txtには上に書いたHandleなどが入っているので後から書き換えてもよさそう。 eccinfoplistはなんだかよく分からんが、途中経過とかが入るファイルみたい。

で、準備が整ったところで

./eccp109-x86lCL -xmit
とすると実行される。 優先度を下げたい人、backgroundに回したい人はそれぞれ適切なUnixの命令を入れて下さい。 で、マシンにもよるけど数十分ほどすると
dplist
というファイルが出来る。 で、この中身が2時間毎に集計サーバーに自動送信される。 で、そのlogが
dplist.log
に溜っていく。 私はonlineで直接Internetに繋がっているので、そうじゃない場合は調べてない。 onlineじゃない人は色々documentに書いてあった気がするので見て下さい。

壁の内側の人々

proxy経由で結果を送る場合はeccp109.iniをcurrent directoryに準備し、中に
PROXY=host:port
と書く。 templateは
eccp109-132-2/inter/x86lCL/eccp109.ini
に落ちている。

より高速なコードの選択

附属ドキュメントだったかweb pageのどっかだったかに一番重い処理はmulmod_p109関数だと書いてあった。 で、その関数の実装も色々準備してあってdefaultでは
eccp109-132-2/asm/x86_att/msi/mulmod_p109.1.S
が選択される。 で、どのコードが良いかどうかは
make x86ltime
とするとeccp109-ltimeというベンチマークプログラムを作ってくれるのでそれを実行すると分かる。 実行してまず適当な識別子を入力すると数分かけて結果を作る。 結果は標準エラー出力だけじゃなくてtiming.outにも同じ内容を残してくれる。 (追記かと思ったら上書きだった)

で、見つかったBest functionをMakefileX86_ATT_DEFAULT_MSIマクロの適切なものに置き換えmakeしなおす。


mulmod_p109()のbest code

eccp109-ltimeを実行した結果をまとめる。
Athlon 1.0GHz, FreeBSD 4.5-RELEASE-p19
1444 *(1/128) seconds using mulmod_p109_1
Pentium 4 2.2GHz (Northwood), Linux 2.4.18-5bigmem
1828 *(1/100) seconds using mulmod_p109_1
Pentium III 800MHz, FreeBSD 4.5-RELEASE
2352 *(1/128) seconds using mulmod_p109_1
Pentium 4 2.0GHz (Willamette), FreeBSD 4.6.1-RELEASE-p10
2544 *(1/128) seconds using mulmod_p109_k6_0
Pentium 4 2.0GHz (Willamette), FreeBSD 4.5-RELEASE
2548 *(1/128) seconds using mulmod_p109_k6_0
Pentium 4 2.0GHz (Northwood), Linux 2.4.18-3
2012 *(1/100) seconds using mulmod_p109_1
Pentium III 700MHz (Coppermine), FreeBSD 4.7-RC
2715 *(1/128) seconds using mulmod_p109_1
Celeron 450MHz, FreeBSD 4.6-STABLE
4174 *(1/128) seconds using mulmod_p109_1
Pentium II 400MHz, FreeBSD 4.5-RELEASE-p20, 4.6.2-RELEASE
4722 *(1/128) seconds using mulmod_p109_k6_0
Celeron 366MHz, FreeBSD 4.2-RELEASE
5122 *(1/128) seconds using mulmod_p109_k6_0
K6-2 300MHz, FreeBSD 4.6.2-RELEASE-p2
8906 *(1/128) seconds using mulmod_p109_k6_1
LinuxとFreeBSDでclock()の返し値の単位が違って分かり難いぞ。

ベンチマーク

コードを作り変えても速いかどうかどう調べるのか、distinguished pointsの生成速度を見ても結構バラツキあるし、一つ生成するにもそこそこ時間がかかるしでメンドイなぁと思っていたんだけど、よく見ると「-v」optionでベンチマーク的情報を出してくれるんですね。 ということで、「-v」オプションの結果を並べてみます。 最初の10出力のうちの最速値を採用しています。
Athlon 1.0GHz, FreeBSD 4.5-RELEASE-p19
625230 iterations per second
Pentium 4 2.2GHz (Northwood), Linux 2.4.18-5bigmem
400000 iterations per second
Pentium III 800MHz, FreeBSD 4.5-RELEASE
381023 iterations per second
Pentium 4 2.0GHz (Willamette), FreeBSD 4.6.1-RELEASE-p10 with mulmod_p109_k6_0
364088 iterations per second
Pentium 4 2.0GHz (Northwood), Linux 2.4.18-3
355555 iterations per second
Pentium 4 2.0GHz (Willamette), FreeBSD 4.5-RELEASE with mulmod_p109_k6_0
355555 iterations per second
Pentium III 700MHz (Coppermine), FreeBSD 4.7-RC
327680 iterations per second
Celeron 450MHz, FreeBSD 4.6-STABLE
204800 iterations per second
Pentium II 400MHz, FreeBSD 4.6.2-RELEASE with mulmod_p109_k6_0
185528 iterations per second
Pentium II 400MHz, FreeBSD 4.5-RELEASE-p20 with mulmod_p109_k6_0
182044 iterations per second
Celeron 366MHz, FreeBSD 4.2-RELEASE with mulmod_p109_k6_0
164202 iterations per second
K6-2 300MHz, FreeBSD 4.6.2-RELEASE-p2 with mulmod_p109_k6_1
103696 iterations per second
HyperSPARC 125MHz, SunOS 4.1.4
24303 iterations per second
SuperSPARC+ 60MHz, SunOS 4.1.4
18852 iterations per second
SuperSPARC 40MHz, SunOS 4.1.3_U1
13301 iterations per second

SunOS4な人達

いまさらSunOS4を使う人っていないような気がしますけどFreeBSDの場合と同様にソースコード(eccp109-132-2.tar.gz)を取ってきて
make spCL
で出来ます。 但し改行コードはCR+LFLFの変換が必要かも。 あと、細かい修正もそれなりにいるので、ほとんどが改行コードの違いなんですが、patch(gz圧縮ですがbrowserとかが勝手に解凍するかも)を作ったのでおいておきます。

MS-Windowsな人達

MS-Windowsな人達ももちろん(とかくのは好きじゃないけど)参加できる。 Software頁にあるeccp109-132-1g.exeを拾ってきて実行すれば自動的にinstallerが動いて万事うまくいく(XP SP1で確認)。 FreeBSDの場合と同様に、インストール中にHandle, Email address, Unique Real Nameというのを聞いてくるのでいれる。 インストールが終ったらECCp-109を起動するだけだ。 インストールすると勝手にスタートアップfolderにも入れちゃうので、起動忘れがない。 onlineじゃない人は時々「Send results」ボタンを押そう。 onlineの人は「Permanent internet connection」にチェックを入れておけば時々勝手にデータを送っているようだ。 「Hide」ボタンを押すと隅に隠れるのでこれもよいかも。

distributed.netと比較して悲しい点

それなりにclientを入れれば自動的に動くのですが、今までdistributed.netのRC5-64 challengeに参加していたことから、どうも機能が劣っている部分は気になっちゃいます。

集計頁について

clientプログラムについて

ただ、dnetcと違って、コードが公開されているので自分で作り込めばいいといえばそうなんだけど。

気が向いたらそのうち要望(or/and patch)でも出してみよう。


リンク集


日本語ホーム頁に戻る
最終更新日: 2002年(平成14年)10月24日
作成日: 2002年(平成14年)10月6日